summaryrefslogtreecommitdiff
path: root/base/src/main/java/com
diff options
context:
space:
mode:
authorBilal Alsharifi <bilal.alsharifi@gmail.com>2019-03-04 13:11:58 -0500
committerBilal Alsharifi <bilal.alsharifi@gmail.com>2019-03-04 13:11:58 -0500
commitca82432f267708e5f31c391ec614e92b128b7cc2 (patch)
tree4423df499f822a660afa98f287955f35643cadd0 /base/src/main/java/com
parent252153e2183184bfce7bfb392c42f2e71eae5a8b (diff)
downloadsdl_android-ca82432f267708e5f31c391ec614e92b128b7cc2.tar.gz
Move rpc and enums dirs to base
Diffstat (limited to 'base/src/main/java/com')
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java109
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/FrameData.java42
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/FrameDataControlFrameType.java56
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/FrameType.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/FunctionID.java170
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/MessageType.java20
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/enums/SessionType.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommand.java231
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommandResponse.java38
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenu.java195
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenuResponse.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AirbagStatus.java170
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Alert.java346
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuver.java96
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuverResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AlertResponse.java53
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceCapability.java69
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceData.java108
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceManifest.java189
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceRecord.java108
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java54
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlCapabilities.java150
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlData.java115
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AudioPassThruCapabilities.java127
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/BeltStatus.java263
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/BodyInformation.java163
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonCapabilities.java150
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPress.java107
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPressResponse.java41
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistration.java266
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistrationResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Choice.java229
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlCapabilities.java374
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlData.java183
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/CloudAppProperties.java104
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ClusterModeStatus.java105
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Coordinate.java44
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSet.java151
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSetResponse.java39
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DIDResult.java86
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DTC.java77
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DateTime.java215
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommand.java106
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommandResponse.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFile.java93
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFileResponse.java86
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSet.java107
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSetResponse.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenu.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenuResponse.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceInfo.java145
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceStatus.java322
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessage.java126
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessageResponse.java50
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumber.java55
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumberResponse.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapabilities.java232
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ECallInfo.java99
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/EmergencyEvent.java134
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThru.java51
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThruResponse.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/EqualizerSettings.java97
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/FuelRange.java66
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GPSData.java493
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GenericResponse.java70
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceData.java82
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceDataResponse.java51
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppProperties.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppPropertiesResponse.java28
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCs.java118
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCsResponse.java60
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetFile.java127
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetFileResponse.java112
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleData.java89
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleDataResponse.java88
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapability.java79
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapabilityResponse.java64
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java512
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java333
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPoints.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java38
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HMICapabilities.java68
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HMIPermissions.java104
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlCapabilities.java107
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlData.java79
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HapticRect.java89
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/HeadLampStatus.java88
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Headers.java119
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Image.java116
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ImageField.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ImageResolution.java93
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/KeyboardProperties.java140
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/LightCapabilities.java113
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlCapabilities.java78
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlData.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/LightState.java119
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ListFiles.java45
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ListFilesResponse.java94
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/LocationDetails.java81
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MassageCushionFirmness.java79
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MassageModeData.java80
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceData.java264
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceManifest.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MenuParams.java151
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MetadataTags.java116
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ModuleData.java158
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/MyKey.java62
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationCapability.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationInstruction.java169
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceData.java189
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceManifest.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OasisAddress.java218
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppInterfaceUnregistered.java81
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppServiceData.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnAudioPassThru.java62
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonEvent.java154
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonPress.java157
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnCommand.java111
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnDriverDistraction.java80
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnHMIStatus.java190
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnHashChange.java75
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnInteriorVehicleData.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnKeyboardInput.java100
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnLanguageChange.java115
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnLockScreenStatus.java74
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnPermissionsChange.java90
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnRCStatus.java69
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnSdlChoiceChosen.java158
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnStreamRPC.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemCapabilityUpdated.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemRequest.java361
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnTBTClientState.java80
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnTouchEvent.java97
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java554
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/OnWayPointChange.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ParameterPermissions.java108
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteraction.java101
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteractionResponse.java56
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThru.java326
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThruResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteraction.java367
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteractionResponse.java86
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PermissionItem.java97
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PhoneCapability.java27
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PresetBankCapabilities.java77
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppService.java60
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppServiceResponse.java54
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PutFile.java367
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/PutFileResponse.java92
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RGBColor.java141
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlCapabilities.java311
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlData.java261
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RdsData.java180
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDID.java158
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDIDResponse.java43
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Rectangle.java119
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterface.java707
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java429
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/RemoteControlCapabilities.java158
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalProperties.java115
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalPropertiesResponse.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ScreenParams.java87
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessage.java170
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessageResponse.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SdlMsgVersion.java148
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlCapabilities.java339
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlData.java347
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SeatMemoryAction.java95
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticData.java86
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticDataResponse.java67
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocation.java203
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocationResponse.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIcon.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIconResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppProperties.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppPropertiesResponse.java18
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayout.java160
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayoutResponse.java89
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalProperties.java279
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalPropertiesResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleData.java62
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleDataResponse.java63
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimer.java305
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimerResponse.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Show.java549
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbt.java273
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbtResponse.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/ShowResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SingleTireStatus.java114
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SisData.java123
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Slider.java235
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SliderResponse.java63
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButton.java145
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButtonCapabilities.java150
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Speak.java168
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SpeakResponse.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/StartTime.java128
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/StationIDNumber.java54
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/StreamRPCResponse.java33
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButton.java121
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButtonResponse.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java836
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java486
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java30
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java83
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequest.java117
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequestResponse.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TTSChunk.java95
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Temperature.java69
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateColorScheme.java111
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TextField.java161
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TireStatus.java161
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TouchCoord.java89
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEvent.java169
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEventCapabilities.java94
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/Turn.java86
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterface.java39
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterfaceResponse.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButton.java99
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButtonResponse.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java822
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java488
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java30
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnList.java97
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnListResponse.java40
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleDataResult.java83
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleType.java142
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingCapability.java64
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingFormat.java54
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/VrHelpItem.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherAlert.java121
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherData.java350
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceData.java133
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceManifest.java103
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AmbientLightStatus.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppHMIType.java67
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppInterfaceUnregisteredReason.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppServiceType.java28
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingIndicator.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingState.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioType.java32
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/BitsPerSample.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonEventMode.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonName.java224
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonPressMode.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CarModeStatus.java39
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CharacterSet.java24
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CompassDirection.java53
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ComponentVolumeStatus.java45
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DefrostZone.java17
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeliveryMode.java16
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeviceLevelStatus.java45
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Dimension.java50
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Direction.java18
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayMode.java16
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayType.java95
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DistanceUnit.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DriverDistractionState.java32
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ECallConfirmationStatus.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ElectronicParkBrakeStatus.java38
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/EmergencyEventType.java41
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FileType.java44
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelCutoffStatus.java32
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelType.java31
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/GlobalProperty.java54
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HMILevel.java70
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HmiZoneCapabilities.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HybridAppPreference.java16
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStableStatus.java30
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStatus.java45
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageFieldName.java89
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageType.java29
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/InteractionMode.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Jingle.java31
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardEvent.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardLayout.java19
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeypressMode.java28
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Language.java250
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LayoutMode.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightName.java134
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightStatus.java19
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LockScreenStatus.java31
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageCushion.java21
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageMode.java19
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageZone.java24
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaClockFormat.java126
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaType.java23
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MetadataType.java96
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ModuleType.java19
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationAction.java31
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationJunction.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PRNDL.java70
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeQualificationStatus.java42
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeStatus.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PredefinedLayout.java140
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrerecordedSpeech.java26
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrimaryAudioSource.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioBand.java16
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioState.java20
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RequestType.java92
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Result.java199
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SamplingRate.java58
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlConnectionState.java6
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java87
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlInterfaceAvailability.java6
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SeatMemoryActionType.java25
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ServiceUpdateReason.java49
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SoftButtonType.java46
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SpeechCapabilities.java52
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/StaticIconName.java910
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SupportedSeat.java18
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemAction.java37
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java466
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemContext.java67
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TBTState.java70
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TPMS.java51
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TemperatureUnit.java14
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextAlignment.java33
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java166
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TouchType.java41
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TriggerSource.java47
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TurnSignal.java35
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/UpdateMode.java42
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataEventStatus.java32
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataNotificationStatus.java41
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataResultCode.java65
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataStatus.java36
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java148
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VentilationMode.java17
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingCodec.java50
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingProtocol.java44
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingState.java23
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VrCapabilities.java42
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WarningLightStatus.java34
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WayPointType.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WiperStatus.java98
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnMultipleRequestListener.java60
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnPutFileUpdateListener.java48
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCListener.java55
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCNotificationListener.java8
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCRequestListener.java19
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCResponseListener.java53
344 files changed, 37802 insertions, 0 deletions
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java b/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java
new file mode 100644
index 000000000..0dd46ecfd
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java
@@ -0,0 +1,109 @@
+package com.smartdevicelink.protocol.enums;
+
+/**
+ * Control frame payload tags that relate to the respective services. Each class represents a different service, RPC, Audio, and Video services.
+ */
+public class ControlFrameTags {
+
+ private static class StartServiceACKBase{
+ /** Max transport unit to be used for this service */
+ public static final String MTU = "mtu";
+ }
+
+ private static class NAKBase{
+ /** An array of rejected parameters related to the corresponding request*/
+ public static final String REJECTED_PARAMS = "rejectedParams";
+ }
+
+ /**
+ * Control frame payloads that relate to the Remote Procedure Call (RPC) service.
+ */
+ public static class RPC {
+ public static class StartService {
+ /** The max version of the protocol supported by client requesting service to start.<br>
+ * Must be in the format "Major.Minor.Patch"
+ */
+ public static final String PROTOCOL_VERSION = "protocolVersion";
+ }
+ public static class StartServiceACK extends StartServiceACKBase{
+ /** The negotiated version of the protocol. Must be in the format "Major.Minor.Patch"*/
+ public static final String PROTOCOL_VERSION = StartService.PROTOCOL_VERSION;
+ /** Hash ID to identify this service and used when sending an EndService control frame*/
+ public static final String HASH_ID = "hashId";
+ /** HU allowed transport for secondary connection */
+ public static final String SECONDARY_TRANSPORTS = "secondaryTransports";
+ /** HU allowed transports for audio and video services (1 == Primary, 2 == Secondary) */
+ public static final String AUDIO_SERVICE_TRANSPORTS = "audioServiceTransports";
+ public static final String VIDEO_SERVICE_TRANSPORTS = "videoServiceTransports";
+ /** Auth token to be used for log in into services **/
+ public static final String AUTH_TOKEN = "authToken";
+
+ }
+ public static class StartServiceNAK extends NAKBase{}
+ public static class EndService {
+ /** Hash ID supplied in the StartServiceACK for this service type*/
+ public static final String HASH_ID = RPC.StartServiceACK.HASH_ID;
+ }
+ public static class EndServiceACK {}
+ public static class EndServiceNAK extends NAKBase{}
+ /** This frame is sent from Core to application to indicate that status or configuration of
+ * transport(s) is/are updated. This frame should not be sent prior to Version Negotiation.
+ **/
+ public static class TransportEventUpdate {
+ /** The HU reported IP address and port of TCP connection */
+ public static final String TCP_IP_ADDRESS = "tcpIpAddress";
+ public static final String TCP_PORT = "tcpPort";
+ }
+ /**This frame is sent from application to Core to notify that Secondary Transport has been
+ * established. This frame should be only sent on Secondary Transport.
+ **/
+ public static class RegisterSecondaryTransport {}
+ public static class RegisterSecondaryTransportACK {}
+ public static class RegisterSecondaryTransportNAK extends NAKBase {
+ public static final String REASON = "reason";
+ }
+ }
+
+ /**
+ * Control frame payloads that relate to the Audio streaming service. This service has also been referred to as the PCM service.
+ */
+ public static class Audio {
+ public static class StartService {}
+ public static class StartServiceACK extends StartServiceACKBase{}
+ public static class StartServiceNAK extends NAKBase{}
+ public static class EndService {}
+ public static class EndServiceACK {}
+ public static class EndServiceNAK extends NAKBase{}
+ }
+
+ /**
+ * Control frame payloads that relate to the Video streaming service. This service has also been referred to as the .h264 service.
+ */
+ public static class Video {
+ public static class StartService {
+ /** Desired height in pixels from the client requesting the video service to start*/
+ public static final String HEIGHT = "height";
+ /** Desired width in pixels from the client requesting the video service to start*/
+ public static final String WIDTH = "width";
+ /** Desired video protocol to be used*/
+ public static final String VIDEO_PROTOCOL = "videoProtocol";
+ /** Desired video codec to be used*/
+ public static final String VIDEO_CODEC = "videoCodec";
+ }
+ public static class StartServiceACK extends StartServiceACKBase{
+ /** Accepted height in pixels from the client requesting the video service to start*/
+ public static final String HEIGHT = StartService.HEIGHT;
+ /** Accepted width in pixels from the client requesting the video service to start*/
+ public static final String WIDTH = StartService.WIDTH;
+ /** Accepted video protocol to be used*/
+ public static final String VIDEO_PROTOCOL = StartService.VIDEO_PROTOCOL;
+ /** Accepted video codec to be used*/
+ public static final String VIDEO_CODEC = StartService.VIDEO_CODEC;
+ }
+
+ public static class StartServiceNAK extends NAKBase{}
+ public static class EndService {}
+ public static class EndServiceACK {}
+ public static class EndServiceNAK extends NAKBase{}
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/FrameData.java b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameData.java
new file mode 100644
index 000000000..bff606c3b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameData.java
@@ -0,0 +1,42 @@
+package com.smartdevicelink.protocol.enums;
+
+import java.util.Vector;
+
+import com.smartdevicelink.util.ByteEnumer;
+
+public class FrameData extends ByteEnumer {
+
+ private static Vector<FrameData> theList = new Vector<FrameData>();
+ public static Vector<FrameData> getList() { return theList; }
+
+ byte i = 0x00;
+
+ protected FrameData(byte value, String name) {
+ super(value, name);
+ }
+
+ public final static FrameData StartSession = new FrameData((byte)0x01, "StartSession");
+ public final static FrameData StartSessionACK = new FrameData((byte)0x02, "StartSessionACK");
+ public final static FrameData StartSessionNACK = new FrameData((byte)0x03, "StartSessionNACK");
+ public final static FrameData EndSession = new FrameData((byte)0x04, "EndSession");
+
+ public final static FrameData SingleFrame = new FrameData((byte)0x00, "SingleFrame");
+ public final static FrameData FirstFrame = new FrameData((byte)0x00, "FirstFrame");
+ public final static FrameData ConsecutiveFrame = new FrameData((byte)0x00, "ConsecutiveFrame");
+ public final static byte LastFrame = (byte)0x00;
+
+ static {
+ theList.addElement(StartSession);
+ theList.addElement(StartSessionACK);
+ theList.addElement(StartSessionNACK);
+ theList.addElement(EndSession);
+ }
+
+ public static FrameData valueOf(String passedButton) {
+ return (FrameData) get(theList, passedButton);
+ }
+
+ public static FrameData[] values() {
+ return theList.toArray(new FrameData[theList.size()]);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/FrameDataControlFrameType.java b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameDataControlFrameType.java
new file mode 100644
index 000000000..bef31fe5c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameDataControlFrameType.java
@@ -0,0 +1,56 @@
+package com.smartdevicelink.protocol.enums;
+
+import java.util.Vector;
+
+import com.smartdevicelink.util.ByteEnumer;
+
+public class FrameDataControlFrameType extends ByteEnumer {
+ private static Vector<FrameDataControlFrameType> theList = new Vector<FrameDataControlFrameType>();
+ public static Vector<FrameDataControlFrameType> getList() { return theList; }
+
+ @SuppressWarnings("unused")
+ private byte _i = 0x00;
+
+ protected FrameDataControlFrameType(byte value, String name) {
+ super(value, name);
+ }
+
+ public final static FrameDataControlFrameType Heartbeat = new FrameDataControlFrameType((byte)0x0, "Heartbeat");
+ public final static FrameDataControlFrameType StartSession = new FrameDataControlFrameType((byte)0x01, "StartSession");
+ public final static FrameDataControlFrameType StartSessionACK = new FrameDataControlFrameType((byte)0x02, "StartSessionACK");
+ public final static FrameDataControlFrameType StartSessionNACK = new FrameDataControlFrameType((byte)0x03, "StartSessionNACK");
+ public final static FrameDataControlFrameType EndSession = new FrameDataControlFrameType((byte)0x04, "EndSession");
+ public final static FrameDataControlFrameType EndSessionACK = new FrameDataControlFrameType((byte)0x05, "EndSessionACK");
+ public final static FrameDataControlFrameType EndSessionNACK = new FrameDataControlFrameType((byte)0x06, "EndSessionNACK");
+ public final static FrameDataControlFrameType RegisterSecondaryTransport = new FrameDataControlFrameType((byte)0x07, "RegisterSecondaryTransport");
+ public final static FrameDataControlFrameType RegisterSecondaryTransportACK = new FrameDataControlFrameType((byte)0x08, "RegisterSecondaryTransportACK");
+ public final static FrameDataControlFrameType RegisterSecondaryTransportNACK = new FrameDataControlFrameType((byte)0x09, "RegisterSecondaryTransportNACK");
+ public final static FrameDataControlFrameType TransportEventUpdate = new FrameDataControlFrameType((byte)0xFD, "TransportEventUpdate");
+ public final static FrameDataControlFrameType ServiceDataACK = new FrameDataControlFrameType((byte)0xFE, "ServiceDataACK");
+ public final static FrameDataControlFrameType HeartbeatACK = new FrameDataControlFrameType((byte)0xFF, "HeartbeatACK");
+
+ static {
+ theList.addElement(Heartbeat);
+ theList.addElement(StartSession);
+ theList.addElement(StartSessionACK);
+ theList.addElement(StartSessionNACK);
+ theList.addElement(EndSession);
+ theList.addElement(EndSessionACK);
+ theList.addElement(EndSessionNACK);
+ theList.addElement(RegisterSecondaryTransport);
+ theList.addElement(RegisterSecondaryTransportACK);
+ theList.addElement(RegisterSecondaryTransportNACK);
+ theList.addElement(TransportEventUpdate);
+ theList.addElement(ServiceDataACK);
+ theList.addElement(HeartbeatACK);
+ }
+
+ public static FrameDataControlFrameType valueOf(String passedButton) {
+ return (FrameDataControlFrameType) get(theList, passedButton);
+ }
+
+ public static FrameDataControlFrameType[] values() {
+ return theList.toArray(new FrameDataControlFrameType[theList.size()]);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/FrameType.java b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameType.java
new file mode 100644
index 000000000..d724807d0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/FrameType.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.protocol.enums;
+
+import java.util.Vector;
+
+import com.smartdevicelink.util.ByteEnumer;
+
+public class FrameType extends ByteEnumer {
+
+ private static Vector<FrameType> theList = new Vector<FrameType>();
+ public static Vector<FrameType> getList() { return theList; }
+
+ byte i = 0x00;
+
+ protected FrameType(byte value, String name) {
+ super(value, name);
+ }
+
+ public final static FrameType Control = new FrameType((byte)0x00, "Control");
+ public final static FrameType Single = new FrameType((byte)0x01, "Single");
+ public final static FrameType First = new FrameType((byte)0x02, "First");
+ public final static FrameType Consecutive = new FrameType((byte)0x03, "Consecutive");
+
+ static {
+ theList.addElement(Control);
+ theList.addElement(Single);
+ theList.addElement(First);
+ theList.addElement(Consecutive);
+ }
+
+ public static FrameType valueOf(byte passed) {
+ return (FrameType) get(theList, passed);
+ }
+
+ public static FrameType[] values() {
+ return theList.toArray(new FrameType[theList.size()]);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/FunctionID.java b/base/src/main/java/com/smartdevicelink/protocol/enums/FunctionID.java
new file mode 100644
index 000000000..4fd4d1d73
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/FunctionID.java
@@ -0,0 +1,170 @@
+package com.smartdevicelink.protocol.enums;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+public enum FunctionID{
+ // DEPRECATED FUNCTIONS
+ SYNC_P_DATA(65537, "SyncPData"),
+ ON_SYNC_P_DATA(98305, "OnSyncPData"),
+ ENCODED_SYNC_P_DATA(65536, "EncodedSyncPData"),
+ ON_ENCODED_SYNC_P_DATA(98304, "OnEncodedSyncPData"),
+
+ // REQUESTS & RESPONSES
+ REGISTER_APP_INTERFACE(1, "RegisterAppInterface"),
+ UNREGISTER_APP_INTERFACE(2, "UnregisterAppInterface"),
+ SET_GLOBAL_PROPERTIES(3, "SetGlobalProperties"),
+ RESET_GLOBAL_PROPERTIES(4, "ResetGlobalProperties"),
+ ADD_COMMAND(5, "AddCommand"),
+ DELETE_COMMAND(6, "DeleteCommand"),
+ ADD_SUB_MENU(7, "AddSubMenu"),
+ DELETE_SUB_MENU(8, "DeleteSubMenu"),
+ CREATE_INTERACTION_CHOICE_SET(9, "CreateInteractionChoiceSet"),
+ PERFORM_INTERACTION(10, "PerformInteraction"),
+ DELETE_INTERACTION_CHOICE_SET(11, "DeleteInteractionChoiceSet"),
+ ALERT(12, "Alert"),
+ SHOW(13, "Show"),
+ SPEAK(14, "Speak"),
+ SET_MEDIA_CLOCK_TIMER(15, "SetMediaClockTimer"),
+ PERFORM_AUDIO_PASS_THRU(16, "PerformAudioPassThru"),
+ END_AUDIO_PASS_THRU(17, "EndAudioPassThru"),
+ SUBSCRIBE_BUTTON(18, "SubscribeButton"),
+ UNSUBSCRIBE_BUTTON(19, "UnsubscribeButton"),
+ SUBSCRIBE_VEHICLE_DATA(20, "SubscribeVehicleData"),
+ UNSUBSCRIBE_VEHICLE_DATA(21, "UnsubscribeVehicleData"),
+ GET_VEHICLE_DATA(22, "GetVehicleData"),
+ READ_DID(23, "ReadDID"),
+ GET_DTCS(24, "GetDTCs"),
+ SCROLLABLE_MESSAGE(25, "ScrollableMessage"),
+ SLIDER(26, "Slider"),
+ SHOW_CONSTANT_TBT(27, "ShowConstantTBT"),
+ ALERT_MANEUVER(28, "AlertManeuver"),
+ UPDATE_TURN_LIST(29, "UpdateTurnList"),
+ CHANGE_REGISTRATION(30, "ChangeRegistration"),
+ GENERIC_RESPONSE(31, "GenericResponse"),
+ PUT_FILE(32, "PutFile"),
+ DELETE_FILE(33, "DeleteFile"),
+ LIST_FILES(34, "ListFiles"),
+ SET_APP_ICON(35, "SetAppIcon"),
+ SET_DISPLAY_LAYOUT(36, "SetDisplayLayout"),
+ DIAGNOSTIC_MESSAGE(37, "DiagnosticMessage"),
+ SYSTEM_REQUEST(38, "SystemRequest"),
+ SEND_LOCATION(39, "SendLocation"),
+ DIAL_NUMBER(40, "DialNumber"),
+
+ BUTTON_PRESS(41, "ButtonPress"),
+ GET_INTERIOR_VEHICLE_DATA(43, "GetInteriorVehicleData"),
+ SET_INTERIOR_VEHICLE_DATA(44, "SetInteriorVehicleData"),
+
+ GET_WAY_POINTS(45, "GetWayPoints"),
+ SUBSCRIBE_WAY_POINTS(46, "SubscribeWayPoints"),
+ UNSUBSCRIBE_WAY_POINTS(47, "UnsubscribeWayPoints"),
+ GET_SYSTEM_CAPABILITY(48, "GetSystemCapability"),
+ SEND_HAPTIC_DATA(49, "SendHapticData"),
+ SET_CLOUD_APP_PROPERTIES(50, "SetCloudAppProperties"),
+ GET_CLOUD_APP_PROPERTIES(51, "GetCloudAppProperties"),
+ PUBLISH_APP_SERVICE(52, "PublishAppService"),
+ GET_APP_SERVICE_DATA(53, "GetAppServiceData"),
+ GET_FILE(54, "GetFile"),
+ PERFORM_APP_SERVICES_INTERACTION(55, "PerformAppServiceInteraction"),
+
+ // NOTIFICATIONS
+ ON_HMI_STATUS(32768, "OnHMIStatus"),
+ ON_APP_INTERFACE_UNREGISTERED(32769, "OnAppInterfaceUnregistered"),
+ ON_BUTTON_EVENT(32770, "OnButtonEvent"),
+ ON_BUTTON_PRESS(32771, "OnButtonPress"),
+ ON_VEHICLE_DATA(32772, "OnVehicleData"),
+ ON_COMMAND(32773, "OnCommand"),
+ ON_TBT_CLIENT_STATE(32774, "OnTBTClientState"),
+ ON_DRIVER_DISTRACTION(32775, "OnDriverDistraction"),
+ ON_PERMISSIONS_CHANGE(32776, "OnPermissionsChange"),
+ ON_AUDIO_PASS_THRU(32777, "OnAudioPassThru"),
+ ON_LANGUAGE_CHANGE(32778, "OnLanguageChange"),
+ ON_KEYBOARD_INPUT(32779, "OnKeyboardInput"),
+ ON_TOUCH_EVENT(32780, "OnTouchEvent"),
+ ON_SYSTEM_REQUEST(32781, "OnSystemRequest"),
+ ON_HASH_CHANGE(32782, "OnHashChange"),
+ ON_INTERIOR_VEHICLE_DATA(32783, "OnInteriorVehicleData"),
+ ON_WAY_POINT_CHANGE(32784, "OnWayPointChange"),
+ ON_RC_STATUS(32785, "OnRCStatus"),
+ ON_APP_SERVICE_DATA(32786, "OnAppServiceData"),
+ ON_SYSTEM_CAPABILITY_UPDATED(32787, "OnSystemCapabilityUpdated"),
+
+ // MOCKED FUNCTIONS (NOT SENT FROM HEAD-UNIT)
+ ON_LOCK_SCREEN_STATUS(-1, "OnLockScreenStatus"),
+ ON_SDL_CHOICE_CHOSEN(-1, "OnSdlChoiceChosen"),
+ ON_STREAM_RPC(-1, "OnStreamRPC"),
+ STREAM_RPC(-1, "StreamRPC"),
+
+ ;
+
+ public static final int INVALID_ID = -1;
+
+ private static HashMap<String, Integer> functionMap;
+
+ private final int ID;
+ private final String JSON_NAME;
+
+ private FunctionID(int id, String jsonName){
+ this.ID = id;
+ this.JSON_NAME = jsonName;
+ }
+
+ public int getId(){
+ return this.ID;
+ }
+
+ @Override
+ public String toString(){
+ return this.JSON_NAME;
+ }
+
+ private static void initFunctionMap(){
+ functionMap = new HashMap<String, Integer>(values().length);
+
+ for(FunctionID value : EnumSet.allOf(FunctionID.class)){
+ functionMap.put(value.toString(), value.getId());
+ }
+ }
+
+ public static String getFunctionName(int i){
+ if(functionMap == null){
+ initFunctionMap();
+ }
+
+ Iterator<Entry<String, Integer>> iterator = functionMap.entrySet().iterator();
+ while(iterator.hasNext()){
+ Entry<String, Integer> thisEntry = iterator.next();
+ if(Integer.valueOf(i).equals(thisEntry.getValue())){
+ return thisEntry.getKey();
+ }
+ }
+
+ return null;
+ }
+
+ public static int getFunctionId(String functionName){
+ if(functionMap == null){
+ initFunctionMap();
+ }
+
+ Integer result = functionMap.get(functionName);
+ return ( result == null ) ? INVALID_ID : result;
+ }
+
+ /**
+ * This method gives the corresponding FunctionID enum value for a string RPC
+ * @param name String value represents the name of the RPC
+ * @return FunctionID represents the equivalent enum value for the provided string
+ */
+ public static FunctionID getEnumForString(String name){
+ for(FunctionID value : EnumSet.allOf(FunctionID.class)) {
+ if(value.JSON_NAME.equals(name)){
+ return value;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/MessageType.java b/base/src/main/java/com/smartdevicelink/protocol/enums/MessageType.java
new file mode 100644
index 000000000..87f5b9eb3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/MessageType.java
@@ -0,0 +1,20 @@
+package com.smartdevicelink.protocol.enums;
+
+
+public enum MessageType {
+// START_SESSION,
+// START_SESSION_ACK,
+// START_SESSION_NACK,
+// END_SESSION,
+ UNDEFINED,
+ BULK,
+ RPC;
+
+ public static MessageType valueForString (String value) {
+ try{
+ return valueOf(value);
+ } catch(Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/SessionType.java b/base/src/main/java/com/smartdevicelink/protocol/enums/SessionType.java
new file mode 100644
index 000000000..f6cd888b4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/protocol/enums/SessionType.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.protocol.enums;
+
+import java.util.Vector;
+
+import com.smartdevicelink.util.ByteEnumer;
+
+
+public class SessionType extends ByteEnumer {
+
+ private static Vector<SessionType> theList = new Vector<SessionType>();
+ public static Vector<SessionType> getList() { return theList; }
+
+ byte i = 0x00;
+
+ protected SessionType(byte value, String name) {super(value, name);}
+ public final static SessionType CONTROL = new SessionType((byte) 0, "CONTROL");
+ public final static SessionType RPC = new SessionType((byte)0x07, "RPC");
+ public final static SessionType PCM = new SessionType((byte)0x0A, "PCM");
+ public final static SessionType NAV = new SessionType((byte)0x0B, "NAV");
+ public final static SessionType BULK_DATA = new SessionType((byte)0xF, "BULK_DATA");
+
+ static {
+ theList.addElement(RPC);
+ theList.addElement(PCM);
+ theList.addElement(NAV);
+ theList.addElement(BULK_DATA);
+ theList.addElement(CONTROL);
+ }
+
+ public static SessionType valueOf(byte passedButton) {
+ return (SessionType) get(theList, passedButton);
+ }
+
+ public static SessionType[] values() {
+ return theList.toArray(new SessionType[theList.size()]);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommand.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommand.java
new file mode 100644
index 000000000..9dec67b7d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommand.java
@@ -0,0 +1,231 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+*
+* <p>This class will add a command to the application's Command Menu</p>
+*
+*
+* <p><b>Note:</b> A command will be added to the end of the list of elements in
+* the Command Menu under the following conditions:</p>
+*
+* <ul>
+* <li>When a Command is added with no MenuParams value provided</li>
+* <li>When a MenuParams value is provided with a MenuParam.position value
+* greater than or equal to the number of menu items currently defined in the
+* menu specified by the MenuParam.parentID value</li>
+* </ul>
+*
+*
+* <p>The set of choices which the application builds using AddCommand can be a
+* mixture of:</p>
+*
+* <ul>
+* <li>Choices having only VR synonym definitions, but no MenuParams definitions
+* </li>
+* <li>Choices having only MenuParams definitions, but no VR synonym definitions
+* </li>
+* <li>Choices having both MenuParams and VR synonym definitions</li>
+* </ul>
+*
+* <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUD</b></p>
+*
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>cmdID</td>
+ * <td> Integer</td>
+ * <td>unique ID of the command to add</td>
+ * <td>Y</td>
+ * <td> minvalue:0; maxvalue:2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * <tr>
+ * <td>menuParams</td>
+ * <td>ButtonName</td>
+ * <td>Name of the button to unsubscribe.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrCommands</td>
+ * <td>String</td>
+ * <td><p>An array of strings to be used as VR synonyms for this command.</p> <p>If this array is provided, it may not be empty.</p></td>
+ * <td>N</td>
+ * <td>minsize:1; maxsize:100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * <tr>
+ * <td>cmdIcon</td>
+ * <td>Image</td>
+ * <td><p>Image struct determining whether static or dynamic icon.</p><p>If omitted on supported displays, no (or the default if applicable) icon shall be displayed.</p></td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+* </table>
+* <p> <b>Response</b></p><p>Indicates that the corresponding request has failed or succeeded, if the response returns with a SUCCESS result code, this means a command was added to the Command Menu successfully.</p>
+*
+* <p><b>Non-default Result Codes:</b></p> <p>INVALID_ID</p> <p>DUPLICATE_NAME</p>
+* @since SmartDeviceLink 1.0
+* @see DeleteCommand
+* @see AddSubMenu
+* @see DeleteSubMenu
+*/
+
+public class AddCommand extends RPCRequest {
+ public static final String KEY_CMD_ICON = "cmdIcon";
+ public static final String KEY_MENU_PARAMS = "menuParams";
+ public static final String KEY_CMD_ID = "cmdID";
+ public static final String KEY_VR_COMMANDS = "vrCommands";
+
+ /**
+ * Constructs a new AddCommand object
+ */
+ public AddCommand() {
+ super(FunctionID.ADD_COMMAND.toString());
+ }
+
+ /**
+ * <p>
+ * Constructs a new AddCommand object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public AddCommand(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AddCommand object
+ * @param cmdID an integer object representing a Command ID <p><b>Notes:</b> Min Value: 0; Max Value: 2000000000</p>
+ */
+ public AddCommand(@NonNull Integer cmdID) {
+ this();
+ setCmdID(cmdID);
+ }
+ /**
+ * <p>
+ * Returns an <i>Integer</i> object representing the Command ID that you want to add
+ * </p>
+ *
+ * @return Integer -an integer representation a Unique Command ID
+ */
+ public Integer getCmdID() {
+ return getInteger(KEY_CMD_ID);
+ }
+ /**
+ * <p>Sets an Unique Command ID that identifies the command. Is returned in an
+ * <i>{@linkplain OnCommand}</i> notification to identify the command
+ * selected by the user</p>
+ *
+ *
+ * @param cmdID
+ * an integer object representing a Command ID
+ * <p>
+ * <b>Notes:</b> Min Value: 0; Max Value: 2000000000</p>
+ */
+ public void setCmdID(@NonNull Integer cmdID) {
+ setParameters(KEY_CMD_ID, cmdID);
+ }
+ /**
+ * <p>
+ * Returns a <I>MenuParams</I> object which will defined the command and how
+ * it is added to the Command Menu
+ * </p>
+ *
+ * @return MenuParams -a MenuParams object
+ *
+ */
+ @SuppressWarnings("unchecked")
+ public MenuParams getMenuParams() {
+ return (MenuParams) getObject(MenuParams.class, KEY_MENU_PARAMS);
+ }
+ /**
+ * <p>
+ * Sets Menu parameters</p>
+ * If provided, this will define the command and how it is added to the
+ * Command Menu<p>
+ * If null, commands will not be accessible through the HMI application menu
+ * </p>
+ *
+ * @param menuParams
+ * a menuParams object
+ */
+ public void setMenuParams(MenuParams menuParams) {
+ setParameters(KEY_MENU_PARAMS, menuParams);
+ }
+ /**
+ * <p>
+ * Gets Voice Recognition Commands
+ * </p>
+ *
+ * @return List<String> -(List<String>) indicating one or more VR phrases
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getVrCommands() {
+ return (List<String>) getObject(String.class, KEY_VR_COMMANDS);
+ }
+ /**
+ * <p>
+ * Sets Voice Recognition Commands </p>
+ * <p>If provided, defines one or more VR phrases the recognition of any of
+ * which triggers the <i>{@linkplain OnCommand}</i> notification with this
+ * cmdID</p>
+ * <p>If null, commands will not be accessible by voice commands (when the user
+ * hits push-to-talk)
+ * </p>
+ *
+ * @param vrCommands
+ * List<String> indicating one or more VR phrases
+ * <p>
+ * <b>Notes: </b>Optional only if menuParams is provided. If
+ * provided, array must contain at least one non-empty (not null,
+ * not zero-length, not whitespace only) element</p>
+ */
+ public void setVrCommands( List<String> vrCommands ) {
+ setParameters(KEY_VR_COMMANDS, vrCommands);
+ }
+
+ /**
+ * <p>Gets the image to be shown along with a command </p>
+ *
+ * @return Image -an Image object
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public Image getCmdIcon() {
+ return (Image) getObject(Image.class, KEY_CMD_ICON);
+ }
+
+ /**
+ * <p>Sets the Image
+ * If provided, defines the image to be be shown along with a command</p>
+ * @param cmdIcon
+ * <p>an Image obj representing the Image obj shown along with a
+ * command</p>
+ * <p>
+ * <b>Notes: </b>If omitted on supported displays, no (or the
+ * default if applicable) icon will be displayed</p>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setCmdIcon(Image cmdIcon) {
+ setParameters(KEY_CMD_ICON, cmdIcon);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommandResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommandResponse.java
new file mode 100644
index 000000000..27a19a53e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddCommandResponse.java
@@ -0,0 +1,38 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Add Command Response is sent, when AddCommand has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class AddCommandResponse extends RPCResponse {
+ /**
+ * Constructs a new AddCommandResponse object
+ */
+ public AddCommandResponse() {
+ super(FunctionID.ADD_COMMAND.toString());
+ }
+
+ public AddCommandResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AddCommandResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public AddCommandResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
+
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenu.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenu.java
new file mode 100644
index 000000000..a272e5455
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenu.java
@@ -0,0 +1,195 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Add a SubMenu to the Command Menu</p>
+ *
+ * <p>A SubMenu can only be added to the Top Level Menu (i.e.a SubMenu cannot be
+ * added to a SubMenu), and may only contain commands as children</p>
+ *
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUD</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>menuID</td>
+ * <td>Integer</td>
+ * <td>Unique ID that identifies this sub menu. This value is used in AddCommand to which SubMenu is the parent of the command being added.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>position</td>
+ * <td>Integer</td>
+ * <td>Position within the items of the top level Command Menu. 0 will insert at the front, 1 will insert after the first existing element, etc. Position of any submenu will always be located before the return and exit options.</td>
+ * <td>N</td>
+ * <td>Min Value: 0 <p>Max Value: 1000</p> <p>If position is greater or equal than the number of items on top level, the sub menu will be appended by the end.</p><p>If this parameter is omitted, the entry will be added at the end of the list.</P></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuName</td>
+ * <td>String</td>
+ * <td>Text which is displayed representing this submenu item</td>
+ * <td>Y</td>
+ * <td>maxlength:500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuIcon</td>
+ * <td>Image</td>
+ * <td>Image to be be shown along with the submenu item</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * </table>
+ * <b>Response</b>
+ * <p>Indicates that the corresponding request either failed or succeeded. If the response returns with a SUCCESS result code, this means the SubMenu was added to the Command Menu successfully</p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>INVALID_ID</p>
+ * <p>DUPLICATE NAME</p>
+ * @since SmartDeviceLink 1.0
+ * @see DeleteSubMenu
+ * @see AddCommand
+ * @see DeleteCommand
+ */
+public class AddSubMenu extends RPCRequest {
+ public static final String KEY_POSITION = "position";
+ public static final String KEY_MENU_NAME = "menuName";
+ public static final String KEY_MENU_ID = "menuID";
+ public static final String KEY_MENU_ICON = "menuIcon";
+
+ /**
+ * Constructs a new AddSubMenu object
+ */
+ public AddSubMenu() {
+ super(FunctionID.ADD_SUB_MENU.toString());
+ }
+ /**
+ * Constructs a new AddSubMenu object indicated by the Hashtable parameter
+ *
+ *
+ * @param hash The Hashtable to use
+ */
+ public AddSubMenu(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AddSubMenu object
+ * @param menuID an integer object representing a Menu ID
+ * <p><b>Notes:</b> Min Value: 0; Max Value: 2000000000</p>
+ * @param menuName String which will be displayed representing this submenu item
+ */
+ public AddSubMenu(@NonNull Integer menuID, @NonNull String menuName) {
+ this();
+ setMenuID(menuID);
+ setMenuName(menuName);
+ }
+ /**
+ * Returns an <i>Integer</i> object representing the Menu ID that identifies
+ * a sub menu
+ *
+ * @return Integer -an integer representing the Menu ID that identifies a sub
+ * menu
+ */
+ public Integer getMenuID() {
+ return getInteger( KEY_MENU_ID );
+ }
+ /**
+ * <p>Sets a Menu ID that identifies a sub menu.</p><p> This value is used in
+ * {@linkplain AddCommand} to which SubMenu is the parent of the command
+ * being added</p>
+ *
+ *
+ * @param menuID
+ * an integer object representing a Menu ID
+ *
+ * <p><b>Notes:</b> Min Value: 0; Max Value: 2000000000</p>
+ */
+ public void setMenuID( @NonNull Integer menuID ) {
+ setParameters(KEY_MENU_ID, menuID);
+ }
+ /**
+ * <p>Returns an <i>Integer</i> object representing the position of menu</p>
+ *
+ *
+ * @return Integer -the value representing the relative position of menus
+ */
+ public Integer getPosition() {
+ return getInteger( KEY_POSITION );
+ }
+ /**
+ * Sets a position of menu
+ *
+ * @param position
+ * <p>An Integer object representing the position within the items
+ * of the top level Command Menu. 0 will insert at the front, 1
+ * will insert after the first existing element, etc. Position of
+ * any submenu will always be located before the return and exit
+ * options
+ * </p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>
+ * Min Value: 0; Max Value: 1000</li>
+ * <li>If position is greater than or equal to the number of items
+ * on top level, the sub menu will be appended by the end</li>
+ * <li>If this parameter is omitted, the entry will be added at
+ * the end of the list</li>
+ * </ul>
+ */
+ public void setPosition( Integer position ) {
+ setParameters(KEY_POSITION, position);
+ }
+ /**
+ * Returns String which is displayed representing this submenu item
+ *
+ * @return String -a Submenu item's name
+ */
+ public String getMenuName() {
+ return getString( KEY_MENU_NAME );
+ }
+ /**
+ * Sets a menuName which is displayed representing this submenu item
+ *
+ * @param menuName
+ * String which will be displayed representing this submenu item
+ */
+ public void setMenuName( @NonNull String menuName ) {
+ setParameters(KEY_MENU_NAME, menuName);
+ }
+ /**
+ * Returns Image to be be shown along with the submenu item
+ *
+ * @return Image - the submenu icon
+ */
+ public Image getMenuIcon() {
+ return (Image) getObject(Image.class, KEY_MENU_ICON);
+ }
+ /**
+ * Sets image to be be shown along with the submenu item
+ *
+ * @param menuIcon
+ * Image to be be shown along with the submenu item
+ */
+ public void setMenuIcon(Image menuIcon) {
+ setParameters(KEY_MENU_ICON, menuIcon);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenuResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenuResponse.java
new file mode 100644
index 000000000..dff7cd091
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AddSubMenuResponse.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Add SubMenu Response is sent, when AddSubMenu has been called
+ * @since SmartDeviceLink 1.0
+ */
+public class AddSubMenuResponse extends RPCResponse {
+ /**
+ * Constructs a new AddSubMenuResponse object
+ */
+
+ public AddSubMenuResponse() {
+ super(FunctionID.ADD_SUB_MENU.toString());
+ }
+ public AddSubMenuResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AddSubMenuResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public AddSubMenuResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AirbagStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AirbagStatus.java
new file mode 100644
index 000000000..06542c942
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AirbagStatus.java
@@ -0,0 +1,170 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+
+/**
+ * <p>The status of the air bags.</p>
+ *
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Version.</th>
+ * </tr>
+ * <tr>
+ * <td>driverAirbagDeployed </td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of driver airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>driverSideAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of driver side airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>driverCurtainAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of driver curtain airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>passengerAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of passenger airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>passengerCurtainAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of passenger curtain airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>driverKneeAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of driver knee airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>passengerSideAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of passenger side airbag.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>passengerKneeAirbagDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>Status of passenger knee airbag</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ *
+ * </table>
+ *
+ * <p><b>Response:</b></p>
+ * If a resultCode of "SUCCESS" is returned, the request was accepted by SDL. By the time the corresponding response is received, the Alert will have completed.
+ *
+ * <p><b> Non-default Result Codes:</b></p>
+ * <p>REJECTED</p><p> ABORTED</P>
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ * @see TextFieldName
+ * @see Image
+ * @see SubscribeVehicleData
+ */
+public class AirbagStatus extends RPCStruct {
+ public static final String KEY_DRIVER_AIRBAG_DEPLOYED = "driverAirbagDeployed";
+ public static final String KEY_DRIVER_SIDE_AIRBAG_DEPLOYED = "driverSideAirbagDeployed";
+ public static final String KEY_DRIVER_CURTAIN_AIRBAG_DEPLOYED = "driverCurtainAirbagDeployed";
+ public static final String KEY_DRIVER_KNEE_AIRBAG_DEPLOYED = "driverKneeAirbagDeployed";
+ public static final String KEY_PASSENGER_AIRBAG_DEPLOYED = "passengerAirbagDeployed";
+ public static final String KEY_PASSENGER_SIDE_AIRBAG_DEPLOYED = "passengerSideAirbagDeployed";
+ public static final String KEY_PASSENGER_CURTAIN_AIRBAG_DEPLOYED = "passengerCurtainAirbagDeployed";
+ public static final String KEY_PASSENGER_KNEE_AIRBAG_DEPLOYED = "passengerKneeAirbagDeployed";
+ /** Constructs a new AirbagStatus object indicated by the Hashtable
+ * parameter
+ * @param hash
+ * The hash table to use
+ *
+ *
+ */
+
+ public AirbagStatus() { }
+ public AirbagStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public AirbagStatus(@NonNull VehicleDataEventStatus driverAirbagDeployed, @NonNull VehicleDataEventStatus driverSideAirbagDeployed, @NonNull VehicleDataEventStatus driverCurtainAirbagDeployed, @NonNull VehicleDataEventStatus driverKneeAirbagDeployed,
+ @NonNull VehicleDataEventStatus passengerCurtainAirbagDeployed, @NonNull VehicleDataEventStatus passengerAirbagDeployed, @NonNull VehicleDataEventStatus passengerSideAirbagDeployed, @NonNull VehicleDataEventStatus passengerKneeAirbagDeployed) {
+ this();
+ setDriverAirbagDeployed(driverAirbagDeployed);
+ setDriverSideAirbagDeployed(driverSideAirbagDeployed);
+ setDriverCurtainAirbagDeployed(driverCurtainAirbagDeployed);
+ setDriverKneeAirbagDeployed(driverKneeAirbagDeployed);
+ setPassengerAirbagDeployed(passengerAirbagDeployed);
+ setPassengerSideAirbagDeployed(passengerSideAirbagDeployed);
+ setPassengerCurtainAirbagDeployed(passengerCurtainAirbagDeployed);
+ setPassengerKneeAirbagDeployed(passengerKneeAirbagDeployed);
+ }
+
+ public void setDriverAirbagDeployed(@NonNull VehicleDataEventStatus driverAirbagDeployed) {
+ setValue(KEY_DRIVER_AIRBAG_DEPLOYED, driverAirbagDeployed);
+ }
+ public VehicleDataEventStatus getDriverAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_AIRBAG_DEPLOYED);
+ }
+ public void setDriverSideAirbagDeployed(@NonNull VehicleDataEventStatus driverSideAirbagDeployed) {
+ setValue(KEY_DRIVER_SIDE_AIRBAG_DEPLOYED, driverSideAirbagDeployed);
+ }
+ public VehicleDataEventStatus getDriverSideAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_SIDE_AIRBAG_DEPLOYED);
+ }
+ public void setDriverCurtainAirbagDeployed(@NonNull VehicleDataEventStatus driverCurtainAirbagDeployed) {
+ setValue(KEY_DRIVER_CURTAIN_AIRBAG_DEPLOYED, driverCurtainAirbagDeployed);
+ }
+ public VehicleDataEventStatus getDriverCurtainAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_CURTAIN_AIRBAG_DEPLOYED);
+ }
+ public void setPassengerAirbagDeployed(@NonNull VehicleDataEventStatus passengerAirbagDeployed) {
+ setValue(KEY_PASSENGER_AIRBAG_DEPLOYED, passengerAirbagDeployed);
+ }
+ public VehicleDataEventStatus getPassengerAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_AIRBAG_DEPLOYED);
+ }
+ public void setPassengerCurtainAirbagDeployed(@NonNull VehicleDataEventStatus passengerCurtainAirbagDeployed) {
+ setValue(KEY_PASSENGER_CURTAIN_AIRBAG_DEPLOYED, passengerCurtainAirbagDeployed);
+ }
+ public VehicleDataEventStatus getPassengerCurtainAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_CURTAIN_AIRBAG_DEPLOYED);
+ }
+ public void setDriverKneeAirbagDeployed(@NonNull VehicleDataEventStatus driverKneeAirbagDeployed) {
+ setValue(KEY_DRIVER_KNEE_AIRBAG_DEPLOYED, driverKneeAirbagDeployed);
+ }
+ public VehicleDataEventStatus getDriverKneeAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_KNEE_AIRBAG_DEPLOYED);
+ }
+ public void setPassengerSideAirbagDeployed(@NonNull VehicleDataEventStatus passengerSideAirbagDeployed) {
+ setValue(KEY_PASSENGER_SIDE_AIRBAG_DEPLOYED, passengerSideAirbagDeployed);
+ }
+ public VehicleDataEventStatus getPassengerSideAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_SIDE_AIRBAG_DEPLOYED);
+ }
+ public void setPassengerKneeAirbagDeployed(@NonNull VehicleDataEventStatus passengerKneeAirbagDeployed) {
+ setValue(KEY_PASSENGER_KNEE_AIRBAG_DEPLOYED, passengerKneeAirbagDeployed);
+ }
+ public VehicleDataEventStatus getPassengerKneeAirbagDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_KNEE_AIRBAG_DEPLOYED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Alert.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Alert.java
new file mode 100644
index 000000000..d0c4e0400
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Alert.java
@@ -0,0 +1,346 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Provides information to the user using either TTS, the Display or both and
+ * can include a system-generated alert tone
+ *
+ * <ul>
+ * <li>The displayed portion of the Alert, if any, will persist until the
+ * specified timeout has elapsed, or the Alert is preempted</li>
+ * <li>An Alert will preempt (abort) any SmartDeviceLink Operation that is in-progress,
+ * except an already-in-progress Alert</li>
+ * <li>An Alert cannot be preempted by any SmartDeviceLink Operation</li>
+ * <li>An Alert can be preempted by a user action (button push)</li>
+ * <li>An Alert will fail if it is issued while another Alert is in progress</li>
+ * <li>Although each Alert parameter is optional, in fact each Alert request
+ * must supply at least one of the following parameters:
+ * <ul>
+ * <li>alertText1</li>
+ * <li>alertText2</li>
+ * <li>alertText3</li>
+ * <li>ttsChunks</li>
+ * </ul>
+ * </li>
+ * </ul>
+ *
+ * <p><b>HMILevel needs to be FULL or LIMITED.</b></p>
+ * <b>If the app has been granted function group Notification the HMILevel can
+ * also be BACKGROUND</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>alertText1</td>
+ * <td>String</td>
+ * <td>Text to be displayed in the first field of the display during the Alert. </td>
+ * <td>N</td>
+ * <td> Length is limited to what is indicated in RegisterAppInterface response. If omitted, top display line will be cleared. Text is always centered</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>alertText2</td>
+ * <td>String</td>
+ * <td>Text to be displayed in the second field of the display during the Alert. </td>
+ * <td>N</td>
+ * <td> Only permitted if HMI supports a second display line. Length is limited to what is indicated in RegisterAppInterface response. If omitted, second display line will be cleared. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>alertText3</td>
+ * <td>String</td>
+ * <td>Text to be displayed in the third field of the display during the Alert.</td>
+ * <td>N</td>
+ * <td>Array must have a least one element. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>ttsChunks</td>
+ * <td>TTSChunk[]</td>
+ * <td>Array of type TTSChunk which, taken together, specify what is to be spoken to the user.</td>
+ * <td>N</td>
+ * <td>Array must have a least one element. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>duration</td>
+ * <td>Integer</td>
+ * <td><p>The duration of the displayed portion of the alert, in milliseconds.</p> After this amount of time has passed, the display fields alertText1 and alertText2 will revert to what was displayed in those fields before the alert began.</td>
+ * <td>N</td>
+ * <td>Min Value: 3000 Max Value: 10000 <p>If omitted, the default is 5000 milliseconds</p></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>playTone</td>
+ * <td>Boolean</td>
+ * <td>Specifies whether the alert tone should be played before the TTS (if any) is spoken.</td>
+ * <td>N</td>
+ * <td>If omitted, default is true.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>softButtons</td>
+ * <td>SoftButton[]</td>
+ * <td>Specifies the softbuttons, the apps wants to use in this alert.</td>
+ * <td></td>
+ * <td>If omitted on supported displays, the alert will not have any SoftButton.ArrayMin: 0; ArrayMax: 4</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>progressIndicator</td>
+ * <td>Boolean</td>
+ * <td>If supported on the given platform, the alert GUI will include some sort of animation indicating that loading of a feature is progressing. e.g. a spinning wheel or hourglass, etc.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ *
+ *
+ * @see GetVehicleData
+ * @see OnVehicleData
+ * @see Show
+ * @see Speak
+ */
+public class Alert extends RPCRequest {
+ public static final String KEY_PLAY_TONE = "playTone";
+ public static final String KEY_DURATION = "duration";
+ public static final String KEY_ALERT_TEXT_1 = "alertText1";
+ public static final String KEY_ALERT_TEXT_2 = "alertText2";
+ public static final String KEY_ALERT_TEXT_3 = "alertText3";
+ public static final String KEY_PROGRESS_INDICATOR = "progressIndicator";
+ public static final String KEY_TTS_CHUNKS = "ttsChunks";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+
+ /**
+ * Constructs a new Alert object
+ */
+ public Alert() {
+ super(FunctionID.ALERT.toString());
+ }
+ /**
+ * <p>Constructs a new Alert object indicated by the Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public Alert(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Gets the text which is displayed in the first field of the display during
+ * the Alert
+ *
+ * @return String - a String value representing the text which is displayed
+ * in the first field during the Alert
+ */
+ public String getAlertText1() {
+ return getString(KEY_ALERT_TEXT_1);
+ }
+ /**
+ * Sets the String to be displayed in the first field of the display during
+ * the Alert
+ *
+ * @param alertText1
+ * String Value
+ *
+ * <p><b>Notes: </b></p>
+ * <ul>
+ * <li>Length is limited to what is indicated in <i>
+ * {@linkplain RegisterAppInterface}</i> response</li>
+ * <li>If omitted, top display line will be cleared</li>
+ * <li>Text is always centered</li>
+ * </ul>
+ */
+ public void setAlertText1(String alertText1) {
+ setParameters(KEY_ALERT_TEXT_1, alertText1);
+ }
+ /**
+ * Gets the text which is displayed in the second field of the display
+ * during the Alert
+ *
+ * @return String -a String value representing the text which is displayed
+ * in the second field during the Alert
+ */
+ public String getAlertText2() {
+ return getString(KEY_ALERT_TEXT_2);
+ }
+ /**
+ * Sets the String to be displayed in the second field of the display during
+ * the Alert
+ *
+ * @param alertText2
+ * String Value
+ *
+ * <p><b>Notes: </b></p>
+ * <ul>
+ * <li>Only permitted if HMI supports a second display line</li>
+ * <li>Length is limited to what is indicated in <i>
+ * {@linkplain RegisterAppInterface}</i> response</li>
+ * <li>If omitted, second display line will be cleared</li>
+ * <li>Text is always centered</li>
+ * </ul>
+ */
+ public void setAlertText2(String alertText2) {
+ setParameters(KEY_ALERT_TEXT_2, alertText2);
+ }
+
+ /**
+ * Gets the text which is displayed in the third field of the display during
+ * the Alert
+ *
+ * @return String -a String value representing the text which is displayed
+ * in the third field during the Alert
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ public String getAlertText3() {
+ return getString(KEY_ALERT_TEXT_3);
+ }
+
+ /**
+ * Sets the String to be displayed in the third field of the display during
+ * the Alert
+ *
+ * @param alertText3
+ * String Value
+ *
+ * <p> <b>Notes: </b></p>
+ * <ul>
+ * <li>Only permitted if HMI supports a third display line</li>
+ * <li>Length is limited to what is indicated in <i>
+ * {@linkplain RegisterAppInterface}</i> response</li>
+ * <li>If omitted, third display line will be cleared</li>
+ * <li>Text is always centered</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ public void setAlertText3(String alertText3) {
+ setParameters(KEY_ALERT_TEXT_3, alertText3);
+ }
+ /**
+ * Gets TTSChunk[], the Array of type TTSChunk which, taken together,
+ * specify what is to be spoken to the user
+ *
+ * @return List -a List<TTSChunk> value specify what is to be spoken to
+ * the user
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTtsChunks() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TTS_CHUNKS);
+ }
+ /**
+ * Sets array of type TTSChunk which, taken together, specify what is to be
+ * spoken to the user
+ *
+ * @param ttsChunks
+ *
+ * <p> <b>Notes: </b>Array must have a least one element</p>
+ */
+ public void setTtsChunks(List<TTSChunk> ttsChunks) {
+ setParameters(KEY_TTS_CHUNKS, ttsChunks);
+ }
+ /**
+ * Gets the duration of the displayed portion of the alert, in milliseconds
+ *
+ * @return Integer -an Integer value representing the duration of the
+ * displayed portion of the alert, in milliseconds
+ */
+ public Integer getDuration() {
+ return getInteger(KEY_DURATION);
+ }
+ /**
+ * <p>Sets the duration of the displayed portion of the alert, in milliseconds.
+ * After this amount of time has passed, the display fields alertText1 and
+ * alertText2 will revert to what was displayed in those fields before the
+ * alert began</p>
+ *
+ *
+ * @param duration
+ * the Integer values representing the duration time, in
+ * milliseconds
+ * <p>
+ * <b>Notes: </b></p>
+ * <ul>
+ * <li>Min Value: 3000; Max Value: 10000</li>
+ * <li>If omitted, the default is 5000 milliseconds</li>
+ * </ul>
+ */
+ public void setDuration(Integer duration) {
+ setParameters(KEY_DURATION, duration);
+ }
+ /**
+ * Gets a Boolean value representing the alert tone
+ *
+ * @return Boolean -If TRUE, means an alert tone will be played before the
+ * TTS (if any) is spoken
+ */
+ public Boolean getPlayTone() {
+ return getBoolean(KEY_PLAY_TONE);
+ }
+ /**
+ * Sets whether the alert tone should be played before the TTS (if any) is
+ * spoken
+ *
+ * @param playTone
+ * a Boolean value which specifies whether the alert tone should
+ * be played before the TTS (if any) is spoken
+ *
+ * <p> <b>Notes: </b>If omitted, default is true</p>
+ */
+ public void setPlayTone(Boolean playTone) {
+ setParameters(KEY_PLAY_TONE, playTone);
+ }
+
+ /**
+ * Gets the SoftButton List object
+ *
+ * @return List<SoftButton> -a List<SoftButton> representing the List
+ * object
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons() {
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+
+ /**
+ * Sets the SoftButtons
+ *
+ * @param softButtons
+ * a List<SoftButton> value
+ * <p>
+ * <b>Notes: </b></p>
+ * <ul>
+ * <li>If omitted on supported displays, the alert will not have
+ * any SoftButton</li>
+ * <li>ArrayMin: 0</li>
+ * <li>ArrayMax: 4</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+
+ public void setSoftButtons(List<SoftButton> softButtons) {
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+ public Boolean getProgressIndicator() {
+ return getBoolean(KEY_PROGRESS_INDICATOR);
+ }
+ public void setProgressIndicator(Boolean progressIndicator) {
+ setParameters(KEY_PROGRESS_INDICATOR, progressIndicator);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuver.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuver.java
new file mode 100644
index 000000000..4fd218fa8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuver.java
@@ -0,0 +1,96 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * <p>This will bring up an alert with information related to the next navigation maneuver including potential voice
+ * navigation instructions. Shown information will be taken from the ShowConstantTBT function
+ * </p>
+ * <p>Function Group: Navigation</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ *
+ * @since SmartDeviceLink 2.0
+ * @see ShowConstantTbt
+ */
+public class AlertManeuver extends RPCRequest{
+
+ public static final String KEY_TTS_CHUNKS = "ttsChunks";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+
+ /**
+ * Constructs a new AlertManeuver object
+ */
+ public AlertManeuver(){
+ super(FunctionID.ALERT_MANEUVER.toString());
+ }
+
+ /**
+ *
+ * <p>Constructs a new AlertManeuver object indicated by the Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public AlertManeuver(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Gets the SoftButton List object
+ *
+ * @return List<SoftButton> -a List<SoftButton> representing the List object
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons(){
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+
+ /**
+ * Sets the SoftButtons
+ *
+ * @param softButtons
+ * a List<SoftButton> value
+ * <p>
+ * <b>Notes: </b></p>
+ * <ul>
+ * <li>If omitted on supported displays, the alert will not have any SoftButton</li>
+ * <li>ArrayMin: 0</li>
+ * <li>ArrayMax: 4</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+
+ public void setSoftButtons(List<SoftButton> softButtons){
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+
+ /**
+ * Gets TTSChunk[], the Array of type TTSChunk which, taken together, specify what is to be spoken to the user
+ *
+ * @return List -a List<TTSChunk> value specify what is to be spoken to the user
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTtsChunks(){
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TTS_CHUNKS);
+ }
+
+ /**
+ * Sets array of type TTSChunk which, taken together, specify what is to be spoken to the user
+ *
+ * @param ttsChunks
+ * <p>
+ * <b>Notes: </b></p>Array must have a least one element
+ */
+ public void setTtsChunks(List<TTSChunk> ttsChunks){
+ setParameters(KEY_TTS_CHUNKS, ttsChunks);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuverResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuverResponse.java
new file mode 100644
index 000000000..f1a71bd66
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertManeuverResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Alert Maneuver Response is sent, when AlertManeuver has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class AlertManeuverResponse extends RPCResponse{
+
+ /**
+ * Constructs a new AlertManeuverResponse object
+ */
+ public AlertManeuverResponse() {
+ super(FunctionID.ALERT_MANEUVER.toString());
+ }
+
+ /**
+ * <p>
+ * Constructs a new AlertManeuverResponse object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public AlertManeuverResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AlertManeuverResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public AlertManeuverResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertResponse.java
new file mode 100644
index 000000000..c95be6e37
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AlertResponse.java
@@ -0,0 +1,53 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * Alert Response is sent, when Alert has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class AlertResponse extends RPCResponse {
+ public static final String KEY_TRY_AGAIN_TIME = "tryAgainTime";
+
+ /**
+ * Constructs a new AlertResponse object
+ */
+ public AlertResponse() {
+ super(FunctionID.ALERT.toString());
+ }
+
+ /**
+ * <p>Constructs a new AlertResponse object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public AlertResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new AlertResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public AlertResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ public Integer getTryAgainTime() {
+ return getInteger(KEY_TRY_AGAIN_TIME);
+ }
+ public void setTryAgainTime(Integer tryAgainTime) {
+ setParameters(KEY_TRY_AGAIN_TIME, tryAgainTime);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceCapability.java
new file mode 100644
index 000000000..07be9f023
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceCapability.java
@@ -0,0 +1,69 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason;
+
+import java.util.Hashtable;
+
+public class AppServiceCapability extends RPCStruct {
+
+ public static final String KEY_UPDATE_REASON = "updateReason";
+ public static final String KEY_UPDATED_APP_SERVICE_RECORD = "updatedAppServiceRecord";
+
+ // Constructors
+
+ public AppServiceCapability(){}
+
+ /**
+ * @param hash of parameters
+ */
+ public AppServiceCapability(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+
+ /**
+ * @param updatedAppServiceRecord -
+ */
+ public AppServiceCapability(@NonNull AppServiceRecord updatedAppServiceRecord){
+ this();
+ setUpdatedAppServiceRecord(updatedAppServiceRecord);
+ }
+
+ // Setters and Getters
+
+ /**
+ * Only included in OnSystemCapabilityUpdated. Update reason for this service record.
+ * @param updateReason -
+ */
+ public void setUpdateReason(ServiceUpdateReason updateReason){
+ setValue(KEY_UPDATE_REASON, updateReason);
+ }
+
+ /**
+ * Only included in OnSystemCapabilityUpdated. Update reason for this service record.
+ * @return updateReason - The updateReason
+ */
+ public ServiceUpdateReason getUpdateReason(){
+ return (ServiceUpdateReason) getObject(ServiceUpdateReason.class, KEY_UPDATE_REASON);
+ }
+
+ /**
+ * Only included in OnSystemCapabilityUpdated. Update reason for this service record.
+ * @param updatedAppServiceRecord -
+ */
+ public void setUpdatedAppServiceRecord(AppServiceRecord updatedAppServiceRecord){
+ setValue(KEY_UPDATED_APP_SERVICE_RECORD, updatedAppServiceRecord);
+ }
+
+ /**
+ * Only included in OnSystemCapabilityUpdated. Update reason for this service record.
+ * @return updateReason - The updateReason
+ */
+ public AppServiceRecord getUpdatedAppServiceRecord(){
+ return (AppServiceRecord) getObject(AppServiceRecord.class, KEY_UPDATED_APP_SERVICE_RECORD);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceData.java
new file mode 100644
index 000000000..ba0966580
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceData.java
@@ -0,0 +1,108 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Contains all the current data of the app service. The serviceType will link to which of the
+ * service data objects are included in this object. (eg if service type equals MEDIA, the
+ * mediaServiceData param should be included.
+ */
+public class AppServiceData extends RPCStruct {
+
+ public static final String KEY_SERVICE_TYPE = "serviceType";
+ public static final String KEY_SERVICE_ID = "serviceID";
+ public static final String KEY_MEDIA_SERVICE_DATA = "mediaServiceData";
+ public static final String KEY_WEATHER_SERVICE_DATA = "weatherServiceData";
+ public static final String KEY_NAVIGATION_SERVICE_DATA = "navigationServiceData";
+
+
+ // Constructors
+ public AppServiceData() { }
+
+ public AppServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public AppServiceData(@NonNull String serviceType, @NonNull String serviceId) {
+ this();
+ setServiceType(serviceType);
+ setServiceId(serviceId);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param serviceType -
+ */
+ public void setServiceType(@NonNull String serviceType) {
+ setValue(KEY_SERVICE_TYPE, serviceType);
+ }
+
+ /**
+ * @return serviceType -
+ */
+ public String getServiceType() {
+ return getString(KEY_SERVICE_TYPE);
+ }
+
+ /**
+ * @param serviceId -
+ */
+ public void setServiceId(@NonNull String serviceId) {
+ setValue(KEY_SERVICE_ID, serviceId);
+ }
+
+ /**
+ * @return serviceId -
+ */
+ public String getServiceId() {
+ return getString(KEY_SERVICE_ID);
+ }
+
+ /**
+ * @param mediaServiceData -
+ */
+ public void setMediaServiceData(MediaServiceData mediaServiceData) {
+ setValue(KEY_MEDIA_SERVICE_DATA, mediaServiceData);
+ }
+
+ /**
+ * @return mediaServiceData -
+ */
+ public MediaServiceData getMediaServiceData() {
+ return (MediaServiceData) getObject(MediaServiceData.class,KEY_MEDIA_SERVICE_DATA);
+ }
+
+ /**
+ * @param weatherServiceData -
+ */
+ public void setWeatherServiceData(WeatherServiceData weatherServiceData) {
+ setValue(KEY_WEATHER_SERVICE_DATA, weatherServiceData);
+ }
+
+ /**
+ * @return weatherServiceData -
+ */
+ public WeatherServiceData getWeatherServiceData() {
+ return (WeatherServiceData) getObject(WeatherServiceData.class,KEY_WEATHER_SERVICE_DATA);
+ }
+
+ /**
+ * @param navigationServiceData -
+ */
+ public void setNavigationServiceData(NavigationServiceData navigationServiceData) {
+ setValue(KEY_NAVIGATION_SERVICE_DATA, navigationServiceData);
+ }
+
+ /**
+ * @return navigationServiceData -
+ */
+ public NavigationServiceData getNavigationServiceData() {
+ return (NavigationServiceData) getObject(NavigationServiceData.class, KEY_NAVIGATION_SERVICE_DATA);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceManifest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceManifest.java
new file mode 100644
index 000000000..d5cee2365
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceManifest.java
@@ -0,0 +1,189 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * This manifest contains all the information necessary for the service to be
+ * published, activated, and allow consumers to interact with it
+ */
+public class AppServiceManifest extends RPCStruct {
+
+ public static final String KEY_SERVICE_NAME = "serviceName";
+ public static final String KEY_SERVICE_TYPE = "serviceType";
+ public static final String KEY_SERVICE_ICON = "serviceIcon";
+ public static final String KEY_ALLOW_APP_CONSUMERS = "allowAppConsumers";
+ public static final String KEY_RPC_SPEC_VERSION = "rpcSpecVersion";
+ public static final String KEY_HANDLED_RPCS = "handledRPCs";
+ public static final String KEY_MEDIA_SERVICE_MANIFEST = "mediaServiceManifest";
+ public static final String KEY_WEATHER_SERVICE_MANIFEST = "weatherServiceManifest";
+ public static final String KEY_NAVIGATION_SERVICE_MANIFEST = "navigationServiceManifest";
+
+ // Constructors
+ public AppServiceManifest() { }
+
+ public AppServiceManifest(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public AppServiceManifest(@NonNull String serviceType) {
+ this();
+ setServiceType(serviceType);
+ }
+
+ // Setters and Getters
+ /**
+ * Unique name of this service
+ * @param serviceName - the service name
+ */
+ public void setServiceName(String serviceName){
+ setValue(KEY_SERVICE_NAME, serviceName);
+ }
+
+ /**
+ * Unique name of this service
+ * @return ServiceName
+ */
+ public String getServiceName(){
+ return getString(KEY_SERVICE_NAME);
+ }
+
+ /**
+ * The type of service that is to be offered by this app
+ * @param serviceType - the serviceType
+ */
+ public void setServiceType(@NonNull String serviceType){
+ setValue(KEY_SERVICE_TYPE, serviceType);
+ }
+
+ /**
+ * The type of service that is to be offered by this app
+ * @return the AppServiceType
+ */
+ public String getServiceType(){
+ return getString(KEY_SERVICE_TYPE);
+ }
+
+ /**
+ * The icon to be associated with this service Most likely the same as the appIcon.
+ * @param serviceIcon - The Service Icon Image
+ */
+ public void setServiceIcon(Image serviceIcon){
+ setValue(KEY_SERVICE_ICON, serviceIcon);
+ }
+
+ /**
+ * The icon to be associated with this service Most likely the same as the appIcon.
+ * @return serviceIcon Image
+ */
+ public Image getServiceIcon(){
+ return (Image) getObject(Image.class, KEY_SERVICE_ICON);
+ }
+
+ /**
+ * If true, app service consumers beyond the IVI system will be able to access this service. If false,
+ * only the IVI system will be able consume the service. If not provided, it is assumed to be false.
+ * @param allowAppConsumers - boolean
+ */
+ public void setAllowAppConsumers(Boolean allowAppConsumers){
+ setValue(KEY_ALLOW_APP_CONSUMERS, allowAppConsumers);
+ }
+
+ /**
+ * If true, app service consumers beyond the IVI system will be able to access this service. If false,
+ * only the IVI system will be able consume the service. If not provided, it is assumed to be false.
+ * @return allowAppConsumers - boolean
+ */
+ public Boolean getAllowAppConsumers(){
+ return getBoolean(KEY_ALLOW_APP_CONSUMERS);
+ }
+
+ /**
+ * This is the max RPC Spec version the app service understands. This is important during the RPC pass through functionality.
+ * If not included, it is assumed the max version of the module is acceptable.
+ * @param rpcSpecVersion - The rpcSpecVersion
+ */
+ public void setRpcSpecVersion(SdlMsgVersion rpcSpecVersion){
+ setValue(KEY_RPC_SPEC_VERSION, rpcSpecVersion);
+ }
+
+ /**
+ * This is the max RPC Spec version the app service understands. This is important during the RPC pass through functionality.
+ * If not included, it is assumed the max version of the module is acceptable.
+ * @return rpcSpecVersion - The rpcSpecVersion
+ */
+ public SdlMsgVersion getRpcSpecVersion(){
+ return (SdlMsgVersion) getObject(SdlMsgVersion.class,KEY_RPC_SPEC_VERSION);
+ }
+
+ /**
+ * This field contains the Function IDs for the RPCs that this service intends to handle correctly.
+ * This means the service will provide meaningful responses.
+ * @param handledRPCs - The List of Handled RPCs
+ */
+ public void setHandledRpcs(List<Integer> handledRPCs){
+ setValue(KEY_HANDLED_RPCS, handledRPCs);
+ }
+
+ /**
+ * This field contains the Function IDs for the RPCs that this service intends to handle correctly.
+ * This means the service will provide meaningful responses.
+ * @return handledRPCs - The List of Handled RPCs
+ */
+ @SuppressWarnings("unchecked")
+ public List<Integer> getHandledRpcs(){
+ return (List<Integer>) getObject(Integer.class,KEY_HANDLED_RPCS);
+ }
+
+ /**
+ * The MediaServiceManifest
+ * @param mediaServiceManifest - The mediaServiceManifest
+ */
+ public void setMediaServiceManifest(MediaServiceManifest mediaServiceManifest){
+ setValue(KEY_MEDIA_SERVICE_MANIFEST, mediaServiceManifest);
+ }
+
+ /**
+ * The MediaServiceManifest
+ * @return mediaServiceManifest - The mediaServiceManifest
+ */
+ public MediaServiceManifest getMediaServiceManifest(){
+ return (MediaServiceManifest) getObject(MediaServiceManifest.class,KEY_MEDIA_SERVICE_MANIFEST);
+ }
+
+ /**
+ * The WeatherServiceManifest
+ * @param weatherServiceManifest - The weatherServiceManifest
+ */
+ public void setWeatherServiceManifest(WeatherServiceManifest weatherServiceManifest){
+ setValue(KEY_WEATHER_SERVICE_MANIFEST, weatherServiceManifest);
+ }
+
+ /**
+ * The WeatherServiceManifest
+ * @return weatherServiceManifest - The weatherServiceManifest
+ */
+ public WeatherServiceManifest getWeatherServiceManifest(){
+ return (WeatherServiceManifest) getObject(WeatherServiceManifest.class,KEY_WEATHER_SERVICE_MANIFEST);
+ }
+
+ /**
+ * The NavigationServiceManifest
+ * @param navigationServiceManifest - The navigationServiceManifest
+ */
+ public void setNavigationServiceManifest(NavigationServiceManifest navigationServiceManifest){
+ setValue(KEY_NAVIGATION_SERVICE_MANIFEST, navigationServiceManifest);
+ }
+
+ /**
+ * The NavigationServiceManifest
+ * @return navigationServiceManifest - The navigationServiceManifest
+ */
+ public NavigationServiceManifest getNavigationServiceManifest(){
+ return (NavigationServiceManifest) getObject(NavigationServiceManifest.class,KEY_NAVIGATION_SERVICE_MANIFEST);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceRecord.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceRecord.java
new file mode 100644
index 000000000..6d2d74d6d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServiceRecord.java
@@ -0,0 +1,108 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * This manifest contains all the information necessary for the
+ * service to be published, activated, and consumers able to interact with it
+ */
+public class AppServiceRecord extends RPCStruct {
+
+ public static final String KEY_SERVICE_ID = "serviceID";
+ public static final String KEY_SERVICE_MANIFEST = "serviceManifest";
+ public static final String KEY_SERVICE_PUBLISHED = "servicePublished";
+ public static final String KEY_SERVICE_ACTIVE = "serviceActive";
+
+
+ // Constructors
+ public AppServiceRecord() { }
+
+ public AppServiceRecord(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public AppServiceRecord(@NonNull String serviceId, @NonNull AppServiceManifest serviceManifest,
+ @NonNull Boolean servicePublished, @NonNull Boolean serviceActive) {
+ this();
+ setServiceId(serviceId);
+ setServiceManifest(serviceManifest);
+ setServicePublished(servicePublished);
+ setServiceActive(serviceActive);
+ }
+
+ // Setters and Getters
+ /**
+ * ID of this service
+ * @param serviceId - the service ID
+ */
+ public void setServiceId(@NonNull String serviceId){
+ setValue(KEY_SERVICE_ID, serviceId);
+ }
+
+ /**
+ * ID of this service
+ * @return serviceId
+ */
+ public String getServiceId(){
+ return getString(KEY_SERVICE_ID);
+ }
+
+ /**
+ * the App Service Manifest
+ * @param serviceManifest - the App Service Manifest
+ */
+ public void setServiceManifest(@NonNull AppServiceManifest serviceManifest){
+ setValue(KEY_SERVICE_MANIFEST, serviceManifest);
+ }
+
+ /**
+ * the App Service Manifest
+ * @return serviceManifest - the App Service Manifest
+ */
+ public AppServiceManifest getServiceManifest(){
+ return (AppServiceManifest) getObject(AppServiceManifest.class,KEY_SERVICE_MANIFEST);
+ }
+
+ /**
+ * If true, the service is published and available. If false, the service has likely just been
+ * unpublished, and should be considered unavailable.
+ * @param servicePublished - boolean
+ */
+ public void setServicePublished(@NonNull Boolean servicePublished){
+ setValue(KEY_SERVICE_PUBLISHED, servicePublished);
+ }
+
+ /**
+ * If true, the service is published and available. If false, the service has likely just been
+ * unpublished, and should be considered unavailable.
+ * @return servicePublished - boolean
+ */
+ public Boolean getServicePublished(){
+ return getBoolean(KEY_SERVICE_PUBLISHED);
+ }
+
+ /**
+ * If true, the service is the active primary service of the supplied service type. It will receive
+ * all potential RPCs that are passed through to that service type. If false, it is not the primary
+ * service of the supplied type. See servicePublished for its availability.
+ * @param serviceActive - boolean
+ */
+ public void setServiceActive(@NonNull Boolean serviceActive){
+ setValue(KEY_SERVICE_ACTIVE, serviceActive);
+ }
+
+ /**
+ * If true, the service is the active primary service of the supplied service type. It will receive
+ * all potential RPCs that are passed through to that service type. If false, it is not the primary
+ * service of the supplied type. See servicePublished for its availability.
+ * @return serviceActive - boolean
+ */
+ public Boolean getServiceActive(){
+ return getBoolean(KEY_SERVICE_ACTIVE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java
new file mode 100644
index 000000000..ab09b1f5b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java
@@ -0,0 +1,54 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Capabilities of app services including what service types are supported
+ * and the current state of services.
+ */
+public class AppServicesCapabilities extends RPCStruct {
+
+ public static final String KEY_APP_SERVICES = "appServices";
+
+ // Constructors
+
+ /**
+ * Capabilities of app services including what service types are supported
+ * and the current state of services.
+ */
+ public AppServicesCapabilities(){}
+
+ /**
+ * Capabilities of app services including what service types are supported
+ * and the current state of services.
+ * @param hash of parameters
+ */
+ public AppServicesCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ // Setters and Getters
+
+ /**
+ * An array of currently available services. If this is an update to the
+ * capability the affected services will include an update reason in that item
+ * @param appServices -
+ */
+ public void setAppServices(List<AppServiceCapability> appServices){
+ setValue(KEY_APP_SERVICES, appServices);
+ }
+
+ /**
+ * An array of currently available services. If this is an update to the
+ * capability the affected services will include an update reason in that item
+ * @return appServices
+ */
+ @SuppressWarnings("unchecked")
+ public List<AppServiceCapability> getAppServices(){
+ return (List<AppServiceCapability>) getObject(AppServiceCapability.class,KEY_APP_SERVICES);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlCapabilities.java
new file mode 100644
index 000000000..fcaa7bf4c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlCapabilities.java
@@ -0,0 +1,150 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class AudioControlCapabilities extends RPCStruct {
+ public static final String KEY_MODULE_NAME = "moduleName";
+ public static final String KEY_SOURCE_AVAILABLE = "sourceAvailable";
+ public static final String KEY_KEEP_CONTEXT_AVAILABLE = "keepContextAvailable";
+ public static final String KEY_VOLUME_AVAILABLE = "volumeAvailable";
+ public static final String KEY_EQUALIZER_AVAILABLE = "equalizerAvailable";
+ public static final String KEY_EQUALIZER_MAX_CHANNEL_ID = "equalizerMaxChannelId";
+
+ /**
+ * Constructs a newly allocated AudioControlCapabilities object
+ */
+ public AudioControlCapabilities() {
+ }
+
+ /**
+ * Constructs a newly allocated AudioControlCapabilities object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public AudioControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated AudioControlCapabilities object
+ *
+ * @param moduleName short friendly name of the light control module.
+ */
+ public AudioControlCapabilities(@NonNull String moduleName) {
+ this();
+ setModuleName(moduleName);
+ }
+
+ /**
+ * Sets the moduleName portion of the AudioControlCapabilities class
+ *
+ * @param moduleName The short friendly name of the light control module. It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Gets the moduleName portion of the AudioControlCapabilities class
+ *
+ * @return String - The short friendly name of the light control module. It should not be used to identify a module by mobile application.
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Sets the keepContextAvailable portion of the AudioControlCapabilities class
+ *
+ * @param keepContextAvailable Availability of the keepContext parameter.
+ */
+ public void setKeepContextAvailable(Boolean keepContextAvailable) {
+ setValue(KEY_KEEP_CONTEXT_AVAILABLE, keepContextAvailable);
+ }
+
+ /**
+ * Gets the keepContextAvailable portion of the AudioControlCapabilities class
+ *
+ * @return Boolean - Availability of the keepContext parameter.
+ */
+ public Boolean getKeepContextAvailable() {
+ return getBoolean(KEY_KEEP_CONTEXT_AVAILABLE);
+ }
+
+ /**
+ * Sets the sourceAvailable portion of the AudioControlCapabilities class
+ *
+ * @param sourceAvailable Availability of the control of audio source.
+ */
+ public void setSourceAvailable(Boolean sourceAvailable) {
+ setValue(KEY_SOURCE_AVAILABLE, sourceAvailable);
+ }
+
+ /**
+ * Gets the sourceAvailable portion of the AudioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of audio source.
+ */
+ public Boolean getSourceAvailable() {
+ return getBoolean(KEY_SOURCE_AVAILABLE);
+ }
+
+ /**
+ * Sets the volumeAvailable portion of the AudioControlCapabilities class
+ *
+ * @param volumeAvailable Availability of the control of audio volume.
+ */
+ public void setVolumeAvailable(Boolean volumeAvailable) {
+ setValue(KEY_VOLUME_AVAILABLE, volumeAvailable);
+ }
+
+ /**
+ * Gets the volumeAvailable portion of the AudioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of audio volume.
+ */
+ public Boolean getVolumeAvailable() {
+ return getBoolean(KEY_VOLUME_AVAILABLE);
+ }
+
+ /**
+ * Sets the equalizerAvailable portion of the AudioControlCapabilities class
+ *
+ * @param equalizerAvailable Availability of the control of Equalizer Settings.
+ */
+ public void setEqualizerAvailable(Boolean equalizerAvailable) {
+ setValue(KEY_EQUALIZER_AVAILABLE, equalizerAvailable);
+ }
+
+ /**
+ * Gets the equalizerAvailable portion of the AudioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of Equalizer Settings.
+ */
+ public Boolean getEqualizerAvailable() {
+ return getBoolean(KEY_EQUALIZER_AVAILABLE);
+ }
+
+ /**
+ * Sets the equalizerMaxChannelId portion of the AudioControlCapabilities class
+ *
+ * @param equalizerMaxChannelId Must be included if equalizerAvailable=true, and assume all IDs starting from 1 to this value are valid.
+ */
+ public void setEqualizerMaxChannelId(Integer equalizerMaxChannelId) {
+ setValue(KEY_EQUALIZER_MAX_CHANNEL_ID, equalizerMaxChannelId);
+ }
+
+ /**
+ * Gets the equalizerMaxChannelId portion of the AudioControlCapabilities class
+ *
+ * @return Integer - Must be included if equalizerAvailable=true, and assume all IDs starting from 1 to this value are valid.
+ */
+ public Integer getEqualizerMaxChannelId() {
+ return getInteger(KEY_EQUALIZER_MAX_CHANNEL_ID);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlData.java
new file mode 100644
index 000000000..b6ec0bfb1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioControlData.java
@@ -0,0 +1,115 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.PrimaryAudioSource;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class AudioControlData extends RPCStruct {
+ public static final String KEY_SOURCE = "source";
+ public static final String KEY_KEEP_CONTEXT = "keepContext";
+ public static final String KEY_VOLUME = "volume";
+ public static final String KEY_EQUALIZER_SETTINGS = "equalizerSettings";
+
+ /**
+ * Constructs a newly allocated AudioControlData object
+ */
+ public AudioControlData() {
+ }
+
+ /**
+ * Constructs a newly allocated AudioControlData object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public AudioControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the source portion of the AudioControlData class
+ *
+ * @param source 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.
+ */
+ public void setSource(PrimaryAudioSource source) {
+ setValue(KEY_SOURCE, source);
+ }
+
+ /**
+ * Gets the source portion of the AudioControlData class
+ *
+ * @return PrimaryAudioSource - 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.
+ */
+ public PrimaryAudioSource getSource() {
+ return (PrimaryAudioSource) getObject(PrimaryAudioSource.class, KEY_SOURCE);
+ }
+
+ /**
+ * Sets the keepContext portion of the AudioControlData class
+ *
+ * @param keepContext 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 not included.
+ * If it is false, the system not only changes the audio source but also brings the default application or
+ * system UI associated with the audio source to foreground.
+ * If it is true, the system only changes the audio source, but keeps the current application in foreground.
+ */
+ public void setKeepContext(Boolean keepContext) {
+ setValue(KEY_KEEP_CONTEXT, keepContext);
+ }
+
+ /**
+ * Gets the keepContext portion of the AudioControlData class
+ *
+ * @return Boolean - 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 not included.
+ * If it is false, the system not only changes the audio source but also brings the default application or
+ * system UI associated with the audio source to foreground.
+ * If it is true, the system only changes the audio source, but keeps the current application in foreground.
+ */
+ public Boolean getKeepContext() {
+ return getBoolean(KEY_KEEP_CONTEXT);
+ }
+
+ /**
+ * Sets the volume portion of the AudioControlData class
+ *
+ * @param volume Reflects the volume of audio, from 0%-100%.
+ */
+ public void setVolume(Integer volume) {
+ setValue(KEY_VOLUME, volume);
+ }
+
+ /**
+ * Gets the volume portion of the AudioControlData class
+ *
+ * @return Integer - Reflects the volume of audio, from 0%-100%.
+ */
+ public Integer getVolume() {
+ return getInteger(KEY_VOLUME);
+ }
+
+ /**
+ * Gets the equalizerSettings portion of the AudioControlData class
+ *
+ * @return List<EqualizerSettings> - Defines the list of supported channels (band) and their current/desired settings on HMI.
+ */
+ @SuppressWarnings("unchecked")
+ public List<EqualizerSettings> getEqualizerSettings() {
+ return (List<EqualizerSettings>) getObject(EqualizerSettings.class, KEY_EQUALIZER_SETTINGS);
+ }
+
+ /**
+ * Sets the equalizerSettings portion of the AudioControlData class
+ *
+ * @param equalizerSettings Defines the list of supported channels (band) and their current/desired settings on HMI.
+ */
+ public void setEqualizerSettings(List<EqualizerSettings> equalizerSettings) {
+ setValue(KEY_EQUALIZER_SETTINGS, equalizerSettings);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioPassThruCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioPassThruCapabilities.java
new file mode 100644
index 000000000..675ddbbfc
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AudioPassThruCapabilities.java
@@ -0,0 +1,127 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.AudioType;
+import com.smartdevicelink.proxy.rpc.enums.BitsPerSample;
+import com.smartdevicelink.proxy.rpc.enums.SamplingRate;
+
+import java.util.Hashtable;
+
+/**
+ *<p> Describes different audio type configurations for PerformAudioPassThru, e.g. {8kHz,8-bit,PCM}
+ * Specifies the capabilities of audio capturing: sampling rate, bits per sample, audio type.</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>samplingRate</td>
+ * <td>SamplingRate</td>
+ * <td>Describes the sampling rate for AudioPassThru
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>bitsPerSample</td>
+ * <td>BitsPerSample</td>
+ * <td>Describes the sample depth in bit for AudioPassThru
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>audioType</td>
+ * <td>AudioType</td>
+ * <td>Describes the audiotype for AudioPassThru
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @see ButtonName
+ * @see GetCapabilities
+ * @since SmartDeviceLink 2.0
+ */
+public class AudioPassThruCapabilities extends RPCStruct {
+ public static final String KEY_SAMPLING_RATE = "samplingRate";
+ public static final String KEY_AUDIO_TYPE = "audioType";
+ public static final String KEY_BITS_PER_SAMPLE = "bitsPerSample";
+
+ /**
+ * Constructs a newly allocated AudioPassThruCapabilities object
+ */
+ public AudioPassThruCapabilities() {}
+
+ /**
+ * Constructs a newly allocated AudioPassThruCapabilities object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public AudioPassThruCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated AudioPassThruCapabilities object
+ * @param samplingRate the sampling rate for AudioPassThru
+ * @param bitsPerSample the sample depth in bit for AudioPassThru
+ * @param audioType the audiotype for AudioPassThru
+ */
+ public AudioPassThruCapabilities(@NonNull SamplingRate samplingRate, @NonNull BitsPerSample bitsPerSample, @NonNull AudioType audioType) {
+ this();
+ setSamplingRate(samplingRate);
+ setBitsPerSample(bitsPerSample);
+ setAudioType(audioType);
+ }
+
+ /**
+ * set the sampling rate for AudioPassThru
+ * @param samplingRate the sampling rate for AudioPassThru
+ */
+ public void setSamplingRate(@NonNull SamplingRate samplingRate) {
+ setValue(KEY_SAMPLING_RATE, samplingRate);
+ }
+
+ /**
+ * get the sampling rate for AudioPassThru
+ * @return the sampling rate for AudioPassThru
+ */
+ public SamplingRate getSamplingRate() {
+ return (SamplingRate) getObject(SamplingRate.class, KEY_SAMPLING_RATE);
+ }
+
+ /**
+ * set the sample depth in bit for AudioPassThru
+ * @param bitsPerSample the sample depth in bit for AudioPassThru
+ */
+ public void setBitsPerSample(@NonNull BitsPerSample bitsPerSample) {
+ setValue(KEY_BITS_PER_SAMPLE, bitsPerSample);
+ }
+
+ /**
+ * get the sample depth in bit for AudioPassThru
+ * @return the sample depth in bit for AudioPassThru
+ */
+ public BitsPerSample getBitsPerSample() {
+ return (BitsPerSample) getObject(BitsPerSample.class, KEY_BITS_PER_SAMPLE);
+ }
+
+ /**
+ * set the audiotype for AudioPassThru
+ * @param audioType the audiotype for AudioPassThru
+ */
+ public void setAudioType(@NonNull AudioType audioType) {
+ setValue(KEY_AUDIO_TYPE, audioType);
+ }
+
+ /**
+ * get the audiotype for AudioPassThru
+ * @return the audiotype for AudioPassThru
+ */
+ public AudioType getAudioType() {
+ return (AudioType) getObject(AudioType.class, KEY_AUDIO_TYPE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/BeltStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/BeltStatus.java
new file mode 100644
index 000000000..65a7e674e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/BeltStatus.java
@@ -0,0 +1,263 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+
+import java.util.Hashtable;
+
+/** The status of the seat belts.
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>driverBeltDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The driver seat belt is deployed.</td>
+ * </tr>
+ * <tr>
+ * <td>passengerBeltDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The passenger seat belt is deployed.</td>
+ * </tr>
+ * <tr>
+ * <td>passengerBuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The passenger seat belt is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>driverBuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The driver seat belt is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>leftRow2BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The left seat belt of the 2nd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>passengerChildDetected</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The child passenger is detected.</td>
+ * </tr>
+ * <tr>
+ * <td>rightRow2BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The right seat belt of the 2nd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>middleRow2BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The middle seat belt of the 2nd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>middleRow3BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The middle seat belt of the 3rd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>leftRow3BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The left seat belt of the 3rd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>rightRow3BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The right seat belt of the 3rd row is buckled.</td>
+ * </tr>
+ * <tr>
+ * <td>leftRearInflatableBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The left rear inflatable is belted.</td>
+ * </tr>
+ * <tr>
+ * <td>rightRearInflatableBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The right rear inflatable is belted.</td>
+ * </tr>
+ * <tr>
+ * <td>middleRow1BeltDeployed</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The seat belt of the middle row is deployed.</td>
+ * </tr>
+ * <tr>
+ * <td>middleRow1BuckleBelted</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td>false</td>
+ * <td>The seat belt of the middle row is buckled.</td>
+ * </tr>
+ * </table>
+* @since SmartDeviceLink 2.0
+* @see VehicleDataEventStatus
+* @see GetVehicleData
+* @see OnVehicleData
+ * @see SubscribeVehicleData
+ */
+
+public class BeltStatus extends RPCStruct {
+ public static final String KEY_DRIVER_BELT_DEPLOYED = "driverBeltDeployed";
+ public static final String KEY_PASSENGER_BELT_DEPLOYED = "passengerBeltDeployed";
+ public static final String KEY_PASSENGER_BUCKLE_BELTED = "passengerBuckleBelted";
+ public static final String KEY_DRIVER_BUCKLE_BELTED = "driverBuckleBelted";
+ public static final String KEY_LEFT_ROW_2_BUCKLE_BELTED = "leftRow2BuckleBelted";
+ public static final String KEY_PASSENGER_CHILD_DETECTED = "passengerChildDetected";
+ public static final String KEY_RIGHT_ROW_2_BUCKLE_BELTED = "rightRow2BuckleBelted";
+ public static final String KEY_MIDDLE_ROW_2_BUCKLE_BELTED = "middleRow2BuckleBelted";
+ public static final String KEY_MIDDLE_ROW_3_BUCKLE_BELTED = "middleRow3BuckleBelted";
+ public static final String KEY_LEFT_ROW_3_BUCKLE_BELTED = "leftRow3BuckleBelted";
+
+ public static final String KEY_RIGHT_ROW_3_BUCKLE_BELTED = "rightRow3BuckleBelted";
+ public static final String KEY_REAR_INFLATABLE_BELTED = "rearInflatableBelted";
+ public static final String KEY_RIGHT_REAR_INFLATABLE_BELTED = "rightRearInflatableBelted";
+ public static final String KEY_MIDDLE_ROW_1_BELT_DEPLOYED = "middleRow1BeltDeployed";
+ public static final String KEY_MIDDLE_ROW_1_BUCKLE_BELTED = "middleRow1BuckleBelted";
+ /** Constructs a new BeltStatus object indicated by the Hashtable
+ * parameter
+ * @param hash
+ * The hash table to use
+ *
+ *
+ */
+
+ public BeltStatus() { }
+ public BeltStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public BeltStatus(@NonNull VehicleDataEventStatus driverBeltDeployed, @NonNull VehicleDataEventStatus passengerBeltDeployed, @NonNull VehicleDataEventStatus passengerBuckleBelted,
+ @NonNull VehicleDataEventStatus driverBuckleBelted, @NonNull VehicleDataEventStatus leftRow2BuckleBelted, @NonNull VehicleDataEventStatus passengerChildDetected,
+ @NonNull VehicleDataEventStatus rightRow2BuckleBelted, @NonNull VehicleDataEventStatus middleRow2BuckleBelted, @NonNull VehicleDataEventStatus middleRow3BuckleBelted,
+ @NonNull VehicleDataEventStatus leftRow3BuckleBelted, @NonNull VehicleDataEventStatus rightRow3BuckleBelted, @NonNull VehicleDataEventStatus leftRearInflatableBelted,
+ @NonNull VehicleDataEventStatus rightRearInflatableBelted, @NonNull VehicleDataEventStatus middleRow1BeltDeployed, @NonNull VehicleDataEventStatus middleRow1BuckleBelted
+ ) {
+ this();
+ setDriverBeltDeployed(driverBeltDeployed);
+ setPassengerBeltDeployed(passengerBeltDeployed);
+ setPassengerBuckleBelted(passengerBuckleBelted);
+ setDriverBuckleBelted(driverBuckleBelted);
+ setLeftRow2BuckleBelted(leftRow2BuckleBelted);
+ setPassengerChildDetected(passengerChildDetected);
+ setRightRow2BuckleBelted(rightRow2BuckleBelted);
+ setMiddleRow2BuckleBelted(middleRow2BuckleBelted);
+ setMiddleRow3BuckleBelted(middleRow3BuckleBelted);
+ setLeftRow3BuckleBelted(leftRow3BuckleBelted);
+ setRightRow3BuckleBelted(rightRow3BuckleBelted);
+ setLeftRearInflatableBelted(leftRearInflatableBelted);
+ setRightRearInflatableBelted(rightRearInflatableBelted);
+ setMiddleRow1BeltDeployed(middleRow1BeltDeployed);
+ setMiddleRow1BuckleBelted(middleRow1BuckleBelted);
+ }
+
+ public void setDriverBeltDeployed(@NonNull VehicleDataEventStatus driverBeltDeployed) {
+ setValue(KEY_DRIVER_BELT_DEPLOYED, driverBeltDeployed);
+ }
+ public VehicleDataEventStatus getDriverBeltDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_BELT_DEPLOYED);
+ }
+ public void setPassengerBeltDeployed(@NonNull VehicleDataEventStatus passengerBeltDeployed) {
+ setValue(KEY_PASSENGER_BELT_DEPLOYED, passengerBeltDeployed);
+ }
+ public VehicleDataEventStatus getPassengerBeltDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_BELT_DEPLOYED);
+ }
+ public void setPassengerBuckleBelted(@NonNull VehicleDataEventStatus passengerBuckleBelted) {
+ setValue(KEY_PASSENGER_BUCKLE_BELTED, passengerBuckleBelted);
+ }
+ public VehicleDataEventStatus getPassengerBuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_BUCKLE_BELTED);
+ }
+ public void setDriverBuckleBelted(VehicleDataEventStatus driverBuckleBelted) {
+ setValue(KEY_DRIVER_BUCKLE_BELTED, driverBuckleBelted);
+ }
+ public VehicleDataEventStatus getDriverBuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_BUCKLE_BELTED);
+ }
+ public void setLeftRow2BuckleBelted(VehicleDataEventStatus leftRow2BuckleBelted) {
+ setValue(KEY_LEFT_ROW_2_BUCKLE_BELTED, leftRow2BuckleBelted);
+ }
+ public VehicleDataEventStatus getLeftRow2BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_LEFT_ROW_2_BUCKLE_BELTED);
+ }
+ public void setPassengerChildDetected(@NonNull VehicleDataEventStatus passengerChildDetected) {
+ setValue(KEY_PASSENGER_CHILD_DETECTED, passengerChildDetected);
+ }
+ public VehicleDataEventStatus getPassengerChildDetected() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_PASSENGER_CHILD_DETECTED);
+ }
+ public void setRightRow2BuckleBelted(@NonNull VehicleDataEventStatus rightRow2BuckleBelted) {
+ setValue(KEY_RIGHT_ROW_2_BUCKLE_BELTED, rightRow2BuckleBelted);
+ }
+ public VehicleDataEventStatus getRightRow2BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_RIGHT_ROW_2_BUCKLE_BELTED);
+ }
+ public void setMiddleRow2BuckleBelted(@NonNull VehicleDataEventStatus middleRow2BuckleBelted) {
+ setValue(KEY_MIDDLE_ROW_2_BUCKLE_BELTED, middleRow2BuckleBelted);
+ }
+ public VehicleDataEventStatus getMiddleRow2BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_MIDDLE_ROW_2_BUCKLE_BELTED);
+ }
+ public void setMiddleRow3BuckleBelted(@NonNull VehicleDataEventStatus middleRow3BuckleBelted) {
+ setValue(KEY_MIDDLE_ROW_3_BUCKLE_BELTED, middleRow3BuckleBelted);
+ }
+ public VehicleDataEventStatus getMiddleRow3BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_MIDDLE_ROW_3_BUCKLE_BELTED);
+ }
+ public void setLeftRow3BuckleBelted(@NonNull VehicleDataEventStatus leftRow3BuckleBelted) {
+ setValue(KEY_LEFT_ROW_3_BUCKLE_BELTED, leftRow3BuckleBelted);
+ }
+ public VehicleDataEventStatus getLeftRow3BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_LEFT_ROW_3_BUCKLE_BELTED);
+ }
+ public void setRightRow3BuckleBelted(@NonNull VehicleDataEventStatus rightRow3BuckleBelted) {
+ setValue(KEY_RIGHT_ROW_3_BUCKLE_BELTED, rightRow3BuckleBelted);
+ }
+ public VehicleDataEventStatus getRightRow3BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_RIGHT_ROW_3_BUCKLE_BELTED);
+ }
+ public void setLeftRearInflatableBelted(@NonNull VehicleDataEventStatus rearInflatableBelted) {
+ setValue(KEY_REAR_INFLATABLE_BELTED, rearInflatableBelted);
+ }
+ public VehicleDataEventStatus getLeftRearInflatableBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_REAR_INFLATABLE_BELTED);
+ }
+ public void setRightRearInflatableBelted(@NonNull VehicleDataEventStatus rightRearInflatableBelted) {
+ setValue(KEY_RIGHT_REAR_INFLATABLE_BELTED, rightRearInflatableBelted);
+ }
+ public VehicleDataEventStatus getRightRearInflatableBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_RIGHT_REAR_INFLATABLE_BELTED);
+ }
+ public void setMiddleRow1BeltDeployed(@NonNull VehicleDataEventStatus middleRow1BeltDeployed) {
+ setValue(KEY_MIDDLE_ROW_1_BELT_DEPLOYED, middleRow1BeltDeployed);
+ }
+ public VehicleDataEventStatus getMiddleRow1BeltDeployed() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_MIDDLE_ROW_1_BELT_DEPLOYED);
+ }
+ public void setMiddleRow1BuckleBelted(@NonNull VehicleDataEventStatus middleRow1BuckleBelted) {
+ setValue(KEY_MIDDLE_ROW_1_BUCKLE_BELTED, middleRow1BuckleBelted);
+ }
+ public VehicleDataEventStatus getMiddleRow1BuckleBelted() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_MIDDLE_ROW_1_BUCKLE_BELTED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/BodyInformation.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/BodyInformation.java
new file mode 100644
index 000000000..b2f4cd2f3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/BodyInformation.java
@@ -0,0 +1,163 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.IgnitionStableStatus;
+import com.smartdevicelink.proxy.rpc.enums.IgnitionStatus;
+
+import java.util.Hashtable;
+
+/** The body information including power modes.
+ *
+ * <p><b>Note:</b> The structure defines the information about the park brake and ignition.</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>parkBrakeActive</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>Describes, if the parkbreak is active. The information about the park brake: - true, if active - false if not.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>ignitionStableStatus</td>
+ * <td>IgnitionStableStatus</td>
+ * <td>true</td>
+ * <td>Describes, if the ignition situation is considered stableThe information about stability of the ignition switch. See {@linkplain IgnitionStableStatus}</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>ignitionStatus</td>
+ * <td>IgnitionStatus</td>
+ * <td>true</td>
+ * <td>The information about ignition status. See {@linkplain IgnitionStatus}</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>parkBrakeActive</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>The information about the park brake: - true, if active - false if not.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>driverDoorAjar</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>The information about the park brake: - true, if active - false if not.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>passengerDoorAjar</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>The information about the park brake: - true, if active - false if not.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>rearLeftDoorAjar</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>The information about the park brake: - true, if active - false if not.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>rearRightDoorAjar</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>References signal "DrStatRr_B_Actl".</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * </table>
+ * @since SmartDeviceLink 2.0
+ * @see SubscribeVehicleData
+ * @see GetVehicleData
+ * @see OnVehicleData
+ *
+ */
+
+public class BodyInformation extends RPCStruct {
+ public static final String KEY_PARK_BRAKE_ACTIVE = "parkBrakeActive";
+ public static final String KEY_IGNITION_STABLE_STATUS = "ignitionStableStatus";
+ public static final String KEY_IGNITION_STATUS = "ignitionStatus";
+ public static final String KEY_DRIVER_DOOR_AJAR = "driverDoorAjar";
+ public static final String KEY_PASSENGER_DOOR_AJAR = "passengerDoorAjar";
+ public static final String KEY_REAR_LEFT_DOOR_AJAR = "rearLeftDoorAjar";
+ public static final String KEY_REAR_RIGHT_DOOR_AJAR = "rearRightDoorAjar";
+ /** Constructs a new BodyInformation object indicated by the Hashtable
+ * parameter
+ * @param hash
+ * The hash table to use
+ *
+ *
+ */
+
+ public BodyInformation() { }
+ public BodyInformation(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public BodyInformation(@NonNull Boolean parkBrakeActive, @NonNull IgnitionStableStatus ignitionStableStatus, @NonNull IgnitionStatus ignitionStatus) {
+ this();
+ setParkBrakeActive(parkBrakeActive);
+ setIgnitionStableStatus(ignitionStableStatus);
+ setIgnitionStatus(ignitionStatus);
+ }
+ public void setParkBrakeActive(@NonNull Boolean parkBrakeActive) {
+ setValue(KEY_PARK_BRAKE_ACTIVE, parkBrakeActive);
+ }
+ public Boolean getParkBrakeActive() {
+ return getBoolean(KEY_PARK_BRAKE_ACTIVE);
+ }
+ public void setIgnitionStableStatus(@NonNull IgnitionStableStatus ignitionStableStatus) {
+ setValue(KEY_IGNITION_STABLE_STATUS, ignitionStableStatus);
+ }
+ public IgnitionStableStatus getIgnitionStableStatus() {
+ return (IgnitionStableStatus) getObject(IgnitionStableStatus.class, KEY_IGNITION_STABLE_STATUS);
+ }
+ public void setIgnitionStatus(@NonNull IgnitionStatus ignitionStatus) {
+ setValue(KEY_IGNITION_STATUS, ignitionStatus);
+ }
+ public IgnitionStatus getIgnitionStatus() {
+ return (IgnitionStatus) getObject(IgnitionStatus.class, KEY_IGNITION_STATUS);
+ }
+
+ public void setDriverDoorAjar(Boolean driverDoorAjar) {
+ setValue(KEY_DRIVER_DOOR_AJAR, driverDoorAjar);
+ }
+ public Boolean getDriverDoorAjar() {
+ return getBoolean(KEY_DRIVER_DOOR_AJAR);
+ }
+
+
+ public void setPassengerDoorAjar(Boolean passengerDoorAjar) {
+ setValue(KEY_PASSENGER_DOOR_AJAR, passengerDoorAjar);
+ }
+ public Boolean getPassengerDoorAjar() {
+ return getBoolean(KEY_PASSENGER_DOOR_AJAR);
+ }
+
+ public void setRearLeftDoorAjar(Boolean rearLeftDoorAjar) {
+ setValue(KEY_REAR_LEFT_DOOR_AJAR, rearLeftDoorAjar);
+ }
+ public Boolean getRearLeftDoorAjar() {
+ return getBoolean(KEY_REAR_LEFT_DOOR_AJAR);
+ }
+
+ public void setRearRightDoorAjar(Boolean rearRightDoorAjar) {
+ setValue(KEY_REAR_RIGHT_DOOR_AJAR, rearRightDoorAjar);
+ }
+ public Boolean getRearRightDoorAjar() {
+ return getBoolean(KEY_REAR_RIGHT_DOOR_AJAR);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonCapabilities.java
new file mode 100644
index 000000000..b79685d12
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonCapabilities.java
@@ -0,0 +1,150 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+
+/**
+ * Provides information about the capabilities of a SDL HMI button.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>name</td>
+ * <td>ButtonName</td>
+ * <td>The name of theSDL HMI button.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>shortPressAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports a SHORT press. See {@linkplain ButtonPressMode} for more information.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>longPressAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports a LONG press. See {@linkplain ButtonPressMode} for more information.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>upDownAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports "button down" and "button up". When the button is depressed, the <i>{@linkplain OnButtonEvent}</i> notification will be invoked with a value of BUTTONDOWN.
+ * <p> When the button is released, the <i>{@linkplain OnButtonEvent}</i> notification will be invoked with a value of BUTTONUP.</p></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p>Upon the request HMI must provide the list of the following information:</p>
+ * <p>The names of all existing/supported hardware buttons.</p>
+ * <p>The availability of LONG/SHORT press for each existing/supported hardware button correspondingly</p>
+ * <p>The availability of UP/DOWN events for each existing/supported hardware button correspondingly.</p>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ * @see ButtonName
+ * @see ButtonEventMode
+ * @see ButtonPressMode
+ *
+ *
+ *
+ * @see OnButtonEvent
+ * @see OnButtonPress
+ *
+ */
+public class ButtonCapabilities extends RPCStruct {
+ public static final String KEY_NAME = "name";
+ public static final String KEY_SHORT_PRESS_AVAILABLE = "shortPressAvailable";
+ public static final String KEY_LONG_PRESS_AVAILABLE = "longPressAvailable";
+ public static final String KEY_UP_DOWN_AVAILABLE = "upDownAvailable";
+ /**
+ * Constructs a newly allocated ButtonCapabilities object
+ */
+ public ButtonCapabilities() { }
+ /**
+ * Constructs a newly allocated ButtonCapabilities object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public ButtonCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated ButtonCapabilities object
+ * @param name the name of button
+ * @param shortPressAvailable True if support otherwise False.
+ * @param longPressAvailable True if support otherwise False.
+ * @param upDownAvailable True if support otherwise False.
+ */
+ public ButtonCapabilities(@NonNull ButtonName name, @NonNull Boolean shortPressAvailable, @NonNull Boolean longPressAvailable, @NonNull Boolean upDownAvailable) {
+ this();
+ setName(name);
+ setShortPressAvailable(shortPressAvailable);
+ setLongPressAvailable(longPressAvailable);
+ setUpDownAvailable(upDownAvailable);
+ }
+ /**
+ * Get the name of theSDL HMI button.
+ * @return ButtonName the name of the Button
+ */
+ public ButtonName getName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_NAME);
+ }
+ /**
+ * Set the name of theSDL HMI button.
+ * @param name the name of button
+ */
+ public void setName( @NonNull ButtonName name ) {
+ setValue(KEY_NAME, name);
+ }
+ /**
+ * Whether the button supports a SHORT press. See <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonPressMode}</i> for more information.
+ * @return True if support otherwise False.
+ */
+ public Boolean getShortPressAvailable() {
+ return getBoolean( KEY_SHORT_PRESS_AVAILABLE );
+ }
+ /**
+ * Set the button supports a SHORT press. See <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonPressMode}</i> for more information.
+ * @param shortPressAvailable True if support otherwise False.
+ */
+ public void setShortPressAvailable( @NonNull Boolean shortPressAvailable ) {
+ setValue(KEY_SHORT_PRESS_AVAILABLE, shortPressAvailable);
+ }
+ /**
+ * Whether the button supports a LONG press. See <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonPressMode}</i> for more information.
+ * @return True if support otherwise False.
+ */
+ public Boolean getLongPressAvailable() {
+ return getBoolean( KEY_LONG_PRESS_AVAILABLE );
+ }
+ /**
+ * Set the button supports a LONG press. See <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonPressMode}</i> for more information.
+ * @param longPressAvailable True if support otherwise False.
+ */
+ public void setLongPressAvailable( @NonNull Boolean longPressAvailable ) {
+ setValue(KEY_LONG_PRESS_AVAILABLE, longPressAvailable);
+ }
+ /**
+ * Whether the button supports "button down" and "button up". When the button is depressed, the <i>{@linkplain OnButtonEvent}</i> notification will be invoked with a value of BUTTONDOWN.
+ * @return True if support otherwise False.
+ */
+ public Boolean getUpDownAvailable() {
+ return getBoolean( KEY_UP_DOWN_AVAILABLE );
+ }
+ /**
+ * Set the button supports "button down" and "button up". When the button is depressed, the <i>{@linkplain OnButtonEvent}</i> notification will be invoked with a value of BUTTONDOWN.
+ * @param upDownAvailable True if support otherwise False.
+ */
+ public void setUpDownAvailable( @NonNull Boolean upDownAvailable ) {
+ setValue(KEY_UP_DOWN_AVAILABLE, upDownAvailable);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPress.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPress.java
new file mode 100644
index 000000000..94fb75083
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPress.java
@@ -0,0 +1,107 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+import com.smartdevicelink.proxy.rpc.enums.ButtonPressMode;
+import com.smartdevicelink.proxy.rpc.enums.ModuleType;
+import java.util.Hashtable;
+
+/**
+ * This function allows a remote control type mobile application
+ * simulate a hardware button press event.
+ */
+public class ButtonPress extends RPCRequest {
+ public static final String KEY_MODULE_TYPE = "moduleType";
+ public static final String KEY_BUTTON_NAME = "buttonName";
+ public static final String KEY_BUTTON_PRESS_MODE = "buttonPressMode";
+
+ /**
+ * Constructs a new ButtonPress object
+ */
+ public ButtonPress() {
+ super(FunctionID.BUTTON_PRESS.toString());
+ }
+
+ /**
+ * <p>Constructs a new ButtonPress object indicated by the
+ * Hashtable parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public ButtonPress(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ButtonPress object
+ * @param moduleType Represents module where the button should be pressed
+ * @param buttonName Represents name of supported RC climate or radio button
+ * @param buttonPressMode Indicates whether this is a LONG or SHORT button press event.
+ */
+ public ButtonPress(@NonNull ModuleType moduleType, @NonNull ButtonName buttonName, @NonNull ButtonPressMode buttonPressMode) {
+ this();
+ setModuleType(moduleType);
+ setButtonName(buttonName);
+ setButtonPressMode(buttonPressMode);
+ }
+
+ /**
+ * Gets the ModuleType
+ *
+ * @return ModuleType - The module where the button should be pressed
+ */
+ public ModuleType getModuleType() {
+ return (ModuleType) getObject(ModuleType.class, KEY_MODULE_TYPE);
+ }
+
+ /**
+ * Sets a ModuleType
+ *
+ * @param moduleType
+ * Represents module where the button should be pressed
+ */
+ public void setModuleType(@NonNull ModuleType moduleType) {
+ setParameters(KEY_MODULE_TYPE, moduleType);
+ }
+
+ /**
+ * Gets the ButtonName
+ *
+ * @return ButtonName - The name of supported RC climate or radio button
+ */
+ public ButtonName getButtonName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_BUTTON_NAME);
+ }
+
+ /**
+ * Sets a ButtonName
+ *
+ * @param buttonName
+ * Represents name of supported RC climate or radio button
+ */
+ public void setButtonName(@NonNull ButtonName buttonName) {
+ setParameters(KEY_BUTTON_NAME, buttonName);
+ }
+
+ /**
+ * Gets the ButtonPressMode
+ *
+ * @return ButtonPressMode - Indicates whether this is a LONG or SHORT button press event.
+ */
+ public ButtonPressMode getButtonPressMode() {
+ return (ButtonPressMode) getObject(ButtonPressMode.class, KEY_BUTTON_PRESS_MODE);
+ }
+
+ /**
+ * Sets a ButtonPressMode
+ *
+ * @param buttonPressMode
+ * Indicates whether this is a LONG or SHORT button press event.
+ */
+ public void setButtonPressMode(@NonNull ButtonPressMode buttonPressMode) {
+ setParameters(KEY_BUTTON_PRESS_MODE, buttonPressMode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPressResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPressResponse.java
new file mode 100644
index 000000000..f2644160e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ButtonPressResponse.java
@@ -0,0 +1,41 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class ButtonPressResponse extends RPCResponse {
+
+ /**
+ * Constructs a new ButtonPressResponse object
+ */
+ public ButtonPressResponse() {
+ super(FunctionID.BUTTON_PRESS.toString());
+ }
+
+ /**
+ * <p>Constructs a new ButtonPressResponse object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ButtonPressResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ButtonPressResponse object
+ * @param resultCode whether the request is successfully processed
+ * @param success whether the request is successfully processed
+ */
+ public ButtonPressResponse(@NonNull Result resultCode, @NonNull Boolean success) {
+ this();
+ setResultCode(resultCode);
+ setSuccess(success);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistration.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistration.java
new file mode 100644
index 000000000..f2981412f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistration.java
@@ -0,0 +1,266 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * If the app recognizes during the app registration that the SDL HMI language
+ * (voice/TTS and/or display) does not match the app language, the app will be
+ * able (but does not need) to change this registration with changeRegistration
+ * prior to app being brought into focus.
+ *
+ * <p>Function Group: Base</p>
+ *
+ * <p><b>HMILevel can by any</b></p>
+ *
+ * <b>Note:</b>
+ *
+ * <p>SDL will send the language value confirmed to be supported by HMI via UI.GetCapabilities.</p>
+ * <p><b> Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>Language</td>
+ * <td>Language</td>
+ * <td>Requested SDL voice engine (VR+TTS) language registration.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>hmiDisplayLanguage</td>
+ * <td>Language</td>
+ * <td>Request display language registration.</td>
+ * <td>Y</td>
+ * <td>Minvalue=0; Maxvalue=2000000000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>appName</td>
+ * <td>String</td>
+ * <td>Request new app name registration</td>
+ * <td>N</td>
+ * <td>maxlength:100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>ttsName</td>
+ * <td>TTSChunk</td>
+ * <td>Request new ttsName registration</td>
+ * <td>N</td>
+ * <td>minsize:1; maxsize:100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>ngnMediaScreenAppName</td>
+ * <td>String</td>
+ * <td>Request new app short name registration</td>
+ * <td>N</td>
+ * <td>maxlength: 100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrSynonyms</td>
+ * <td>String</td>
+ * <td>Request new VR synonyms registration</td>
+ * <td>N</td>
+ * <td>maxlength: 40; minsize:1; maxsize:100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p><b>Response </b></p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p>DISALLOWED</p>
+ *
+ * @since SmartDeviceLink 2.0
+ * @see RegisterAppInterface
+ */
+public class ChangeRegistration extends RPCRequest {
+ public static final String KEY_LANGUAGE = "language";
+ public static final String KEY_HMI_DISPLAY_LANGUAGE = "hmiDisplayLanguage";
+ public static final String KEY_APP_NAME = "appName";
+ public static final String KEY_TTS_NAME = "ttsName";
+ public static final String KEY_NGN_MEDIA_SCREEN_NAME = "ngnMediaScreenAppName";
+ public static final String KEY_VR_SYNONYMS = "vrSynonyms";
+
+ /**
+ * Constructs a new ChangeRegistration object
+ */
+ public ChangeRegistration() {
+ super(FunctionID.CHANGE_REGISTRATION.toString());
+ }
+
+ /**
+ * <p>Constructs a new ChangeRegistration object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ChangeRegistration(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ChangeRegistration object
+ * @param language a language value
+ * @param hmiDisplayLanguage a Language value
+ */
+ public ChangeRegistration(@NonNull Language language, @NonNull Language hmiDisplayLanguage) {
+ this();
+ setLanguage(language);
+ setHmiDisplayLanguage(hmiDisplayLanguage);
+ }
+
+ /**
+ * Sets language
+ *
+ * @param language
+ * a language value
+ */
+ public void setLanguage(@NonNull Language language) {
+ setParameters(KEY_LANGUAGE, language);
+ }
+
+ /**
+ * Gets language
+ *
+ * @return Language -a Language value
+ */
+ public Language getLanguage() {
+ return (Language) getObject(Language.class, KEY_LANGUAGE);
+ }
+
+ /**
+ * Sets HMI display language
+ *
+ * @param hmiDisplayLanguage
+ * a Language value
+ */
+ public void setHmiDisplayLanguage(@NonNull Language hmiDisplayLanguage) {
+ setParameters(KEY_HMI_DISPLAY_LANGUAGE, hmiDisplayLanguage);
+ }
+
+ /**
+ * Gets HMI display language
+ *
+ * @return Language -a Language value
+ */
+ public Language getHmiDisplayLanguage() {
+ return (Language) getObject(Language.class, KEY_HMI_DISPLAY_LANGUAGE);
+ }
+
+ /**
+ * Sets app name
+ *
+ * @param appName App name to set
+ */
+ public void setAppName(String appName){
+ setParameters(KEY_APP_NAME, appName);
+ }
+
+ /**
+ * Gets app name
+ *
+ * @return The app name
+ */
+ public String getAppName(){
+ return getString(KEY_APP_NAME);
+ }
+
+ /**
+ * Sets NGN media screen app name
+ *
+ * @param ngnAppName The NGN app name
+ */
+ public void setNgnMediaScreenAppName(String ngnAppName){
+ setParameters(KEY_NGN_MEDIA_SCREEN_NAME, ngnAppName);
+ }
+
+ /**
+ * Gets NGN media screen app name
+ *
+ * @return The NGN app name
+ */
+ public String getNgnMediaScreenAppName(){
+ return getString(KEY_NGN_MEDIA_SCREEN_NAME);
+ }
+
+ /**
+ * Sets the TTS name
+ *
+ * @param ttsName The TTS name to set
+ */
+ public void setTtsName(List<TTSChunk> ttsName){
+ setParameters(KEY_TTS_NAME, ttsName);
+ }
+
+ /**
+ * Gets the TTS name
+ *
+ * @return The TTS name
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTtsName(){
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TTS_NAME);
+ }
+
+ /**
+ * Gets the List<String> representing the an array of 1-100 elements, each
+ * element containing a voice-recognition synonym
+ *
+ * @return List<String> -a List value representing the an array of
+ * 1-100 elements, each element containing a voice-recognition
+ * synonym
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getVrSynonyms() {
+ return (List<String>) getObject(String.class, KEY_VR_SYNONYMS);
+ }
+
+ /**
+ * Sets a vrSynonyms representing the an array of 1-100 elements, each
+ * element containing a voice-recognition synonym
+ *
+ * @param vrSynonyms
+ * a List<String> value representing the an array of 1-100
+ * elements
+ * <p>
+ * <b>Notes: </b></p>
+ * <ul>
+ * <li>Each vr synonym is limited to 40 characters, and there can
+ * be 1-100 synonyms in array</li>
+ * <li>May not be the same (by case insensitive comparison) as
+ * the name or any synonym of any currently-registered
+ * application</li>
+ * </ul>
+ */
+ public void setVrSynonyms(List<String> vrSynonyms) {
+ setParameters(KEY_VR_SYNONYMS, vrSynonyms);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistrationResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistrationResponse.java
new file mode 100644
index 000000000..4c1b0209b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ChangeRegistrationResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Change Registration Response is sent, when ChangeRegistration has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ChangeRegistrationResponse extends RPCResponse {
+
+ /**
+ * Constructs a new ChangeRegistrationResponse object
+ */
+ public ChangeRegistrationResponse() {
+ super(FunctionID.CHANGE_REGISTRATION.toString());
+ }
+
+ /**
+ * <p>Constructs a new ChangeRegistrationResponse object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ChangeRegistrationResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ChangeRegistrationResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ChangeRegistrationResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Choice.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Choice.java
new file mode 100644
index 000000000..e93196bd5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Choice.java
@@ -0,0 +1,229 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.util.Version;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.
+ * For example, the application may request for the user`s choice among several suggested ones: Yes, No, Skip.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>choiceID</td>
+ * <td>Integer</td>
+ * <td>Application-scoped identifier that uniquely identifies this choice.
+ * Min: 0;
+ * Max: 65535
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuName</td>
+ * <td>String</td>
+ * <td>Text which appears in menu, representing this choice.
+ * Min: 1;
+ * Max: 100
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrCommands</td>
+ * <td>String[]</td>
+ * <td>An array of strings to be used as VR synonyms for this choice. If this array is provided, it must have at least one non-empty element</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>image</td>
+ * <td>Image</td>
+ * <td>Either a static hex icon value or a binary image file name identifier (sent by PutFile).</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ * @see AddCommand
+ * @see PerformInteraction
+ * @see Image
+ */
+public class Choice extends RPCStruct {
+ public static final String KEY_SECONDARY_TEXT = "secondaryText";
+ public static final String KEY_TERTIARY_TEXT = "tertiaryText";
+ public static final String KEY_SECONDARY_IMAGE = "secondaryImage";
+ public static final String KEY_MENU_NAME = "menuName";
+ public static final String KEY_VR_COMMANDS = "vrCommands";
+ public static final String KEY_CHOICE_ID = "choiceID";
+ public static final String KEY_IMAGE = "image";
+
+ /**
+ * Constructs a newly allocated Choice object
+ */
+ public Choice() { }
+
+ /**
+ * Constructs a newly allocated Choice object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public Choice(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated Choice object
+ * @param choiceID Min: 0 Max: 65535
+ * @param menuName the menu name
+ */
+ public Choice(@NonNull Integer choiceID, @NonNull String menuName) {
+ this();
+ setChoiceID(choiceID);
+ setMenuName(menuName);
+ }
+
+ /**
+ * Constructs a newly allocated Choice object
+ * @param choiceID Min: 0 Max: 65535
+ * @param menuName the menu name
+ * @param vrCommands the List of vrCommands
+ *
+ * Deprecated - use {@link #Choice(Integer, String)}
+ */
+ @Deprecated
+ public Choice(@NonNull Integer choiceID, @NonNull String menuName, @NonNull List<String> vrCommands) {
+ this();
+ setChoiceID(choiceID);
+ setMenuName(menuName);
+ setVrCommands(vrCommands);
+ }
+
+ /**
+ * VrCommands became optional as of RPC Spec 5.0. On legacy systems, we must still set VrCommands, as
+ * they are expected, even though the developer may not specify them. <br>
+ *
+ * Additionally, VrCommands must be unique, therefore we will use the string value of the command's ID
+ *
+ * @param rpcVersion the rpc spec version that has been negotiated. If value is null the
+ * the max value of RPC spec version this library supports should be used.
+ * @param formatParams if true, the format method will be called on subsequent params
+ */
+ @Override
+ public void format(Version rpcVersion, boolean formatParams){
+
+ if (rpcVersion == null || rpcVersion.getMajor() < 5){
+
+ // make sure there is at least one vr param
+ List<String> existingVrCommands = getVrCommands();
+
+ if (existingVrCommands == null || existingVrCommands.size() == 0) {
+ // if no commands set, set one due to a legacy head unit requirement
+ Integer choiceID = getChoiceID();
+ List<String> vrCommands = new ArrayList<>();
+ vrCommands.add(String.valueOf(choiceID));
+ setVrCommands(vrCommands);
+ }
+ }
+
+ super.format(rpcVersion, formatParams);
+ }
+
+ /**
+ * Get the application-scoped identifier that uniquely identifies this choice.
+ * @return choiceID Min: 0; Max: 65535
+ */
+ public Integer getChoiceID() {
+ return getInteger(KEY_CHOICE_ID);
+ }
+ /**
+ * Set the application-scoped identifier that uniquely identifies this choice.
+ * @param choiceID Min: 0 Max: 65535
+ */
+ public void setChoiceID(@NonNull Integer choiceID) {
+ setValue(KEY_CHOICE_ID, choiceID);
+ }
+ /**
+ * Text which appears in menu, representing this choice.
+ * Min: 1;
+ * Max: 100
+ * @return menuName the menu name
+ */
+ public String getMenuName() {
+ return getString(KEY_MENU_NAME);
+ }
+ /**
+ * Text which appears in menu, representing this choice.
+ * Min: 1;
+ * Max: 100
+ * @param menuName the menu name
+ */
+ public void setMenuName(@NonNull String menuName) {
+ setValue(KEY_MENU_NAME, menuName);
+ }
+ /**
+ * Get an array of strings to be used as VR synonyms for this choice. If this array is provided, it must have at least one non-empty element
+ * @return vrCommands List
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getVrCommands() {
+ return (List<String>) getObject(String.class, KEY_VR_COMMANDS);
+ }
+ /**
+ * Set an array of strings to be used as VR synonyms for this choice. If this array is provided, it must have at least one non-empty element
+ * @param vrCommands the List of vrCommands
+ * @since SmartDeviceLink 2.0
+ */
+ public void setVrCommands(List<String> vrCommands) {
+ setValue(KEY_VR_COMMANDS, vrCommands);
+ }
+ /**
+ * Set the image
+ * @param image the image of the choice
+ */
+ public void setImage(Image image) {
+ setValue(KEY_IMAGE, image);
+ }
+ /**
+ * Get the image
+ * @return the image of the choice
+ */
+ @SuppressWarnings("unchecked")
+ public Image getImage() {
+ return (Image) getObject(Image.class, KEY_IMAGE);
+ }
+
+ public String getSecondaryText() {
+ return getString(KEY_SECONDARY_TEXT);
+ }
+
+ public void setSecondaryText(String secondaryText) {
+ setValue(KEY_SECONDARY_TEXT, secondaryText);
+ }
+
+ public String getTertiaryText() {
+ return getString(KEY_TERTIARY_TEXT);
+ }
+
+ public void setTertiaryText(String tertiaryText) {
+ setValue(KEY_TERTIARY_TEXT, tertiaryText);
+ }
+
+ public void setSecondaryImage(Image image) {
+ setValue(KEY_SECONDARY_IMAGE, image);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Image getSecondaryImage() {
+ return (Image) getObject(Image.class, KEY_SECONDARY_IMAGE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlCapabilities.java
new file mode 100644
index 000000000..335fffa48
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlCapabilities.java
@@ -0,0 +1,374 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.DefrostZone;
+import com.smartdevicelink.proxy.rpc.enums.VentilationMode;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Contains information about a climate control module's capabilities.
+ */
+
+public class ClimateControlCapabilities extends RPCStruct{
+ public static final String KEY_MODULE_NAME= "moduleName";
+ public static final String KEY_FAN_SPEED_AVAILABLE= "fanSpeedAvailable";
+ public static final String KEY_DESIRED_TEMPERATURE_AVAILABLE= "desiredTemperatureAvailable";
+ public static final String KEY_AC_ENABLE_AVAILABLE= "acEnableAvailable";
+ public static final String KEY_AC_MAX_ENABLE_AVAILABLE= "acMaxEnableAvailable";
+ public static final String KEY_CIRCULATE_AIR_ENABLE_AVAILABLE= "circulateAirEnableAvailable";
+ public static final String KEY_AUTO_MODE_ENABLE_AVAILABLE= "autoModeEnableAvailable";
+ public static final String KEY_DUAL_MODE_ENABLE_AVAILABLE= "dualModeEnableAvailable";
+ public static final String KEY_DEFROST_ZONE_AVAILABLE= "defrostZoneAvailable";
+ public static final String KEY_DEFROST_ZONE= "defrostZone";
+ public static final String KEY_VENTILATION_MODE_AVAILABLE= "ventilationModeAvailable";
+ public static final String KEY_VENTILATION_MODE= "ventilationMode";
+ public static final String KEY_HEATED_STEERING_WHEEL_AVAILABLE = "heatedSteeringWheelAvailable";
+ public static final String KEY_HEATED_WIND_SHIELD_AVAILABLE = "heatedWindshieldAvailable";
+ public static final String KEY_HEATED_REAR_WINDOW_AVAILABLE = "heatedRearWindowAvailable";
+ public static final String KEY_HEATED_MIRRORS_AVAILABLE = "heatedMirrorsAvailable";
+
+ public ClimateControlCapabilities() {
+ }
+
+ public ClimateControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated ClimateControlCapabilities
+ *
+ * @param moduleName The short friendly name of the climate control module. It should not be used to identify a module by mobile application.
+ */
+ public ClimateControlCapabilities(@NonNull String moduleName) {
+ this();
+ setModuleName(moduleName);
+ }
+
+ /**
+ * Sets the moduleName portion of the ClimateControlCapabilities class
+ *
+ * @param moduleName The short friendly name of the climate control module. It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Gets the moduleName portion of the ClimateControlCapabilities class
+ *
+ * @return String - Short friendly name of the climate control module.
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Sets the fanSpeedAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param fanSpeedAvailable
+ * Availability of the control of fan speed.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setFanSpeedAvailable(Boolean fanSpeedAvailable) {
+ setValue(KEY_FAN_SPEED_AVAILABLE, fanSpeedAvailable);
+ }
+
+ /**
+ * Gets the fanSpeedAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of fan speed.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getFanSpeedAvailable() {
+ return getBoolean(KEY_FAN_SPEED_AVAILABLE);
+ }
+
+ /**
+ * Sets the desiredTemperatureAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param desiredTemperatureAvailable
+ * Availability of the control of desired temperature.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setDesiredTemperatureAvailable(Boolean desiredTemperatureAvailable) {
+ setValue(KEY_DESIRED_TEMPERATURE_AVAILABLE, desiredTemperatureAvailable);
+ }
+
+ /**
+ * Gets the desiredTemperatureAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of desired temperature.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getDesiredTemperatureAvailable() {
+ return getBoolean(KEY_DESIRED_TEMPERATURE_AVAILABLE);
+ }
+
+ /**
+ * Sets the acEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param acEnableAvailable
+ * Availability of the control of turn on/off AC.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setAcEnableAvailable(Boolean acEnableAvailable) {
+ setValue(KEY_AC_ENABLE_AVAILABLE, acEnableAvailable);
+ }
+
+ /**
+ * Gets the acEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of turn on/off AC.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getAcEnableAvailable() {
+ return getBoolean(KEY_AC_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the acMaxEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param acMaxEnableAvailable
+ * Availability of the control of enable/disable air conditioning is ON on the maximum level.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setAcMaxEnableAvailable(Boolean acMaxEnableAvailable) {
+ setValue(KEY_AC_MAX_ENABLE_AVAILABLE, acMaxEnableAvailable);
+ }
+
+ /**
+ * Gets the acMaxEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable air conditioning is ON on the maximum level.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getAcMaxEnableAvailable() {
+ return getBoolean(KEY_AC_MAX_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the circulateAirEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param circulateAirEnableAvailable
+ * Availability of the control of enable/disable circulate Air mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setCirculateAirEnableAvailable(Boolean circulateAirEnableAvailable) {
+ setValue(KEY_CIRCULATE_AIR_ENABLE_AVAILABLE, circulateAirEnableAvailable);
+ }
+
+ /**
+ * Gets the circulateAirEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable circulate Air mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getCirculateAirEnableAvailable() {
+ return getBoolean(KEY_CIRCULATE_AIR_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the autoModeEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param autoModeEnableAvailable
+ * Availability of the control of enable/disable auto mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setAutoModeEnableAvailable(Boolean autoModeEnableAvailable) {
+ setValue(KEY_AUTO_MODE_ENABLE_AVAILABLE, autoModeEnableAvailable);
+ }
+
+ /**
+ * Gets the autoModeEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable auto mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getAutoModeEnableAvailable() {
+ return getBoolean(KEY_AUTO_MODE_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the dualModeEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param dualModeEnableAvailable
+ * Availability of the control of enable/disable dual mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setDualModeEnableAvailable(Boolean dualModeEnableAvailable) {
+ setValue(KEY_DUAL_MODE_ENABLE_AVAILABLE, dualModeEnableAvailable);
+ }
+
+ /**
+ * Gets the dualModeEnableAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable dual mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getDualModeEnableAvailable() {
+ return getBoolean(KEY_DUAL_MODE_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the defrostZoneAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param defrostZoneAvailable
+ * Availability of the control of defrost zones.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setDefrostZoneAvailable(Boolean defrostZoneAvailable) {
+ setValue(KEY_DEFROST_ZONE_AVAILABLE, defrostZoneAvailable);
+ }
+
+ /**
+ * Gets the defrostZoneAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of defrost zones.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getDefrostZoneAvailable() {
+ return getBoolean(KEY_DEFROST_ZONE_AVAILABLE);
+ }
+
+ /**
+ * Gets the List<DefrostZone> portion of the ClimateControlCapabilities class
+ *
+ * @return List<DefrostZone> - A set of all defrost zones that are controllable.
+ */
+ public List<DefrostZone> getDefrostZone() {
+ return (List<DefrostZone>) getObject(DefrostZone.class, KEY_DEFROST_ZONE);
+ }
+
+ /**
+ * Sets the defrostZone portion of the ClimateControlCapabilities class
+ *
+ * @param defrostZone
+ * A set of all defrost zones that are controllable.
+ */
+ public void setDefrostZone(List<DefrostZone> defrostZone) {
+ setValue(KEY_DEFROST_ZONE, defrostZone);
+ }
+
+ /**
+ * Sets the ventilationModeAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param ventilationModeAvailable
+ * Availability of the control of air ventilation mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setVentilationModeAvailable(Boolean ventilationModeAvailable) {
+ setValue(KEY_VENTILATION_MODE_AVAILABLE, ventilationModeAvailable);
+ }
+
+ /**
+ * Gets the ventilationModeAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of air ventilation mode.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getVentilationModeAvailable() {
+ return getBoolean(KEY_VENTILATION_MODE_AVAILABLE);
+ }
+
+ /**
+ * Gets the List<VentilationMode> portion of the ClimateControlCapabilities class
+ *
+ * @return List<VentilationMode> - A set of all ventilation modes that are controllable.
+ */
+ public List<VentilationMode> getVentilationMode() {
+ return (List<VentilationMode>) getObject(VentilationMode.class, KEY_VENTILATION_MODE);
+ }
+
+ /**
+ * Sets the ventilationMode portion of the ClimateControlCapabilities class
+ *
+ * @param ventilationMode
+ * A set of all ventilation modes that are controllable.
+ */
+ public void setVentilationMode(List<VentilationMode> ventilationMode) {
+ setValue(KEY_VENTILATION_MODE, ventilationMode);
+ }
+
+ /**
+ * Sets the heatedSteeringWheelAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedSteeringWheelAvailable Availability of the control (enable/disable) of heated Steering Wheel.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHeatedSteeringWheelAvailable(Boolean heatedSteeringWheelAvailable) {
+ setValue(KEY_HEATED_STEERING_WHEEL_AVAILABLE, heatedSteeringWheelAvailable);
+ }
+
+ /**
+ * Gets the heatedSteeringWheelAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control (enable/disable) of heated Steering Wheel.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHeatedSteeringWheelAvailable() {
+ return getBoolean(KEY_HEATED_STEERING_WHEEL_AVAILABLE);
+ }
+
+ /**
+ * Sets the heatedWindshieldAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedWindshieldAvailable Availability of the control (enable/disable) of heated Windshield.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHeatedWindshieldAvailable(Boolean heatedWindshieldAvailable) {
+ setValue(KEY_HEATED_WIND_SHIELD_AVAILABLE, heatedWindshieldAvailable);
+ }
+
+ /**
+ * Gets the heatedWindshieldAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control (enable/disable) of heated Windshield.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHeatedWindshieldAvailable() {
+ return getBoolean(KEY_HEATED_WIND_SHIELD_AVAILABLE);
+ }
+
+ /**
+ * Sets the heatedRearWindowAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedRearWindowAvailable Availability of the control (enable/disable) of heated Rear Window.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHeatedRearWindowAvailable(Boolean heatedRearWindowAvailable) {
+ setValue(KEY_HEATED_REAR_WINDOW_AVAILABLE, heatedRearWindowAvailable);
+ }
+
+ /**
+ * Gets the heatedRearWindowAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control (enable/disable) of heated Rear Window.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHeatedRearWindowAvailable() {
+ return getBoolean(KEY_HEATED_REAR_WINDOW_AVAILABLE);
+ }
+
+ /**
+ * Sets the heatedMirrorsAvailable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedMirrorsAvailable Availability of the control (enable/disable) of heated Mirrors.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHeatedMirrorsAvailable(Boolean heatedMirrorsAvailable) {
+ setValue(KEY_HEATED_MIRRORS_AVAILABLE, heatedMirrorsAvailable);
+ }
+
+ /**
+ * Gets the heatedMirrorsAvailable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Availability of the control (enable/disable) of heated Mirrors.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHeatedMirrorsAvailable() {
+ return getBoolean(KEY_HEATED_MIRRORS_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlData.java
new file mode 100644
index 000000000..1229e4668
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateControlData.java
@@ -0,0 +1,183 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.DefrostZone;
+import com.smartdevicelink.proxy.rpc.enums.VentilationMode;
+
+import java.util.Hashtable;
+
+public class ClimateControlData extends RPCStruct{
+ public static final String KEY_FAN_SPEED= "fanSpeed";
+ public static final String KEY_CURRENT_TEMPERATURE= "currentTemperature";
+ public static final String KEY_DESIRED_TEMPERATURE= "desiredTemperature";
+ public static final String KEY_AC_ENABLE= "acEnable";
+ public static final String KEY_CIRCULATE_AIR_ENABLE= "circulateAirEnable";
+ public static final String KEY_AUTO_MODE_ENABLE= "autoModeEnable";
+ public static final String KEY_DEFROST_ZONE= "defrostZone";
+ public static final String KEY_DUAL_MODE_ENABLE= "dualModeEnable";
+ public static final String KEY_AC_MAX_ENABLE= "acMaxEnable";
+ public static final String KEY_VENTILATION_MODE= "ventilationMode";
+ public static final String KEY_HEATED_STEERING_WHEEL_ENABLE = "heatedSteeringWheelEnable";
+ public static final String KEY_HEATED_WIND_SHIELD_ENABLE = "heatedWindshieldEnable";
+ public static final String KEY_HEATED_REAR_WINDOW_ENABLE = "heatedRearWindowEnable";
+ public static final String KEY_HEATED_MIRRORS_ENABLE = "heatedMirrorsEnable";
+
+ public ClimateControlData() {
+ }
+
+ public ClimateControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setFanSpeed(Integer fanSpeed) {
+ setValue(KEY_FAN_SPEED, fanSpeed);
+ }
+
+ public Integer getFanSpeed() {
+ return getInteger(KEY_FAN_SPEED);
+ }
+
+ public void setCurrentTemperature(Temperature currentTemperature) {
+ setValue(KEY_CURRENT_TEMPERATURE, currentTemperature);
+ }
+
+ public Temperature getCurrentTemperature() {
+ return (Temperature) getObject(Temperature.class, KEY_CURRENT_TEMPERATURE);
+ }
+
+ public void setDesiredTemperature(Temperature desiredTemperature) {
+ setValue(KEY_DESIRED_TEMPERATURE, desiredTemperature);
+ }
+
+ public Temperature getDesiredTemperature() {
+ return (Temperature) getObject(Temperature.class, KEY_DESIRED_TEMPERATURE);
+ }
+
+ public void setAcEnable(Boolean acEnable) {
+ setValue(KEY_AC_ENABLE, acEnable);
+ }
+
+ public Boolean getAcEnable() {
+ return getBoolean(KEY_AC_ENABLE);
+ }
+
+ public void setCirculateAirEnable(Boolean circulateAirEnable) {
+ setValue(KEY_CIRCULATE_AIR_ENABLE, circulateAirEnable);
+ }
+
+ public Boolean getCirculateAirEnable() {
+ return getBoolean(KEY_CIRCULATE_AIR_ENABLE);
+ }
+
+ public void setAutoModeEnable(Boolean autoModeEnable) {
+ setValue(KEY_AUTO_MODE_ENABLE, autoModeEnable);
+ }
+
+ public Boolean getAutoModeEnable() {
+ return getBoolean(KEY_AUTO_MODE_ENABLE);
+ }
+
+ public void setDefrostZone(DefrostZone defrostZone) {
+ setValue(KEY_DEFROST_ZONE, defrostZone);
+ }
+
+ public DefrostZone getDefrostZone() {
+ return (DefrostZone) getObject(DefrostZone.class, KEY_DEFROST_ZONE);
+ }
+
+ public void setDualModeEnable(Boolean dualModeEnable) {
+ setValue(KEY_DUAL_MODE_ENABLE, dualModeEnable);
+ }
+
+ public Boolean getDualModeEnable() {
+ return getBoolean(KEY_DUAL_MODE_ENABLE);
+ }
+
+ public void setAcMaxEnable(Boolean acMaxEnable) {
+ setValue(KEY_AC_MAX_ENABLE, acMaxEnable);
+ }
+
+ public Boolean getAcMaxEnable() {
+ return getBoolean(KEY_AC_MAX_ENABLE);
+ }
+
+ public void setVentilationMode(VentilationMode ventilationMode) {
+ setValue(KEY_VENTILATION_MODE, ventilationMode);
+ }
+
+ public VentilationMode getVentilationMode() {
+ return (VentilationMode) getObject(VentilationMode.class, KEY_VENTILATION_MODE);
+ }
+
+ /**
+ * Sets the heatedSteeringWheelEnable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedSteeringWheelEnable Value false means disabled/turn off, value true means enabled/turn on.
+ */
+ public void setHeatedSteeringWheelEnable(Boolean heatedSteeringWheelEnable) {
+ setValue(KEY_HEATED_STEERING_WHEEL_ENABLE, heatedSteeringWheelEnable);
+ }
+
+ /**
+ * Gets the heatedSteeringWheelEnable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Value false means disabled/turn off, value true means enabled/turn on.
+ */
+ public Boolean getHeatedSteeringWheelEnable() {
+ return getBoolean(KEY_HEATED_STEERING_WHEEL_ENABLE);
+ }
+
+ /**
+ * Sets the heatedWindshieldEnable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedWindshieldEnable Value false means disabled, value true means enabled.
+ */
+ public void setHeatedWindshieldEnable(Boolean heatedWindshieldEnable) {
+ setValue(KEY_HEATED_WIND_SHIELD_ENABLE, heatedWindshieldEnable);
+ }
+
+ /**
+ * Gets the heatedWindshieldEnable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Value false means disabled, value true means enabled.
+ */
+ public Boolean getHeatedWindshieldEnable() {
+ return getBoolean(KEY_HEATED_WIND_SHIELD_ENABLE);
+ }
+
+ /**
+ * Sets the heatedRearWindowEnable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedRearWindowEnable Value false means disabled, value true means enabled.
+ */
+ public void setHeatedRearWindowEnable(Boolean heatedRearWindowEnable) {
+ setValue(KEY_HEATED_REAR_WINDOW_ENABLE, heatedRearWindowEnable);
+ }
+
+ /**
+ * Gets the heatedRearWindowEnable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Value false means disabled, value true means enabled.
+ */
+ public Boolean getHeatedRearWindowEnable() {
+ return getBoolean(KEY_HEATED_REAR_WINDOW_ENABLE);
+ }
+
+ /**
+ * Sets the heatedMirrorsEnable portion of the ClimateControlCapabilities class
+ *
+ * @param heatedMirrorsEnable Value false means disabled, value true means enabled.
+ */
+ public void setHeatedMirrorsEnable(Boolean heatedMirrorsEnable) {
+ setValue(KEY_HEATED_MIRRORS_ENABLE, heatedMirrorsEnable);
+ }
+
+ /**
+ * Gets the heatedMirrorsEnable portion of the ClimateControlCapabilities class
+ *
+ * @return Boolean - Value false means disabled, value true means enabled.
+ */
+ public Boolean getHeatedMirrorsEnable() {
+ return getBoolean(KEY_HEATED_MIRRORS_ENABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/CloudAppProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/CloudAppProperties.java
new file mode 100644
index 000000000..6538496ee
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/CloudAppProperties.java
@@ -0,0 +1,104 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.HybridAppPreference;
+
+import java.util.Hashtable;
+
+/**
+ * Properties that relate to a a cloud app entry.
+ */
+public class CloudAppProperties extends RPCStruct {
+ public static final String KEY_APP_NAME = "appName";
+ public static final String KEY_APP_ID = "appID";
+ public static final String KEY_ENABLED = "enabled";
+ public static final String KEY_AUTH_TOKEN = "authToken";
+ public static final String KEY_CLOUD_TRANSPORT_TYPE = "cloudTransportType";
+ public static final String KEY_HYBRID_APP_PREFERENCE = "hybridAppPreference";
+ public static final String KEY_ENDPOINT = "endpoint";
+
+
+ public CloudAppProperties(){}
+
+ public CloudAppProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public CloudAppProperties(@NonNull String appName, @NonNull String appID){
+ this();
+ setValue(KEY_APP_NAME, appName);
+ setValue(KEY_APP_ID, appID);
+ }
+
+ public void setAppName(String appName){
+ setValue(KEY_APP_NAME, appName);
+ }
+
+ public String getAppName(){
+ return getString(KEY_APP_NAME);
+ }
+
+ public void setAppID(String appID){
+ setValue(KEY_APP_ID, appID);
+ }
+
+ public String getAppID(){
+ return getString(KEY_APP_ID);
+ }
+
+ /**
+ * If true, this cloud app entry will designate it should appear in the HMI
+ * @param enabled if the app should be
+ */
+ public void setEnabled(boolean enabled){
+ setValue(KEY_ENABLED, enabled);
+ }
+
+ /**
+ * @return if this cloud app entry will designate it should appear in the HMI
+ */
+ public Boolean isEnabled(){
+ return getBoolean(KEY_ENABLED);
+ }
+
+ public void setAuthToken(String token){
+ setValue(KEY_AUTH_TOKEN, token);
+ }
+
+ public String getAuthToken(){
+ return getString(KEY_AUTH_TOKEN);
+ }
+
+ public void setCloudTransportType(String transportType){
+ setValue(KEY_CLOUD_TRANSPORT_TYPE, transportType);
+ }
+
+ public String getCloudTransportType(){
+ return getString(KEY_CLOUD_TRANSPORT_TYPE);
+ }
+
+ public void setHybridAppPreference(HybridAppPreference hybridAppPreference){
+ setValue(KEY_HYBRID_APP_PREFERENCE, hybridAppPreference);
+ }
+
+ public HybridAppPreference getHybridAppPreference(){
+ return (HybridAppPreference)getObject(HybridAppPreference.class, KEY_HYBRID_APP_PREFERENCE);
+ }
+
+ /**
+ * @param token - max length ="65535"
+ */
+ public void setEndpoint(String token){
+ setValue(KEY_ENDPOINT, token);
+ }
+
+ /**
+ * @return token - max length ="65535"
+ */
+ public String getEndpoint(){
+ return getString(KEY_ENDPOINT);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ClusterModeStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClusterModeStatus.java
new file mode 100644
index 000000000..93ea9b604
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClusterModeStatus.java
@@ -0,0 +1,105 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.CarModeStatus;
+import com.smartdevicelink.proxy.rpc.enums.PowerModeQualificationStatus;
+import com.smartdevicelink.proxy.rpc.enums.PowerModeStatus;
+
+import java.util.Hashtable;
+
+/** <p>The status modes of the instrument panel cluster.</p>
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>powerModeActive</td>
+ * <td>Boolean</td>
+ * <td></td>
+ * <td>References signal "PowerMode_UB".</td>
+ * </tr>
+ * <tr>
+ * <td>powerModeQualificationStatus</td>
+ * <td>PowerModeQualificationStatus</td>
+ * <td></td>
+ * <td>References signal "PowerModeQF".</td>
+ * </tr>
+ * <tr>
+ * <td>carModeStatus</td>
+ * <td>CarModeStatus</td>
+ * <td></td>
+ * <td>Describes the carmode the vehicle is in.</td>
+ * </tr>
+ * <tr>
+ * <td>powerModeStatus</td>
+ * <td>PowerModeStatus</td>
+ * <td>true</td>
+ * <td>Describes the different powermodes</td>
+ * </tr>
+ *
+ * </table>
+ * @since SmartDeviceLink 1.0
+ *
+ * @see SubscribeVehicleData
+ * @see SubscribeVehicleData
+ * @see Image
+ *
+ */
+
+public class ClusterModeStatus extends RPCStruct {
+ public static final String KEY_POWER_MODE_ACTIVE = "powerModeActive";
+ public static final String KEY_POWER_MODE_QUALIFICATION_STATUS = "powerModeQualificationStatus";
+ public static final String KEY_CAR_MODE_STATUS = "carModeStatus";
+ public static final String KEY_POWER_MODE_STATUS = "powerModeStatus";
+ /** <p>Constructs a new ClusterModeStatus object indicated by the Hashtable
+ * parameter</p>
+ * @param hash
+ * The hash table to use
+ *
+ */
+
+ public ClusterModeStatus() { }
+ public ClusterModeStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public ClusterModeStatus(@NonNull Boolean powerModeActive, @NonNull PowerModeQualificationStatus powerModeQualificationStatus, @NonNull CarModeStatus carModeStatus, @NonNull PowerModeStatus powerModeStatus) {
+ this();
+ setPowerModeActive(powerModeActive);
+ setPowerModeQualificationStatus(powerModeQualificationStatus);
+ setCarModeStatus(carModeStatus);
+ setPowerModeStatus(powerModeStatus);
+ }
+
+ public void setPowerModeActive(@NonNull Boolean powerModeActive) {
+ setValue(KEY_POWER_MODE_ACTIVE, powerModeActive);
+ }
+ public Boolean getPowerModeActive() {
+ return getBoolean(KEY_POWER_MODE_ACTIVE);
+ }
+ public void setPowerModeQualificationStatus(@NonNull PowerModeQualificationStatus powerModeQualificationStatus) {
+ setValue(KEY_POWER_MODE_QUALIFICATION_STATUS, powerModeQualificationStatus);
+ }
+ public PowerModeQualificationStatus getPowerModeQualificationStatus() {
+ return (PowerModeQualificationStatus) getObject(PowerModeQualificationStatus.class, KEY_POWER_MODE_QUALIFICATION_STATUS);
+ }
+ public void setCarModeStatus(@NonNull CarModeStatus carModeStatus) {
+ setValue(KEY_CAR_MODE_STATUS, carModeStatus);
+ }
+ public CarModeStatus getCarModeStatus() {
+ return (CarModeStatus) getObject(CarModeStatus.class, KEY_CAR_MODE_STATUS);
+ }
+ public void setPowerModeStatus(@NonNull PowerModeStatus powerModeStatus) {
+ setValue(KEY_POWER_MODE_STATUS, powerModeStatus);
+ }
+ public PowerModeStatus getPowerModeStatus() {
+ return (PowerModeStatus) getObject(PowerModeStatus.class, KEY_POWER_MODE_STATUS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Coordinate.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Coordinate.java
new file mode 100644
index 000000000..f886ff52a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Coordinate.java
@@ -0,0 +1,44 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+public class Coordinate extends RPCStruct{
+ public static final String KEY_LATITUDE_DEGREES = "latitudeDegrees";
+ public static final String KEY_LONGITUDE_DEGREES = "longitudeDegrees";
+
+ public Coordinate() {
+ }
+
+ public Coordinate(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public Coordinate(@NonNull Float latitudeDegrees, @NonNull Float longitudeDegrees) {
+ this();
+ setLatitudeDegrees(latitudeDegrees);
+ setLongitudeDegrees(longitudeDegrees);
+ }
+
+ public Float getLatitudeDegrees() {
+ Object value = getValue(KEY_LATITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ public void setLatitudeDegrees(@NonNull Float latitudeDegrees) {
+ setValue(KEY_LATITUDE_DEGREES, latitudeDegrees);
+ }
+
+ public Float getLongitudeDegrees() {
+ Object value = getValue(KEY_LONGITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ public void setLongitudeDegrees(@NonNull Float longitudeDegrees) {
+ setValue(KEY_LONGITUDE_DEGREES, longitudeDegrees);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSet.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSet.java
new file mode 100644
index 000000000..07f17d1e6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSet.java
@@ -0,0 +1,151 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Creates a Choice Set which can be used in subsequent <i>
+ * {@linkplain PerformInteraction}</i> Operations.
+ *
+ * <p>Function Group: Base </p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p>AudioStreamingState : ANY</p>
+ *
+ * <p>SystemContext: MAIN, MENU, VR</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>interactionChoiceSetID</td>
+ * <td>Integer</td>
+ * <td>A unique ID that identifies the Choice Set</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value: 2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>choiceSet</td>
+ * <td>Choice[]</td>
+ * <td>Array of one or more elements.</td>
+ * <td>Y</td>
+ * <td>Min Value: 1; Max Value: 100</td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * </table>
+ *
+ *
+ * <p> <b>Note:</b></p>Second Utterance issue with CreateInteractionChoiceSet RPC. Before a perform interaction
+ * is sent you MUST wait for the success from the CreateInteractionChoiceSet RPC.
+ * If you do not wait the system may not recognize the first utterance from the user.
+ *
+ * <p><b>Response</b></p>
+ *
+ * Indicates that the corresponding request either failed or succeeded. If the response returns with a SUCCESS result code, this means the Choice Set was created.
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ * <p> INVALID_ID</p>
+ * <p> DUPLICATE_NAME</p>
+ * <p>UNSUPPORTED_RESOURCE </p>
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ * @see DeleteInteractionChoiceSet
+ * @see PerformInteraction
+ */
+public class CreateInteractionChoiceSet extends RPCRequest {
+ public static final String KEY_CHOICE_SET = "choiceSet";
+ public static final String KEY_INTERACTION_CHOICE_SET_ID = "interactionChoiceSetID";
+
+ /**
+ * Constructs a new CreateInteractionChoiceSet object
+ */
+ public CreateInteractionChoiceSet() {
+ super(FunctionID.CREATE_INTERACTION_CHOICE_SET.toString());
+ }
+ /**
+ * <p>Constructs a new CreateInteractionChoiceSet object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public CreateInteractionChoiceSet(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new CreateInteractionChoiceSet object
+ * @param interactionChoiceSetID: an Integer value representing the Choice Set ID
+ * <b>Notes: </b>Min Value: 0; Max Value: 2000000000
+ * @param choiceSet: a List<Choice> representing the array of one or more elements
+ * <b>Notes: </b>Min Value: 1; Max Value: 100
+ */
+ public CreateInteractionChoiceSet(@NonNull Integer interactionChoiceSetID, @NonNull List<Choice> choiceSet) {
+ this();
+ setInteractionChoiceSetID(interactionChoiceSetID);
+ setChoiceSet(choiceSet);
+ }
+ /**
+ * Gets the Choice Set unique ID
+ *
+ * @return Integer -an Integer representing the Choice Set ID
+ */
+ public Integer getInteractionChoiceSetID() {
+ return getInteger( KEY_INTERACTION_CHOICE_SET_ID );
+ }
+ /**
+ * Sets a unique ID that identifies the Choice Set
+ *
+ * @param interactionChoiceSetID
+ * an Integer value representing the Choice Set ID
+ *
+ * <b>Notes: </b>Min Value: 0; Max Value: 2000000000
+ */
+ public void setInteractionChoiceSetID( @NonNull Integer interactionChoiceSetID ) {
+ setParameters(KEY_INTERACTION_CHOICE_SET_ID, interactionChoiceSetID);
+ }
+ /**
+ * Gets Choice Set Array of one or more elements
+ *
+ * @return List<Choice> -a List<Choice> representing the array of one or
+ * more elements
+ */
+ @SuppressWarnings("unchecked")
+ public List<Choice> getChoiceSet() {
+ return (List<Choice>) getObject(Choice.class, KEY_CHOICE_SET);
+ }
+ /**
+ * Sets a Choice Set that is an Array of one or more elements
+ *
+ * @param choiceSet
+ * a List<Choice> representing the array of one or more
+ * elements
+ *
+ * <b>Notes: </b>Min Value: 1; Max Value: 100
+ */
+ public void setChoiceSet( @NonNull List<Choice> choiceSet ) {
+ setParameters(KEY_CHOICE_SET, choiceSet);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSetResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSetResponse.java
new file mode 100644
index 000000000..db368bb61
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateInteractionChoiceSetResponse.java
@@ -0,0 +1,39 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Create Interaction ChoiceSet Response is sent, when CreateInteractionChoiceSet
+ * has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class CreateInteractionChoiceSetResponse extends RPCResponse {
+ /**
+ * Constructs a new CreateInteractionChoiceSetResponse object
+ */
+
+ public CreateInteractionChoiceSetResponse() {
+ super(FunctionID.CREATE_INTERACTION_CHOICE_SET.toString());
+ }
+ public CreateInteractionChoiceSetResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new CreateInteractionChoiceSetResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public CreateInteractionChoiceSetResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DIDResult.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DIDResult.java
new file mode 100644
index 000000000..b739e8789
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DIDResult.java
@@ -0,0 +1,86 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataResultCode;
+/** Individual requested DID result and data.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th> Additional</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>resultCode</td>
+ * <td>VehicleDataResultCode</td>
+ * <td>true</td>
+ * <td></td>
+ * <td>Individual DID result code </td>
+ * </tr>
+ * <tr>
+ * <td>didLocation</td>
+ * <td>Integer</td>
+ * <td>true</td>
+ * <td>minvalue = 0 maxvalue = 65535 </td>
+ * <td>The address of DID location from the ReadDID request.</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>data</td>
+ * <td>String</td>
+ * <td>false</td>
+ * <td>maxlength = 5000 </td>
+ * <td>The DID data which is the hex byte string of however many bytes are stored at that location</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ *
+ * @see VehicleDataResultCode
+ * @see ReadDID
+ */
+
+public class DIDResult extends RPCStruct {
+ public static final String KEY_RESULT_CODE = "resultCode";
+ public static final String KEY_DATA = "data";
+ public static final String KEY_DID_LOCATION = "didLocation";
+ /** <p>Constructs a new DIDResult object indicated by the Hashtable
+ * parameter</p>
+ * @param hash
+ * The hash table to use
+ */
+
+ public DIDResult() {}
+ public DIDResult(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public DIDResult(@NonNull VehicleDataResultCode resultCode, @NonNull Integer didLocation) {
+ this();
+ setResultCode(resultCode);
+ setDidLocation(didLocation);
+ }
+ public void setResultCode(@NonNull VehicleDataResultCode resultCode) {
+ setValue(KEY_RESULT_CODE, resultCode);
+ }
+ public VehicleDataResultCode getResultCode() {
+ return (VehicleDataResultCode) getObject(VehicleDataResultCode.class, KEY_RESULT_CODE);
+ }
+ public void setDidLocation(@NonNull Integer didLocation) {
+ setValue(KEY_DID_LOCATION, didLocation);
+ }
+ public Integer getDidLocation() {
+ return getInteger(KEY_DID_LOCATION);
+ }
+ public void setData(String data) {
+ setValue(KEY_DATA, data);
+ }
+ public String getData() {
+ return getString(KEY_DATA);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DTC.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DTC.java
new file mode 100644
index 000000000..57595672e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DTC.java
@@ -0,0 +1,77 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * String containing hexadecimal identifier as well as other common names.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>statusByte</td>
+ * <td>String</td>
+ * <td>Hexadecimal byte string
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class DTC extends RPCStruct {
+ public static final String KEY_IDENTIFIER = "identifier";
+ public static final String KEY_STATUS_BYTE = "statusByte";
+ /**
+ * Constructs a newly allocated DTC object
+ */
+ public DTC() { }
+
+ /**
+ * Constructs a newly allocated DTC object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public DTC(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * set identifier
+ * @param identifier
+ */
+ public void setIdentifier(String identifier) {
+ setValue(KEY_IDENTIFIER, identifier);
+ }
+
+ /**
+ * get identifier
+ * @return identifier
+ */
+ public String getIdentifier() {
+ return getString(KEY_IDENTIFIER);
+ }
+
+ /**
+ * set Hexadecimal byte string
+ * @param statusByte Hexadecimal byte string
+ */
+ public void setStatusByte(String statusByte) {
+ setValue(KEY_STATUS_BYTE, statusByte);
+ }
+
+ /**
+ * get Hexadecimal byte string
+ * @return Hexadecimal byte string
+ */
+ public String getStatusByte() {
+ return getString(KEY_STATUS_BYTE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DateTime.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DateTime.java
new file mode 100644
index 000000000..1c3af0e88
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DateTime.java
@@ -0,0 +1,215 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class DateTime extends RPCStruct{
+ public static final String KEY_MILLISECOND = "millisecond";
+ public static final String KEY_SECOND = "second";
+ public static final String KEY_MINUTE = "minute";
+ public static final String KEY_HOUR = "hour";
+ public static final String KEY_DAY = "day";
+ public static final String KEY_MONTH = "month";
+ public static final String KEY_YEAR = "year";
+ public static final String KEY_TZ_HOUR = "tz_hour";
+ public static final String KEY_TZ_MINUTE = "tz_minute";
+
+ public DateTime() {
+ }
+
+ public DateTime(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+
+ /**
+ * Gets the Milliseconds portion of the DateTime class
+ *
+ * @return Integer - Milliseconds associated with this DateTime class
+ *
+ */
+ public Integer getMilliSecond() {
+ return getInteger(KEY_MILLISECOND);
+ }
+
+ /**
+ * Sets the Milliseconds portion of the DateTime class
+ *
+ * @param milliSecond
+ * The milliseconds associated with this DateTime class
+ *
+ */
+ public void setMilliSecond(Integer milliSecond) {
+ setValue(KEY_MILLISECOND, milliSecond);
+ }
+
+
+ /**
+ * Gets the Seconds portion of the DateTime class
+ *
+ * @return Integer - Seconds associated with this DateTime class
+ *
+ */
+ public Integer getSecond() {
+ return getInteger(KEY_SECOND);
+ }
+
+ /**
+ * Sets the Seconds portion of the DateTime class
+ *
+ * @param second
+ * The Seconds associated with this DateTime class
+ *
+ */
+ public void setSecond(Integer second) {
+ setValue(KEY_SECOND, second);
+ }
+
+
+ /**
+ * Gets the Minutes portion of the DateTime class
+ *
+ * @return Integer - Minutes associated with this DateTime class
+ *
+ */
+ public Integer getMinute() {
+ return getInteger(KEY_MINUTE);
+ }
+
+ /**
+ * Sets the Minutes portion of the DateTime class
+ *
+ * @param minute
+ * The Minutes associated with this DateTime class
+ *
+ */
+ public void setMinute(Integer minute) {
+ setValue(KEY_MINUTE, minute);
+ }
+
+ /**
+ * Gets the Hours portion of the DateTime class.
+ *
+ * @return Integer - Hours associated with this DateTime class.
+ *
+ */
+ public Integer getHour() {
+ return getInteger(KEY_HOUR);
+ }
+
+ /**
+ * Sets the Hours portion of the DateTime class.
+ *
+ * @param hour
+ * The Hours associated with this DateTime class. This structure is used to store hours in a 24 hour format.
+ *
+ */
+ public void setHour(Integer hour) {
+ setValue(KEY_HOUR, hour);
+ }
+
+ /**
+ * Gets the Day portion of the DateTime class.
+ *
+ * @return Integer - Day of the month associated with this DateTime class
+ *
+ */
+ public Integer getDay() {
+ return getInteger(KEY_DAY);
+ }
+
+ /**
+ * Sets the Day portion of the DateTime class
+ *
+ * @param day
+ * The Day of the month associated with this DateTime class
+ *
+ */
+ public void setDay(Integer day) {
+ setValue(KEY_DAY, day);
+ }
+
+ /**
+ * Gets the Month portion of the DateTime class.
+ *
+ * @return Integer - Month of the year associated with this DateTime class
+ *
+ */
+ public Integer getMonth() {
+ return getInteger(KEY_MONTH);
+ }
+
+ /**
+ * Sets the Month portion of the DateTime class
+ *
+ * @param month
+ * The Month of the year associate with this DateTime class
+ *
+ */
+ public void setMonth(Integer month) {
+ setValue(KEY_MONTH, month);
+ }
+
+ /**
+ * Gets the Year portion of the DateTime class.
+ *
+ * @return Integer - The year in YYYY format associated with this DateTime class
+ *
+ */
+ public Integer getYear() {
+ return getInteger(KEY_YEAR);
+ }
+
+ /**
+ * Sets the Year portion of the DateTime class
+ *
+ * @param year
+ * The Year in YYYY format associated with this DateTime class
+ *
+ */
+ public void setYear(Integer year) {
+ setValue(KEY_YEAR, year);
+ }
+
+ /**
+ * Gets the Time Zone Hours portion of the DateTime class.
+ *
+ * @return Integer - The time zone offset in Hours with regard to UTC time associated with this DateTime class
+ *
+ */
+ public Integer getTzHour() {
+ return getInteger(KEY_TZ_HOUR);
+ }
+
+ /**
+ * Sets the Time Zone Hours portion of the DateTime class
+ *
+ * @param tzHour
+ * The time zone offset in Hours with regard to UTC time associated with this DateTime class
+ *
+ */
+ public void setTzHour(Integer tzHour) {
+ setValue(KEY_TZ_HOUR, tzHour);
+ }
+
+ /**
+ * Gets the Time Zone Minutes portion of the DateTime class.
+ *
+ * @return Integer - The time zone offset in minutes with regard to UTC associated with this DateTime class
+ *
+ */
+ public Integer getTzMinute() {
+ return getInteger(KEY_TZ_MINUTE);
+ }
+
+ /**
+ * Sets the Time Zone Minutes portion of the DateTime class
+ *
+ * @param tzMinute
+ * The time zone offset in Minutes with regard to UTC associated with this DateTime class
+ */
+ public void setTzMinute(Integer tzMinute) {
+ setValue(KEY_TZ_MINUTE, tzMinute);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommand.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommand.java
new file mode 100644
index 000000000..b08fa56c3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommand.java
@@ -0,0 +1,106 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Removes a command from the Command Menu.
+ *
+ * <p><b>HMI Status Requirements:</b></p>
+ * <p>HMILevel: FULL, LIMITED or BACKGROUND</p>
+ * AudioStreamingState: N/A
+ * <p>SystemContext: Should not be attempted when VRSESSION or MENU</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>cmdID</td>
+ * <td>Integer</td>
+ * <td>Unique ID that identifies the Command to be deleted from Command Menu</td>
+ * <td>Y</td>
+ * <td>Min Value: 0;Max Value: 2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ *<p><b> Response:</b></p>
+ *
+ * Indicates that the corresponding request either failed or succeeded. If the response returns with a SUCCESS result code,this means a command was removed from the Command Menu successfully.
+ *
+ *<p><b> Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p> INVALID_ID</p>
+ * <p> IN_USER</p>
+ * @since SmartDeviceLink 1.0
+ * @see AddCommand
+ * @see AddSubMenu
+ * @see DeleteSubMenu
+ */
+public class DeleteCommand extends RPCRequest {
+ public static final String KEY_CMD_ID = "cmdID";
+
+ /**
+ * Constructs a new DeleteCommand object
+ */
+ public DeleteCommand() {
+ super(FunctionID.DELETE_COMMAND.toString());
+ }
+ /**
+ * Constructs a new DeleteCommand object indicated by the Hashtable
+ * parameter
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public DeleteCommand(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteCommand object
+ * @param cmdID: an Integer value representing Command ID
+ */
+ public DeleteCommand(@NonNull Integer cmdID) {
+ this();
+ setCmdID(cmdID);
+ }
+ /**
+ * Gets the Command ID that identifies the Command to be deleted from
+ * Command Menu
+ *
+ * @return Integer - Integer value representing Command ID that identifies
+ * the Command to be deleted from Command Menu
+ */
+ public Integer getCmdID() {
+ return getInteger( KEY_CMD_ID );
+ }
+ /**
+ * Sets the Command ID that identifies the Command to be deleted from Command Menu
+ *
+ * @param cmdID
+ * an Integer value representing Command ID
+ *
+ * <p><b>Notes: </b>Min Value: 0; Max Value: 2000000000</p>
+ */
+ public void setCmdID( @NonNull Integer cmdID ) {
+ setParameters(KEY_CMD_ID, cmdID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommandResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommandResponse.java
new file mode 100644
index 000000000..c6b5c994c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteCommandResponse.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Delete Command Response is sent, when DeleteCommand has been called.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class DeleteCommandResponse extends RPCResponse {
+ /** Constructs a new DeleteCommandResponse object
+ *
+ */
+
+ public DeleteCommandResponse() {
+ super(FunctionID.DELETE_COMMAND.toString());
+ }
+ public DeleteCommandResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteCommandResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DeleteCommandResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFile.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFile.java
new file mode 100644
index 000000000..c9a0e76c7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFile.java
@@ -0,0 +1,93 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Used to delete a file resident on the SDL module in the app's local cache.
+ * Not supported on first generation SDL vehicles
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink 2.0</th>
+ * </tr>
+ * <tr>
+ * <td>SDLFileName</td>
+ * <td>String</td>
+ * <td> File reference name.</td>
+ * <td>Y</td>
+ * <td>maxlength:500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p><b>Response </b></p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p> SUCCESS</p>
+ * <p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * @since SmartDeviceLink 2.0
+ * @see PutFile
+ * @see ListFiles
+ */
+public class DeleteFile extends RPCRequest {
+ public static final String KEY_SDL_FILE_NAME = "syncFileName";
+
+ /**
+ * Constructs a new DeleteFile object
+ */
+ public DeleteFile() {
+ super(FunctionID.DELETE_FILE.toString());
+ }
+
+ /**
+ * <p>Constructs a new DeleteFile object indicated by the Hashtable parameter</p>
+ * @param hash The Hashtable to use
+ */
+ public DeleteFile(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new DeleteFile object
+ * @param sdlFileName a String value representing a file reference name
+ */
+ public DeleteFile(@NonNull String sdlFileName) {
+ this();
+ setSdlFileName(sdlFileName);
+ }
+
+ /**
+ * Sets a file reference name
+ *
+ * @param sdlFileName
+ * a String value representing a file reference name
+ */
+ public void setSdlFileName(@NonNull String sdlFileName) {
+ setParameters(KEY_SDL_FILE_NAME, sdlFileName);
+ }
+
+ /**
+ * Gets a file reference name
+ *
+ * @return String -a String value representing a file reference name
+ */
+ public String getSdlFileName() {
+ return getString(KEY_SDL_FILE_NAME);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFileResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFileResponse.java
new file mode 100644
index 000000000..918ca7fce
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteFileResponse.java
@@ -0,0 +1,86 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.util.Version;
+
+import java.util.Hashtable;
+
+/**
+ * Delete File Response is sent, when DeleteFile has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class DeleteFileResponse extends RPCResponse {
+ public static final String KEY_SPACE_AVAILABLE = "spaceAvailable";
+ private static final Integer MAX_VALUE = 2000000000;
+
+ /**
+ * Constructs a new DeleteFileResponse object
+ */
+ public DeleteFileResponse() {
+ super(FunctionID.DELETE_FILE.toString());
+ }
+
+ public DeleteFileResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * @deprecated use {@link DeleteFileResponse#DeleteFileResponse(Boolean, Result)} instead <br>
+ *
+ * Constructs a new DeleteFileResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ * @param spaceAvailable the total local space available on the module for the registered app.
+ */
+ @Deprecated
+ public DeleteFileResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull Integer spaceAvailable) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ setSpaceAvailable(spaceAvailable);
+ }
+
+ /**
+ * Constructs a new DeleteFileResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DeleteFileResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ /**
+ * SpaceAvailable became optional as of RPC Spec 5.0. If a system that expected the value to
+ * always have a value connects to such a system, it could return null. Check to see if there
+ * is a value, and if not, set it to MAX_VALUE as defined by the RPC Spec
+ *
+ * @param rpcVersion the rpc spec version that has been negotiated. If value is null the
+ * the max value of RPC spec version this library supports should be used.
+ * @param formatParams if true, the format method will be called on subsequent params
+ */
+ @Override
+ public void format(Version rpcVersion, boolean formatParams){
+ if (rpcVersion == null || rpcVersion.getMajor() >= 5){
+ if (getSpaceAvailable() == null){
+ setSpaceAvailable(MAX_VALUE);
+ }
+ }
+ super.format(rpcVersion, formatParams);
+ }
+
+ public void setSpaceAvailable(Integer spaceAvailable) {
+ setParameters(KEY_SPACE_AVAILABLE, spaceAvailable);
+ }
+
+ public Integer getSpaceAvailable() {
+ return getInteger(KEY_SPACE_AVAILABLE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSet.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSet.java
new file mode 100644
index 000000000..741675419
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSet.java
@@ -0,0 +1,107 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Deletes an existing Choice Set identified by the parameter
+ * interactionChoiceSetID. If the specified interactionChoiceSetID is currently
+ * in use by an active <i> {@linkplain PerformInteraction}</i> this call to
+ * delete the Choice Set will fail returning an IN_USE resultCode
+ *
+ * <p>Function Group: Base</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUD</b></p>
+ *
+ * <p>AudioStreamingState: Any</p>
+ *
+ * <p>SystemContext: MAIN, MENU, VR </p>
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>interactionChoiceSetID</td>
+ * <td>Integer</td>
+ * <td> A unique ID that identifies the Choice Set (specified in a previous call to CreateInteractionChoiceSet)</td>
+ * <td>Y</td>
+ * <td>Min Value: 0 ; Max Value: 2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p><b>Response </b></p>
+ *
+ * If a resultCode of "SUCCESS" is returned, the requested choice set has been created and can now be referenced by the application using the value of interactionChoiceSetID provided by the application.
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p>INVALID_ID</p>
+
+ * @since SmartDeviceLink 1.0
+ * @see CreateInteractionChoiceSet
+ * @see PerformInteraction
+ */
+public class DeleteInteractionChoiceSet extends RPCRequest {
+ public static final String KEY_INTERACTION_CHOICE_SET_ID = "interactionChoiceSetID";
+
+ /**
+ * Constructs a new DeleteInteractionChoiceSet object
+ */
+ public DeleteInteractionChoiceSet() {
+ super(FunctionID.DELETE_INTERACTION_CHOICE_SET.toString());
+ }
+ /**
+ * <p>Constructs a new DeleteInteractionChoiceSet object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public DeleteInteractionChoiceSet(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteInteractionChoiceSet object
+ * @param interactionChoiceSetID a unique ID that identifies the Choice Set
+ * <p><b>Notes: </b>Min Value: 0; Max Value: 2000000000 </p>
+ */
+ public DeleteInteractionChoiceSet(@NonNull Integer interactionChoiceSetID) {
+ this();
+ setInteractionChoiceSetID(interactionChoiceSetID);
+ }
+ /**
+ * Gets a unique ID that identifies the Choice Set
+ * @return Integer -an Integer value representing the unique Choice Set ID
+ */
+ public Integer getInteractionChoiceSetID() {
+ return getInteger( KEY_INTERACTION_CHOICE_SET_ID );
+ }
+ /**
+ * Sets a unique ID that identifies the Choice Set
+ * @param interactionChoiceSetID a unique ID that identifies the Choice Set
+ * <p><b>Notes: </b>Min Value: 0; Max Value: 2000000000 </p>
+ */
+ public void setInteractionChoiceSetID( @NonNull Integer interactionChoiceSetID ) {
+ setParameters(KEY_INTERACTION_CHOICE_SET_ID, interactionChoiceSetID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSetResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSetResponse.java
new file mode 100644
index 000000000..d122975a0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteInteractionChoiceSetResponse.java
@@ -0,0 +1,34 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Delete Interaction ChoiceSet Response is sent, when DeleteInteractionChoiceSet has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class DeleteInteractionChoiceSetResponse extends RPCResponse {
+
+ public DeleteInteractionChoiceSetResponse() {
+ super(FunctionID.DELETE_INTERACTION_CHOICE_SET.toString());
+ }
+ public DeleteInteractionChoiceSetResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteInteractionChoiceSetResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DeleteInteractionChoiceSetResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenu.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenu.java
new file mode 100644
index 000000000..97c4042e3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenu.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Deletes a submenu from the Command Menu.
+ *
+ * <p><b>Notes: </b>When an app deletes a submenu that has child commands, those
+ * child commands are also deleted</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>menuID</td>
+ * <td>Integer</td>
+ * <td>Unique ID that identifies the SubMenu to be delete</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value: 2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ *<p> <b>Response </b></p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ *<p>SUCCESS</p>
+ *<p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ * <p> INVALID_ID</p>
+ * <p> IN_USE </p>
+ *
+ * @since SmartDeviceLink 1.0
+ * @see AddCommand
+ * @see AddSubMenu
+ * @see DeleteCommand
+ */
+public class DeleteSubMenu extends RPCRequest {
+ public static final String KEY_MENU_ID = "menuID";
+ /**
+ * Constructs a new DeleteSubMenu object
+ */
+ public DeleteSubMenu() {
+ super(FunctionID.DELETE_SUB_MENU.toString());
+ }
+ /**
+ * Constructs a new DeleteSubMenu object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public DeleteSubMenu(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteSubMenu object
+ * @param menuID an Integer value representing menuID that identifies the SubMenu to be delete
+ *
+ * <p><b>Notes: </b>Min Value: 0; Max Value: 2000000000</p>
+ */
+ public DeleteSubMenu(@NonNull Integer menuID) {
+ this();
+ setMenuID(menuID);
+ }
+ /**
+ * Gets the Menu ID that identifies the SubMenu to be delete
+ * @return Integer -an Integer value representing menuID that identifies the SubMenu to be delete
+ */
+ public Integer getMenuID() {
+ return getInteger( KEY_MENU_ID );
+ }
+ /**
+ * Sets the MenuID that identifies the SubMenu to be delete
+ * @param menuID an Integer value representing menuID that identifies the SubMenu to be delete
+ *
+ * <p><b>Notes: </b>Min Value: 0; Max Value: 2000000000</p>
+ */
+ public void setMenuID( @NonNull Integer menuID ) {
+ setParameters(KEY_MENU_ID, menuID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenuResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenuResponse.java
new file mode 100644
index 000000000..d13c850df
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteSubMenuResponse.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Delete SubMenu Response is sent, when DeleteSubMenu has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class DeleteSubMenuResponse extends RPCResponse {
+ /**
+ * Constructs a new DeleteSubMenuResponse object
+ */
+
+ public DeleteSubMenuResponse() {
+ super(FunctionID.DELETE_SUB_MENU.toString());
+ }
+ public DeleteSubMenuResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DeleteSubMenuResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DeleteSubMenuResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceInfo.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceInfo.java
new file mode 100644
index 000000000..485d859b7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceInfo.java
@@ -0,0 +1,145 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+/**
+ * Various information about connecting device.
+ *
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>hardware</td>
+ * <td>String</td>
+ * <td>Device model</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>firmwareRev</td>
+ * <td>String</td>
+ * <td>Device firmware revision</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>os</td>
+ * <td>String</td>
+ * <td>Device OS version</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>osVersion</td>
+ * <td>String</td>
+ * <td>Device OS version</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>carrier</td>
+ * <td>String</td>
+ * <td>Device mobile carrier (if applicable)</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>maxNumberRFCOMMPorts</td>
+ * <td>Integer</td>
+ * <td>Omitted if connected not via BT.</td>
+ * <td>N</td>
+ * <td>Min Value: 0; Max Value: 100</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ *
+ */
+public class DeviceInfo extends RPCStruct{
+ public static final String KEY_HARDWARE = "hardware";
+ public static final String KEY_FIRMWARE_REV = "firmwareRev";
+ public static final String KEY_OS = "os";
+ public static final String KEY_OS_VERSION = "osVersion";
+ public static final String KEY_CARRIER = "carrier";
+ public static final String KEY_MAX_NUMBER_RFCOMM_PORTS = "maxNumberRFCOMMPorts";
+ public static final String DEVICE_OS = "Android";
+
+ /** Constructs a new DeviceInfo object indicated by the Hashtable
+ * parameter
+ * @param hash
+ *
+ * The hash table to use
+ *
+ *
+ */
+
+ public DeviceInfo() { }
+
+ public DeviceInfo(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setHardware(String hardware) {
+ setValue(KEY_HARDWARE, hardware);
+ }
+
+ public String getHardware() {
+ return getString(KEY_HARDWARE);
+ }
+
+ public void setFirmwareRev(String firmwareRev) {
+ setValue(KEY_FIRMWARE_REV, firmwareRev);
+ }
+
+ public String getFirmwareRev() {
+ return getString(KEY_FIRMWARE_REV);
+ }
+
+ public void setOs(String os) {
+ setValue(KEY_OS, os);
+ }
+
+ public String getOs() {
+ return getString(KEY_OS);
+ }
+
+ public void setOsVersion(String osVersion) {
+ setValue(KEY_OS_VERSION, osVersion);
+}
+
+public String getOsVersion() {
+ return getString(KEY_OS_VERSION);
+}
+
+public void setCarrier(String carrier) {
+ setValue(KEY_CARRIER, carrier);
+}
+
+public String getCarrier() {
+ return getString(KEY_CARRIER);
+}
+
+public Integer getMaxNumberRFCOMMPorts() {
+ return getInteger( KEY_MAX_NUMBER_RFCOMM_PORTS );
+}
+
+public void setMaxNumberRFCOMMPorts( Integer maxNumberRFCOMMPorts ) {
+ setValue(KEY_MAX_NUMBER_RFCOMM_PORTS, maxNumberRFCOMMPorts);
+}
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceStatus.java
new file mode 100644
index 000000000..40382b81a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeviceStatus.java
@@ -0,0 +1,322 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.DeviceLevelStatus;
+import com.smartdevicelink.proxy.rpc.enums.PrimaryAudioSource;
+
+import java.util.Hashtable;
+
+/**
+ * Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>voiceRecOn</td>
+ * <td>Boolean</td>
+ * <td>Voice recognition is on
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>btIconOn</td>
+ * <td>Boolean</td>
+ * <td>Bluetooth connection established
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>callActive</td>
+ * <td>Boolean</td>
+ * <td>A call is being active
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>phoneRoaming</td>
+ * <td>Boolean</td>
+ * <td>The phone is in roaming mode
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>textMsgAvailable</td>
+ * <td>Boolean</td>
+ * <td>A textmessage is available
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>battLevelStatus</td>
+ * <td>DeviceLevelStatus</td>
+ * <td>Battery level status
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>stereoAudioOutputMuted</td>
+ * <td>Boolean</td>
+ * <td>Status of the stereo audio output channel
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>monoAudioOutputMuted</td>
+ * <td>Boolean</td>
+ * <td>Status of the mono audio output channel
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>signalLevelStatus</td>
+ * <td>DeviceLevelStatus</td>
+ * <td>Signal level status
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>primaryAudioSource</td>
+ * <td>PrimaryAudioSource</td>
+ * <td>Reflects the current primary audio source of SDL (if selected).
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>eCallEventActive</td>
+ * <td>Boolean</td>
+ * <td>Reflects, if an eCall event is active
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ *
+ * @see DeviceLevelStatus
+ * @see GetVehicleData
+ * @see OnVehicleData
+ *
+ */
+public class DeviceStatus extends RPCStruct {
+ public static final String KEY_VOICE_REC_ON = "voiceRecOn";
+ public static final String KEY_BT_ICON_ON = "btIconOn";
+ public static final String KEY_CALL_ACTIVE = "callActive";
+ public static final String KEY_PHONE_ROAMING = "phoneRoaming";
+ public static final String KEY_TEXT_MSG_AVAILABLE = "textMsgAvailable";
+ public static final String KEY_BATT_LEVEL_STATUS = "battLevelStatus";
+ public static final String KEY_STEREO_AUDIO_OUTPUT_MUTED = "stereoAudioOutputMuted";
+ public static final String KEY_MONO_AUDIO_OUTPUT_MUTED = "monoAudioOutputMuted";
+ public static final String KEY_SIGNAL_LEVEL_STATUS = "signalLevelStatus";
+ public static final String KEY_PRIMARY_AUDIO_SOURCE = "primaryAudioSource";
+ public static final String KEY_E_CALL_EVENT_ACTIVE = "eCallEventActive";
+
+ /**
+ * Constructs a newly allocated DeviceStatus object
+ */
+ public DeviceStatus() {}
+
+ /**
+ * Constructs a newly allocated DeviceStatus object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public DeviceStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated DeviceStatus object
+ * @param voiceRecOn
+ * @param btIconOn the bluetooth connection established
+ * @param callActive a call is being active
+ * @param phoneRoaming the phone is in roaming mode
+ * @param textMsgAvailable a textmessage is available
+ * @param battLevelStatus battery level status
+ * @param stereoAudioOutputMuted the status of the stereo audio output channel
+ * @param monoAudioOutputMuted the status of the mono audio output channel
+ * @param signalLevelStatus signal level status
+ * @param primaryAudioSource the current primary audio source of SDL (if selected
+ * @param eCallEventActive
+ */
+ public DeviceStatus(@NonNull Boolean voiceRecOn, @NonNull Boolean btIconOn, @NonNull Boolean callActive, @NonNull Boolean phoneRoaming, @NonNull Boolean textMsgAvailable, @NonNull DeviceLevelStatus battLevelStatus,
+ @NonNull Boolean stereoAudioOutputMuted, @NonNull Boolean monoAudioOutputMuted, @NonNull DeviceLevelStatus signalLevelStatus, @NonNull PrimaryAudioSource primaryAudioSource, @NonNull Boolean eCallEventActive) {
+ this();
+ setVoiceRecOn(voiceRecOn);
+ setBtIconOn(btIconOn);
+ setCallActive(callActive);
+ setPhoneRoaming(phoneRoaming);
+ setTextMsgAvailable(textMsgAvailable);
+ setBattLevelStatus(battLevelStatus);
+ setStereoAudioOutputMuted(stereoAudioOutputMuted);
+ setMonoAudioOutputMuted(monoAudioOutputMuted);
+ setSignalLevelStatus(signalLevelStatus);
+ setPrimaryAudioSource(primaryAudioSource);
+ setECallEventActive(eCallEventActive);
+ }
+
+ /**
+ * set the voice recognition on or off
+ * @param voiceRecOn
+ */
+ public void setVoiceRecOn(@NonNull Boolean voiceRecOn) {
+ setValue(KEY_VOICE_REC_ON, voiceRecOn);
+ }
+
+ /**
+ * get whether the voice recognition is on
+ * @return whether the voice recognition is on
+ */
+ public Boolean getVoiceRecOn() {
+ return getBoolean(KEY_VOICE_REC_ON);
+ }
+
+ /**
+ * set the bluetooth connection established
+ * @param btIconOn the bluetooth connection established
+ */
+ public void setBtIconOn(@NonNull Boolean btIconOn) {
+ setValue(KEY_BT_ICON_ON, btIconOn);
+ }
+
+ /**
+ * get the bluetooth connection established
+ * @return the bluetooth connection established
+ */
+ public Boolean getBtIconOn() {
+ return getBoolean(KEY_BT_ICON_ON);
+ }
+
+ /**
+ * set a call is being active
+ * @param callActive a call is being active
+ */
+ public void setCallActive(@NonNull Boolean callActive) {
+ setValue(KEY_CALL_ACTIVE, callActive);
+ }
+
+ /**
+ * get a call is being active
+ * @return a call is being active
+ */
+ public Boolean getCallActive() {
+ return getBoolean(KEY_CALL_ACTIVE);
+ }
+
+ /**
+ * set the phone is in roaming mode
+ * @param phoneRoaming the phone is in roaming mode
+ */
+ public void setPhoneRoaming(@NonNull Boolean phoneRoaming) {
+ setValue(KEY_PHONE_ROAMING, phoneRoaming);
+ }
+
+ /**
+ * get the phone is in roaming mode
+ * @return the phone is in roaming mode
+ */
+ public Boolean getPhoneRoaming() {
+ return getBoolean(KEY_PHONE_ROAMING);
+ }
+ public void setTextMsgAvailable(@NonNull Boolean textMsgAvailable) {
+ setValue(KEY_TEXT_MSG_AVAILABLE, textMsgAvailable);
+ }
+
+ /**
+ * get a textmessage is available
+ * @return a textmessage is available
+ */
+ public Boolean getTextMsgAvailable() {
+ return getBoolean(KEY_TEXT_MSG_AVAILABLE);
+ }
+
+ /**
+ * set battery level status
+ * @param battLevelStatus battery level status
+ */
+ public void setBattLevelStatus(@NonNull DeviceLevelStatus battLevelStatus) {
+ setValue(KEY_BATT_LEVEL_STATUS, battLevelStatus);
+ }
+
+ /**
+ * get battery level status
+ * @return battery level status
+ */
+ public DeviceLevelStatus getBattLevelStatus() {
+ return (DeviceLevelStatus) getObject(DeviceLevelStatus.class, KEY_BATT_LEVEL_STATUS);
+ }
+
+ /**
+ * set the status of the stereo audio output channel
+ * @param stereoAudioOutputMuted the status of the stereo audio output channel
+ */
+ public void setStereoAudioOutputMuted(@NonNull Boolean stereoAudioOutputMuted) {
+ setValue(KEY_STEREO_AUDIO_OUTPUT_MUTED, stereoAudioOutputMuted);
+ }
+
+ /**
+ * get the status of the stereo audio output channel
+ * @return the status of the stereo audio output channel
+ */
+ public Boolean getStereoAudioOutputMuted() {
+ return getBoolean(KEY_STEREO_AUDIO_OUTPUT_MUTED);
+ }
+
+ /**
+ * set the status of the mono audio output channel
+ * @param monoAudioOutputMuted the status of the mono audio output channel
+ */
+ public void setMonoAudioOutputMuted(@NonNull Boolean monoAudioOutputMuted) {
+ setValue(KEY_MONO_AUDIO_OUTPUT_MUTED, monoAudioOutputMuted);
+ }
+
+ /**
+ * get the status of the mono audio output channel
+ * @return the status of the mono audio output channel
+ */
+ public Boolean getMonoAudioOutputMuted() {
+ return getBoolean(KEY_MONO_AUDIO_OUTPUT_MUTED);
+ }
+
+ /**
+ * set signal level status
+ * @param signalLevelStatus signal level status
+ */
+ public void setSignalLevelStatus(@NonNull DeviceLevelStatus signalLevelStatus) {
+ setValue(KEY_SIGNAL_LEVEL_STATUS, signalLevelStatus);
+ }
+
+ /**
+ * get signal level status
+ * @return signal level status
+ */
+ public DeviceLevelStatus getSignalLevelStatus() {
+ return (DeviceLevelStatus) getObject(DeviceLevelStatus.class, KEY_SIGNAL_LEVEL_STATUS);
+ }
+
+ /**
+ * set the current primary audio source of SDL (if selected).
+ * @param primaryAudioSource the current primary audio source of SDL (if selected).
+ */
+ public void setPrimaryAudioSource(@NonNull PrimaryAudioSource primaryAudioSource) {
+ setValue(KEY_PRIMARY_AUDIO_SOURCE, primaryAudioSource);
+ }
+
+ /**
+ * get the current primary audio source of SDL (if selected).
+ * @return the current primary audio source of SDL (if selected).
+ */
+ public PrimaryAudioSource getPrimaryAudioSource() {
+ return (PrimaryAudioSource) getObject(PrimaryAudioSource.class, KEY_PRIMARY_AUDIO_SOURCE);
+ }
+ public void setECallEventActive(@NonNull Boolean eCallEventActive) {
+ setValue(KEY_E_CALL_EVENT_ACTIVE, eCallEventActive);
+ }
+ public Boolean getECallEventActive() {
+ return getBoolean(KEY_E_CALL_EVENT_ACTIVE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessage.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessage.java
new file mode 100644
index 000000000..3d40ba31d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessage.java
@@ -0,0 +1,126 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/** Non periodic vehicle diagnostic request.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>targetID</td>
+ * <td>Integer</td>
+ * <td>Name of target ECU.</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value: 65535</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>messageLength</td>
+ * <td>Integer</td>
+ * <td>Length of message (in bytes).</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value:65535</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>messageData</td>
+ * <td>Integer</td>
+ * <td>Array of bytes comprising CAN message.</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value:255; Min Size:1; Max Size:65535</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ * <p><b>HMI must:</b> </p>
+ *
+ * <p>1. Check the requested data using provided information of targetID (name of ECU),messageLength and messageData.</p>
+ * <p> 2. Respond with one of the appropriate result codes.And in case of SUCCESS return messageDataResult which is an array of bytes comprising CAN message result.</p>
+ * @since SmartDeviceLink 3.0
+ *
+ */
+
+public class DiagnosticMessage extends RPCRequest {
+ public static final String KEY_TARGET_ID = "targetID";
+ public static final String KEY_MESSAGE_LENGTH = "messageLength";
+ public static final String KEY_MESSAGE_DATA = "messageData";
+ /**
+ * Constructs a new DiagnosticMessage object
+ */
+
+ public DiagnosticMessage() {
+ super(FunctionID.DIAGNOSTIC_MESSAGE.toString());
+ }
+ /**
+ * <p>
+ * Constructs a new DiagnosticMessage object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public DiagnosticMessage(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /** Sets TargetID
+ *
+ * @param targetID
+ */
+
+
+ /**
+ * Constructs a new DiagnosticMessage object
+ */
+ public DiagnosticMessage(@NonNull Integer targetID, @NonNull Integer messageLength, @NonNull List<Integer> messageData) {
+ this();
+ setTargetID(targetID);
+ setMessageLength(messageLength);
+ setMessageData(messageData);
+ }
+
+ public void setTargetID(@NonNull Integer targetID) {
+ setParameters(KEY_TARGET_ID, targetID);
+ }
+ /**
+ * <p>
+ * Returns an <i>Integer</i> object representing the Target ID that you want to add
+ * </p>
+ *
+ * @return Integer -an integer representation a Unique Target ID
+ */
+
+ public Integer getTargetID() {
+ return getInteger(KEY_TARGET_ID);
+ }
+
+ public void setMessageLength(@NonNull Integer messageLength) {
+ setParameters(KEY_MESSAGE_LENGTH, messageLength);
+ }
+ public Integer getMessageLength() {
+ return getInteger(KEY_MESSAGE_LENGTH);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Integer> getMessageData() {
+ return (List<Integer>) getObject(Integer.class, KEY_MESSAGE_DATA);
+ }
+
+ public void setMessageData(@NonNull List<Integer> messageData) {
+ setParameters(KEY_MESSAGE_DATA, messageData);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessageResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessageResponse.java
new file mode 100644
index 000000000..096acbd50
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DiagnosticMessageResponse.java
@@ -0,0 +1,50 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Diagnostic Message Response is sent, when DiagnosticMessage has been called.
+ *
+ * @since SmartDeviceLink 3.0
+ */
+public class DiagnosticMessageResponse extends RPCResponse {
+ public static final String KEY_MESSAGE_DATA_RESULT = "messageDataResult";
+ /**
+ * Constructs a new DiagnosticMessageResponse object
+ */
+
+ public DiagnosticMessageResponse() {
+ super(FunctionID.DIAGNOSTIC_MESSAGE.toString());
+ }
+ public DiagnosticMessageResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new DiagnosticMessageResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DiagnosticMessageResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull List<Integer> messageDataResult) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ setMessageDataResult(messageDataResult);
+ }
+ @SuppressWarnings("unchecked")
+ public List<Integer> getMessageDataResult() {
+ return (List<Integer>) getObject(Integer.class, KEY_MESSAGE_DATA_RESULT);
+ }
+
+ public void setMessageDataResult(@NonNull List<Integer> messageDataResult) {
+ setParameters(KEY_MESSAGE_DATA_RESULT, messageDataResult);
+ }
+
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumber.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumber.java
new file mode 100644
index 000000000..4707efc86
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumber.java
@@ -0,0 +1,55 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Dials a phone number and switches to phone application.
+ *
+ * @since SmartDeviceLink 4.0
+ */
+public class DialNumber extends RPCRequest {
+ public static final String KEY_NUMBER = "number";
+
+
+ public DialNumber(){
+ super(FunctionID.DIAL_NUMBER.toString());
+ }
+
+ public DialNumber(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public DialNumber(@NonNull String number){
+ this();
+ setNumber(number);
+ }
+ /**
+ * Sets a number to dial
+ *
+ * @param number
+ * a phone number is a string, which can be up to 40 chars.
+ * <p>
+ * <b>Notes: </b>Maxlength=40</p>
+ * All characters shall be stripped from string except digits 0-9 and * # , ; +
+ */
+ public void setNumber(@NonNull String number) {
+ if (number != null) {
+ number = number.replaceAll("[^0-9*#,;+]", ""); //This will sanitize the input
+ }
+ setParameters(KEY_NUMBER, number);
+ }
+
+ /**
+ * Gets a number to dial
+ *
+ * @return String - a String value representing a number to dial
+ */
+ public String getNumber() {
+ return getString(KEY_NUMBER);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumberResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumberResponse.java
new file mode 100644
index 000000000..ff2cef3be
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DialNumberResponse.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Dial Number Response is sent, when DialNumber has been called
+ *
+ * @since SmartDeviceLink 4.0
+ */
+public class DialNumberResponse extends RPCResponse {
+
+ public DialNumberResponse() {
+ super(FunctionID.DIAL_NUMBER.toString());
+ }
+
+ public DialNumberResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new DialNumberResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public DialNumberResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapabilities.java
new file mode 100644
index 000000000..c8c761440
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapabilities.java
@@ -0,0 +1,232 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.DisplayType;
+import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Contains information about the display for the SDL system to which the application is currently connected.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * @Deprecated
+ * <td>displayType</td>
+ * <td>DisplayType</td>
+ * <td>The type of display
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>displayName</td>
+ * <td>String</td>
+ * <td>The name of the display
+ * </td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>textField</td>
+ * <td>TextField[]</td>
+ * <td>An array of TextField structures, each of which describes a field in the HMI which the application can write to using operations such as <i>{@linkplain Show}</i>, <i>{@linkplain SetMediaClockTimer}</i>, etc.
+ * This array of TextField structures identify all the text fields to which the application can write on the current display (identified by DisplayType ).
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>mediaClockFormats</td>
+ * <td>MediaClockFormat[]</td>
+ * <td>An array of MediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>graphicSupported</td>
+ * <td>Boolean</td>
+ * <td>The display's persistent screen supports referencing a static or dynamic image.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ * @see DisplayType
+ * @see MediaClockFormat
+ * @see TextFieldName
+ * @see ImageType
+ *
+ */
+public class DisplayCapabilities extends RPCStruct {
+ public static final String KEY_DISPLAY_TYPE = "displayType";
+ public static final String KEY_DISPLAY_NAME = "displayName";
+ public static final String KEY_MEDIA_CLOCK_FORMATS = "mediaClockFormats";
+ public static final String KEY_TEXT_FIELDS = "textFields";
+ public static final String KEY_IMAGE_FIELDS = "imageFields";
+ public static final String KEY_GRAPHIC_SUPPORTED = "graphicSupported";
+ public static final String KEY_SCREEN_PARAMS = "screenParams";
+ public static final String KEY_TEMPLATES_AVAILABLE = "templatesAvailable";
+ public static final String KEY_NUM_CUSTOM_PRESETS_AVAILABLE = "numCustomPresetsAvailable";
+ /**
+ * Constructs a newly allocated DisplayCapabilities object
+ */
+ public DisplayCapabilities() { }
+ /**
+ * Constructs a newly allocated DisplayCapabilities object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public DisplayCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated DisplayCapabilities object
+ * @param displayType the display type
+ * @param textFields the List of textFields
+ * @param mediaClockFormats the List of MediaClockFormat
+ * @param graphicSupported
+ */
+ @Deprecated
+ public DisplayCapabilities(@NonNull DisplayType displayType, @NonNull List<TextField> textFields, @NonNull List<MediaClockFormat> mediaClockFormats, @NonNull Boolean graphicSupported) {
+ this();
+ setDisplayType(displayType);
+ setTextFields(textFields);
+ setMediaClockFormats(mediaClockFormats);
+ setGraphicSupported(graphicSupported);
+ }
+ /**
+ * Constructs a newly allocated DisplayCapabilities object
+ * @param displayName the display name (String)
+ * @param textFields the List of textFields
+ * @param mediaClockFormats the List of MediaClockFormat
+ * @param graphicSupported
+ */
+ public DisplayCapabilities(String displayName, @NonNull List<TextField> textFields, @NonNull List<MediaClockFormat> mediaClockFormats, @NonNull Boolean graphicSupported) {
+ this();
+ setDisplayName(displayName);
+ setTextFields(textFields);
+ setMediaClockFormats(mediaClockFormats);
+ setGraphicSupported(graphicSupported);
+ }
+ /**
+ * Get the type of display
+ * @return the type of display
+ */
+ @Deprecated
+ public DisplayType getDisplayType() {
+ return (DisplayType) getObject(DisplayType.class, KEY_DISPLAY_TYPE);
+ }
+ /**
+ * Set the type of display
+ * @param displayType the display type
+ */
+ @Deprecated
+ public void setDisplayType( @NonNull DisplayType displayType ) {
+ setValue(KEY_DISPLAY_TYPE, displayType);
+ }
+ /** Get the name of the display
+ * @return the name of the display
+ */
+ public String getDisplayName() {
+ return getString(KEY_DISPLAY_NAME);
+ }
+ /**
+ * Set the name of the display
+ * @param displayName the name of the display
+ */
+ public void setDisplayName( String displayName ) {
+ setValue(KEY_DISPLAY_NAME, displayName);
+ }
+ /**
+ *Get an array of TextField structures, each of which describes a field in the HMI which the application can write to using operations such as <i>{@linkplain Show}</i>, <i>{@linkplain SetMediaClockTimer}</i>, etc.
+ * This array of TextField structures identify all the text fields to which the application can write on the current display (identified by DisplayType ).
+ * @return the List of textFields
+ */
+ @SuppressWarnings("unchecked")
+ public List<TextField> getTextFields() {
+ return (List<TextField>) getObject(TextField.class, KEY_TEXT_FIELDS);
+ }
+ /**
+ * Set an array of TextField structures, each of which describes a field in the HMI which the application can write to using operations such as <i>{@linkplain Show}</i>, <i>{@linkplain SetMediaClockTimer}</i>, etc.
+ * This array of TextField structures identify all the text fields to which the application can write on the current display (identified by DisplayType ).
+ * @param textFields the List of textFields
+ */
+ public void setTextFields( @NonNull List<TextField> textFields ) {
+ setValue(KEY_TEXT_FIELDS, textFields);
+ }
+
+
+
+ @SuppressWarnings("unchecked")
+ public List<ImageField> getImageFields() {
+ return (List<ImageField>) getObject(ImageField.class, KEY_IMAGE_FIELDS);
+ }
+
+ public void setImageFields( List<ImageField> imageFields ) {
+ setValue(KEY_IMAGE_FIELDS, imageFields);
+ }
+
+ public Integer getNumCustomPresetsAvailable() {
+ return getInteger(KEY_NUM_CUSTOM_PRESETS_AVAILABLE);
+ }
+
+ public void setNumCustomPresetsAvailable(Integer numCustomPresetsAvailable) {
+ setValue(KEY_NUM_CUSTOM_PRESETS_AVAILABLE, numCustomPresetsAvailable);
+ }
+
+ /**
+ * Get an array of MediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field
+ * @return the Veotor of mediaClockFormat
+ */
+ @SuppressWarnings("unchecked")
+ public List<MediaClockFormat> getMediaClockFormats() {
+ return (List<MediaClockFormat>) getObject(MediaClockFormat.class, KEY_MEDIA_CLOCK_FORMATS);
+ }
+ /**
+ * Set an array of MediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field
+ * @param mediaClockFormats the List of MediaClockFormat
+ */
+ public void setMediaClockFormats( @NonNull List<MediaClockFormat> mediaClockFormats ) {
+ setValue(KEY_MEDIA_CLOCK_FORMATS, mediaClockFormats);
+ }
+
+ /**
+ * set the display's persistent screen supports.
+ * @param graphicSupported
+ * @since SmartDeviceLink 2.0
+ */
+ public void setGraphicSupported(@NonNull Boolean graphicSupported) {
+ setValue(KEY_GRAPHIC_SUPPORTED, graphicSupported);
+ }
+
+ /**
+ * Get the display's persistent screen supports.
+ * @return Boolean get the value of graphicSupported
+ * @since SmartDeviceLink 2.0
+ */
+ public Boolean getGraphicSupported() {
+ return getBoolean(KEY_GRAPHIC_SUPPORTED);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getTemplatesAvailable() {
+ return (List<String>) getObject(String.class, KEY_TEMPLATES_AVAILABLE);
+ }
+
+ public void setTemplatesAvailable(List<String> templatesAvailable) {
+ setValue(KEY_TEMPLATES_AVAILABLE, templatesAvailable);
+ }
+
+ public void setScreenParams(ScreenParams screenParams) {
+ setValue(KEY_SCREEN_PARAMS, screenParams);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ScreenParams getScreenParams() {
+ return (ScreenParams) getObject(ScreenParams.class, KEY_SCREEN_PARAMS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ECallInfo.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ECallInfo.java
new file mode 100644
index 000000000..93a973aab
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ECallInfo.java
@@ -0,0 +1,99 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ECallConfirmationStatus;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataNotificationStatus;
+
+import java.util.Hashtable;
+
+/** Emergency Call notification and confirmation data.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>eCallNotificationStatus</td>
+ * <td>VehicleDataNotificationStatus</td>
+ * <td>References signal "eCallNotification_4A".</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>auxECallNotificationStatus</td>
+ * <td>VehicleDataNotificationStatus</td>
+ * <td>References signal "eCallNotification". This is an alternative signal available on some carlines replacing the eCallNotificationStatus, but showing the same values.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>eCallConfirmationStatus</td>
+ * <td>ECallConfirmationStatus</td>
+ * <td>References signal "eCallConfirmation"</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ * @see SubscribeVehicleData
+ *
+ *
+ * @see TextFieldName
+ * @see Image
+ *
+ */
+
+public class ECallInfo extends RPCStruct {
+ public static final String KEY_E_CALL_NOTIFICATION_STATUS = "eCallNotificationStatus";
+ public static final String KEY_AUX_E_CALL_NOTIFICATION_STATUS = "auxECallNotificationStatus";
+ public static final String KEY_E_CALL_CONFIRMATION_STATUS = "eCallConfirmationStatus";
+ /** Constructs a new ECallInfo object
+ */
+ public ECallInfo() { }
+ /** Constructs a new ECallInfo object indicated by the Hashtable
+ * parameter
+ * @param hash <p>The hash table to use</p>
+ */
+ public ECallInfo(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ECallInfo object
+ */
+ public ECallInfo(@NonNull VehicleDataNotificationStatus eCallNotificationStatus, @NonNull VehicleDataNotificationStatus auxECallNotificationStatus, @NonNull ECallConfirmationStatus eCallConfirmationStatus) {
+ this();
+ setECallNotificationStatus(eCallNotificationStatus);
+ setAuxECallNotificationStatus(auxECallNotificationStatus);
+ setECallConfirmationStatus(eCallConfirmationStatus);
+ }
+
+ public void setECallNotificationStatus(@NonNull VehicleDataNotificationStatus eCallNotificationStatus) {
+ setValue(KEY_E_CALL_NOTIFICATION_STATUS, eCallNotificationStatus);
+ }
+ public VehicleDataNotificationStatus getECallNotificationStatus() {
+ return (VehicleDataNotificationStatus) getObject(VehicleDataNotificationStatus.class, KEY_E_CALL_NOTIFICATION_STATUS);
+ }
+ public void setAuxECallNotificationStatus(@NonNull VehicleDataNotificationStatus auxECallNotificationStatus) {
+ setValue(KEY_AUX_E_CALL_NOTIFICATION_STATUS, auxECallNotificationStatus);
+ }
+ public VehicleDataNotificationStatus getAuxECallNotificationStatus() {
+ return (VehicleDataNotificationStatus) getObject(VehicleDataNotificationStatus.class, KEY_AUX_E_CALL_NOTIFICATION_STATUS);
+ }
+ public void setECallConfirmationStatus(@NonNull ECallConfirmationStatus eCallConfirmationStatus) {
+ setValue(KEY_E_CALL_CONFIRMATION_STATUS, eCallConfirmationStatus);
+ }
+ public ECallConfirmationStatus getECallConfirmationStatus() {
+ return (ECallConfirmationStatus) getObject(ECallConfirmationStatus.class, KEY_E_CALL_CONFIRMATION_STATUS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/EmergencyEvent.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/EmergencyEvent.java
new file mode 100644
index 000000000..ab2ed9377
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/EmergencyEvent.java
@@ -0,0 +1,134 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.EmergencyEventType;
+import com.smartdevicelink.proxy.rpc.enums.FuelCutoffStatus;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+
+import java.util.Hashtable;
+
+/** Information related to an emergency event (and if it occurred).
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>emergencyEventType</td>
+ * <td>EmergencyEventType</td>
+ * <td></td>
+ * <td>References signal "VedsEvntType_D_Ltchd". See{@linkplain EmergencyEventType}</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fuelCutoffStatus</td>
+ * <td>FuelCutoffStatus</td>
+ * <td></td>
+ * <td>References signal "RCM_FuelCutoff". See{@linkplain FuelCutoffStatus}</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>rolloverEvent</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td></td>
+ * <td>References signal "VedsEvntRoll_D_Ltchd". See{@linkplain VehicleDataEventStatus}</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>maximumChangeVelocity</td>
+ * <td>Integer</td>
+ * <td></td>
+ * <td>References signal "VedsMaxDeltaV_D_Ltchd".</td>
+ * <td>minvalue=0; maxvalue=255;<p> Additional reserved values:</p> <p>0x00 No event; 0xFE Not supported; 0xFF Fault</p> </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ *
+ * <tr>
+ * <td>multipleEvents</td>
+ * <td>VehicleDataEventStatus</td>
+ * <td></td>
+ * <td>References signal "VedsMultiEvnt_D_Ltchd". See{@linkplain VehicleDataEventStatus}</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * @see Image
+ * @see SubscribeVehicleData
+ * @since SmartDeviceLink 2.0
+ *
+ */
+
+public class EmergencyEvent extends RPCStruct {
+ public static final String KEY_EMERGENCY_EVENT_TYPE = "emergencyEventType";
+ public static final String KEY_FUEL_CUTOFF_STATUS = "fuelCutoffStatus";
+ public static final String KEY_ROLLOVER_EVENT = "rolloverEvent";
+ public static final String KEY_MAXIMUM_CHANGE_VELOCITY = "maximumChangeVelocity";
+ public static final String KEY_MULTIPLE_EVENTS = "multipleEvents";
+
+ /** Constructs a new EmergencyEvent object
+ *
+ */
+ public EmergencyEvent() { }
+ /** Constructs a new EmergencyEvent object indicated by the Hashtable
+ * parameter
+ * @param hash <p>The hash table to use</p>
+ */
+ public EmergencyEvent(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new EmergencyEvent object
+ */
+ public EmergencyEvent(@NonNull EmergencyEventType emergencyEventType, @NonNull FuelCutoffStatus fuelCutoffStatus, @NonNull VehicleDataEventStatus rolloverEvent, @NonNull Integer maximumChangeVelocity, @NonNull VehicleDataEventStatus multipleEvents) {
+ this();
+ setEmergencyEventType(emergencyEventType);
+ setFuelCutoffStatus(fuelCutoffStatus);
+ setRolloverEvent(rolloverEvent);
+ setMaximumChangeVelocity(maximumChangeVelocity);
+ setMultipleEvents(multipleEvents);
+ }
+
+ public void setEmergencyEventType(@NonNull EmergencyEventType emergencyEventType) {
+ setValue(KEY_EMERGENCY_EVENT_TYPE, emergencyEventType);
+ }
+ public EmergencyEventType getEmergencyEventType() {
+ return (EmergencyEventType) getObject(EmergencyEventType.class, KEY_EMERGENCY_EVENT_TYPE);
+ }
+ public void setFuelCutoffStatus(@NonNull FuelCutoffStatus fuelCutoffStatus) {
+ setValue(KEY_FUEL_CUTOFF_STATUS, fuelCutoffStatus);
+ }
+ public FuelCutoffStatus getFuelCutoffStatus() {
+ return (FuelCutoffStatus) getObject(FuelCutoffStatus.class, KEY_FUEL_CUTOFF_STATUS);
+ }
+ public void setRolloverEvent(@NonNull VehicleDataEventStatus rolloverEvent) {
+ setValue(KEY_ROLLOVER_EVENT, rolloverEvent);
+ }
+ public VehicleDataEventStatus getRolloverEvent() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_ROLLOVER_EVENT);
+ }
+ public void setMaximumChangeVelocity(@NonNull Integer maximumChangeVelocity) {
+ setValue(KEY_MAXIMUM_CHANGE_VELOCITY, maximumChangeVelocity);
+ }
+ public Integer getMaximumChangeVelocity() {
+ return getInteger(KEY_MAXIMUM_CHANGE_VELOCITY);
+ }
+ public void setMultipleEvents(@NonNull VehicleDataEventStatus multipleEvents) {
+ setValue(KEY_MULTIPLE_EVENTS, multipleEvents);
+ }
+ public VehicleDataEventStatus getMultipleEvents() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_MULTIPLE_EVENTS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThru.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThru.java
new file mode 100644
index 000000000..ab61c548e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThru.java
@@ -0,0 +1,51 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+/**
+ * When this request is invoked, the audio capture stops
+ *
+ * <p>Function Group: AudioPassThru</p>
+ *
+ * <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
+ *
+ * <p><b>Request</b></p>
+ *
+ * <p>No parameters.</p>
+ * <p><b>Response</b> </p>
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p>DISALLOWED</p>
+ * @since SmartDeviceLink 2.0
+ * @see PerformAudioPassThru
+ */
+public class EndAudioPassThru extends RPCRequest {
+
+ /**
+ * Constructs a new EndAudioPassThru object
+ */
+ public EndAudioPassThru() {
+ super(FunctionID.END_AUDIO_PASS_THRU.toString());
+ }
+
+ /**
+ * <p>Constructs a new EndAudioPassThru object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public EndAudioPassThru(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThruResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThruResponse.java
new file mode 100644
index 000000000..fddb8a30c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/EndAudioPassThruResponse.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * End Audio Pass Thru Response is sent, when EndAudioPassThru has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class EndAudioPassThruResponse extends RPCResponse {
+
+ /**
+ * Constructs a new EndAudioPassThruResponse object
+ */
+ public EndAudioPassThruResponse() {
+ super(FunctionID.END_AUDIO_PASS_THRU.toString());
+ }
+ public EndAudioPassThruResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new EndAudioPassThruResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public EndAudioPassThruResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/EqualizerSettings.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/EqualizerSettings.java
new file mode 100644
index 000000000..78e76c808
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/EqualizerSettings.java
@@ -0,0 +1,97 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Defines the each Equalizer channel settings.
+ */
+public class EqualizerSettings extends RPCStruct {
+ public static final String KEY_CHANNEL_ID = "channelId";
+ public static final String KEY_CHANNEL_NAME = "channelName";
+ public static final String KEY_CHANNEL_SETTING = "channelSetting";
+
+ /**
+ * Constructs a newly allocated EqualizerSettings object
+ */
+ public EqualizerSettings() {
+ }
+
+ /**
+ * Constructs a newly allocated EqualizerSettings object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public EqualizerSettings(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated EqualizerSettings object
+ *
+ * @param channelId Min: 0 Max: 100
+ * @param channelSetting Min: 0 Max: 100
+ */
+ public EqualizerSettings(@NonNull Integer channelId, @NonNull Integer channelSetting) {
+ this();
+ setChannelId(channelId);
+ setChannelSetting(channelSetting);
+ }
+
+ /**
+ * Sets the channelId portion of the EqualizerSettings class
+ *
+ * @param channelId
+ */
+ public void setChannelId(@NonNull Integer channelId) {
+ setValue(KEY_CHANNEL_ID, channelId);
+ }
+
+ /**
+ * Gets the channelId portion of the EqualizerSettings class
+ *
+ * @return Integer
+ */
+ public Integer getChannelId() {
+ return getInteger(KEY_CHANNEL_ID);
+ }
+
+ /**
+ * Sets the channelName portion of the EqualizerSettings class
+ *
+ * @param channelName Read-only channel / frequency name (e.i. "Treble, Midrange, Bass" or "125 Hz").
+ */
+ public void setChannelName(String channelName) {
+ setValue(KEY_CHANNEL_NAME, channelName);
+ }
+
+ /**
+ * Gets the channelName portion of the EqualizerSettings class
+ *
+ * @return String - Read-only channel / frequency name (e.i. "Treble, Midrange, Bass" or "125 Hz").
+ */
+ public String getChannelName() {
+ return getString(KEY_CHANNEL_NAME);
+ }
+
+ /**
+ * Sets the channelSetting portion of the EqualizerSettings class
+ *
+ * @param channelSetting Reflects the setting, from 0%-100%.
+ */
+ public void setChannelSetting(@NonNull Integer channelSetting) {
+ setValue(KEY_CHANNEL_SETTING, channelSetting);
+ }
+
+ /**
+ * Gets the channelSetting portion of the EqualizerSettings class
+ *
+ * @return Integer - Reflects the setting, from 0%-100%.
+ */
+ public Integer getChannelSetting() {
+ return getInteger(KEY_CHANNEL_SETTING);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/FuelRange.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/FuelRange.java
new file mode 100644
index 000000000..01027aa8d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/FuelRange.java
@@ -0,0 +1,66 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.FuelType;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+public class FuelRange extends RPCStruct{
+ public static final String KEY_TYPE = "type";
+ public static final String KEY_RANGE = "range";
+
+ /**
+ * Constructs a new FuelRange object
+ */
+ public FuelRange() { }
+
+ /**
+ * <p>Constructs a new FuelRange object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public FuelRange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the type portion of the FuelRange class
+ *
+ * @param fuelType
+ */
+ public void setType(FuelType fuelType) {
+ setValue(KEY_TYPE, fuelType);
+ }
+
+ /**
+ * Gets the type portion of the FuelRange class
+ *
+ * @return FuelType.
+ */
+ public FuelType getType() {
+ return (FuelType) getObject(FuelType.class, KEY_TYPE);
+ }
+
+ /**
+ * Gets the range portion of the FuelRange class
+ *
+ * @return Float - The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ */
+ public Float getRange() {
+ Object object = getValue(KEY_RANGE);
+ return SdlDataTypeConverter.objectToFloat(object);
+ }
+
+ /**
+ * Sets the range portion of the FuelRange class
+ *
+ * @param range
+ * The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ */
+ public void setRange(Float range) {
+ setValue(KEY_RANGE, range);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GPSData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GPSData.java
new file mode 100644
index 000000000..ca264556f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GPSData.java
@@ -0,0 +1,493 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.CompassDirection;
+import com.smartdevicelink.proxy.rpc.enums.Dimension;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+/**
+ * Describes the GPS data. Not all data will be available on all carlines.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>longitudeDegrees</td>
+ * <td>Double</td>
+ * <td>Minvalue: - 180
+ * <b>Maxvalue: 180
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>latitudeDegrees</td>
+ * <td>Double</td>
+ * <td>Minvalue: - 90<b>Maxvalue: 90
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcYear</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 2010<b>Maxvalue: 2100
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcMonth</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 1<b>Maxvalue: 12
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcDay</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 1<b>Maxvalue: 31
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcHours</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 0<b>Maxvalue: 23
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcMinutes</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 0<b>Maxvalue: 59
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>utcSeconds</td>
+ * <td>Integer</td>
+ * <td>Minvalue: 0<b>Maxvalue: 59
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>pdop</td>
+ * <td>Integer</td>
+ * <td>Positional Dilution of Precision. If undefined or unavailable, then value shall be set to 0.<b>Minvalue: 0<b>Maxvalue: 1000
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>hdop</td>
+ * <td>Integer</td>
+ * <td>Horizontal Dilution of Precision. If value is unknown, value shall be set to 0.<b>Minvalue: 0<b>Maxvalue: 1000
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>vdop</td>
+ * <td>Integer</td>
+ * <td>Vertical Dilution of Precision. If value is unknown, value shall be set to 0.<b>Minvalue: 0<b>Maxvalue: 1000
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>actual</td>
+ * <td>Boolean</td>
+ * <td>True, if coordinates are based on satellites.
+ * False, if based on dead reckoning
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>satellites</td>
+ * <td>Integer</td>
+ * <td>Number of satellites in view
+ * <b>Minvalue: 0
+ * <b>Maxvalue: 31
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>altitude</td>
+ * <td>Integer</td>
+ * <td>Altitude in meters
+ * <b>Minvalue: -10000</b>
+ * <b>Maxvalue: 10000</b>
+ * <b>Note:</b> SYNC uses Mean Sea Level for calculating GPS. </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>heading</td>
+ * <td>Double</td>
+ * <td>The heading. North is 0, East is 90, etc.
+ * <b>Minvalue: 0
+ * <b>Maxvalue: 359.99
+ * <b>Resolution is 0.01
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>speed</td>
+ * <td>Integer</td>
+ * <td>The speed in KPH
+ * <b>Minvalue: 0
+ * <b>Maxvalue: 500
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class GPSData extends RPCStruct {
+ public static final String KEY_LONGITUDE_DEGREES = "longitudeDegrees";
+ public static final String KEY_LATITUDE_DEGREES = "latitudeDegrees";
+ public static final String KEY_UTC_YEAR = "utcYear";
+ public static final String KEY_UTC_MONTH = "utcMonth";
+ public static final String KEY_UTC_DAY = "utcDay";
+ public static final String KEY_UTC_HOURS = "utcHours";
+ public static final String KEY_UTC_MINUTES = "utcMinutes";
+ public static final String KEY_UTC_SECONDS = "utcSeconds";
+ public static final String KEY_COMPASS_DIRECTION = "compassDirection";
+ public static final String KEY_PDOP = "pdop";
+ public static final String KEY_VDOP = "vdop";
+ public static final String KEY_HDOP = "hdop";
+ public static final String KEY_ACTUAL = "actual";
+ public static final String KEY_SATELLITES = "satellites";
+ public static final String KEY_DIMENSION = "dimension";
+ public static final String KEY_ALTITUDE = "altitude";
+ public static final String KEY_HEADING = "heading";
+ public static final String KEY_SPEED = "speed";
+
+ /**
+ * Constructs a newly allocated GPSData object
+ */
+ public GPSData() { }
+
+ /**
+ * Constructs a newly allocated GPSData object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public GPSData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated GPSData object
+ * @deprecated Use {@link #GPSData(@NonNull Double, @NonNull Double)()} instead
+ */
+ @Deprecated
+ public GPSData(@NonNull Double longitudeDegrees, @NonNull Double latitudeDegrees, @NonNull Integer utcYear,
+ @NonNull Integer utcMonth, @NonNull Integer utcDay, @NonNull Integer utcHours,
+ @NonNull Integer utcMinutes, @NonNull Integer utcSeconds, @NonNull CompassDirection compassDirection,
+ @NonNull Double pdop, @NonNull Double hdop, @NonNull Double vdop, @NonNull Boolean actual,
+ @NonNull Integer satellites, @NonNull Dimension dimension, @NonNull Double altitude, @NonNull Double heading, @NonNull Double speed) {
+ this();
+ setLongitudeDegrees(longitudeDegrees);
+ setLatitudeDegrees(latitudeDegrees);
+ setUtcYear(utcYear);
+ setUtcMonth(utcMonth);
+ setUtcDay(utcDay);
+ setUtcHours(utcHours);
+ setUtcMinutes(utcMinutes);
+ setUtcSeconds(utcSeconds);
+ setCompassDirection(compassDirection);
+ setPdop(pdop);
+ setHdop(hdop);
+ setVdop(vdop);
+ setActual(actual);
+ setSatellites(satellites);
+ setDimension(dimension);
+ setAltitude(altitude);
+ setHeading(heading);
+ setSpeed(speed);
+ }
+
+ /**
+ * Constructs a newly allocated GPSData object
+ */
+ public GPSData(@NonNull Double longitudeDegrees, @NonNull Double latitudeDegrees) {
+ this();
+ setLongitudeDegrees(longitudeDegrees);
+ setLatitudeDegrees(latitudeDegrees);
+ }
+ /**
+ * set longitude degrees
+ * @param longitudeDegrees
+ */
+ public void setLongitudeDegrees(@NonNull Double longitudeDegrees) {
+ setValue(KEY_LONGITUDE_DEGREES, longitudeDegrees);
+ }
+
+ /**
+ * get longitude degrees
+ * @return longitude degrees
+ */
+ public Double getLongitudeDegrees() {
+ Object object = getValue(KEY_LONGITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set latitude degrees
+ * @param latitudeDegrees latitude degrees
+ */
+ public void setLatitudeDegrees(@NonNull Double latitudeDegrees) {
+ setValue(KEY_LATITUDE_DEGREES, latitudeDegrees);
+ }
+
+ /**
+ * get latitude degrees
+ * @return latitude degrees
+ */
+ public Double getLatitudeDegrees() {
+ Object object = getValue(KEY_LATITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set utc year
+ * @param utcYear utc year
+ */
+ public void setUtcYear(Integer utcYear) {
+ setValue(KEY_UTC_YEAR, utcYear);
+ }
+
+ /**
+ * get utc year
+ * @return utc year
+ */
+ public Integer getUtcYear() {
+ return getInteger(KEY_UTC_YEAR);
+ }
+
+ /**
+ * set utc month
+ * @param utcMonth utc month
+ */
+ public void setUtcMonth(Integer utcMonth) {
+ setValue(KEY_UTC_MONTH, utcMonth);
+ }
+
+ /**
+ * get utc month
+ * @return utc month
+ */
+ public Integer getUtcMonth() {
+ return getInteger(KEY_UTC_MONTH);
+ }
+
+ /**
+ * set utc day
+ * @param utcDay utc day
+ */
+ public void setUtcDay(Integer utcDay) {
+ setValue(KEY_UTC_DAY, utcDay);
+ }
+
+ /**
+ * get utc day
+ * @return utc day
+ */
+ public Integer getUtcDay() {
+ return getInteger(KEY_UTC_DAY);
+ }
+
+ /**
+ * set utc hours
+ * @param utcHours utc hours
+ */
+ public void setUtcHours(Integer utcHours) {
+ setValue(KEY_UTC_HOURS, utcHours);
+ }
+
+ /**
+ * get utc hours
+ * @return utc hours
+ */
+ public Integer getUtcHours() {
+ return getInteger(KEY_UTC_HOURS);
+ }
+
+ /**
+ * set utc minutes
+ * @param utcMinutes utc minutes
+ */
+ public void setUtcMinutes(Integer utcMinutes) {
+ setValue(KEY_UTC_MINUTES, utcMinutes);
+ }
+
+ /**
+ * get utc minutes
+ * @return utc minutes
+ */
+ public Integer getUtcMinutes() {
+ return getInteger(KEY_UTC_MINUTES);
+ }
+
+ /**
+ * set utc seconds
+ * @param utcSeconds utc seconds
+ */
+ public void setUtcSeconds(Integer utcSeconds) {
+ setValue(KEY_UTC_SECONDS, utcSeconds);
+ }
+
+ /**
+ * get utc seconds
+ * @return utc seconds
+ */
+ public Integer getUtcSeconds() {
+ return getInteger(KEY_UTC_SECONDS);
+ }
+ public void setCompassDirection(CompassDirection compassDirection) {
+ setValue(KEY_COMPASS_DIRECTION, compassDirection);
+ }
+ public CompassDirection getCompassDirection() {
+ return (CompassDirection) getObject(CompassDirection.class, KEY_COMPASS_DIRECTION);
+ }
+
+ /**
+ * set the positional dilution of precision
+ * @param pdop the positional dilution of precision
+ */
+ public void setPdop(Double pdop) {
+ setValue(KEY_PDOP, pdop);
+ }
+
+ /**
+ * get the positional dilution of precision
+ */
+ public Double getPdop() {
+ Object object = getValue(KEY_PDOP);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set the horizontal dilution of precision
+ * @param hdop the horizontal dilution of precision
+ */
+ public void setHdop(Double hdop) {
+ setValue(KEY_HDOP, hdop);
+ }
+
+ /**
+ * get the horizontal dilution of precision
+ * @return the horizontal dilution of precision
+ */
+ public Double getHdop() {
+ Object object = getValue(KEY_HDOP);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set the vertical dilution of precision
+ * @param vdop the vertical dilution of precision
+ */
+ public void setVdop(Double vdop) {
+ setValue(KEY_VDOP, vdop);
+ }
+
+ /**
+ * get the vertical dilution of precision
+ * @return the vertical dilution of precision
+ */
+ public Double getVdop() {
+ Object object = getValue(KEY_VDOP);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set what coordinates based on
+ * @param actual True, if coordinates are based on satellites.False, if based on dead reckoning
+ */
+ public void setActual(Boolean actual) {
+ setValue(KEY_ACTUAL, actual);
+ }
+
+ /**
+ * get what coordinates based on
+ * @return True, if coordinates are based on satellites.False, if based on dead reckoning
+ */
+ public Boolean getActual() {
+ return getBoolean(KEY_ACTUAL);
+ }
+
+ /**
+ * set the number of satellites in view
+ * @param satellites the number of satellites in view
+ */
+ public void setSatellites(Integer satellites) {
+ setValue(KEY_SATELLITES, satellites);
+ }
+
+ /**
+ * get the number of satellites in view
+ * @return the number of satellites in view
+ */
+ public Integer getSatellites() {
+ return getInteger(KEY_SATELLITES);
+ }
+ public void setDimension(Dimension dimension) {
+ setValue(KEY_DIMENSION, dimension);
+ }
+ public Dimension getDimension() {
+ return (Dimension) getObject(Dimension.class, KEY_DIMENSION);
+ }
+
+ /**
+ * set altitude in meters
+ * @param altitude altitude in meters
+ */
+ public void setAltitude(Double altitude) {
+ setValue(KEY_ALTITUDE, altitude);
+ }
+
+ /**
+ * get altitude in meters
+ * @return altitude in meters
+ */
+ public Double getAltitude() {
+ Object object = getValue(KEY_ALTITUDE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set the heading.North is 0, East is 90, etc.
+ * @param heading the heading.
+ */
+ public void setHeading(Double heading) {
+ setValue(KEY_HEADING, heading);
+ }
+
+ /**
+ * get the heading
+ */
+ public Double getHeading() {
+ Object object = getValue(KEY_HEADING);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ /**
+ * set speed in KPH
+ * @param speed the speed
+ */
+ public void setSpeed(Double speed) {
+ setValue(KEY_SPEED, speed);
+ }
+
+ /**
+ * get the speed in KPH
+ * @return the speed in KPH
+ */
+ public Double getSpeed() {
+ Object object = getValue(KEY_SPEED);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GenericResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GenericResponse.java
new file mode 100644
index 000000000..a92c237e3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GenericResponse.java
@@ -0,0 +1,70 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Generic Response is sent, when the name of a received msg cannot be
+ * retrieved. Only used in case of an error. Currently, only resultCode
+ * INVALID_DATA is used.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>success</td>
+ * <td>Boolean</td>
+ * <td>true, if successful; false, if failed</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>resultCode</td>
+ * <td>Result</td>
+ * <td>Defines the possible result codes returned by SDL to the application in a Response to a requested operation</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>info</td>
+ * <td>String</td>
+ * <td>Provides additional human readable info regarding the result.</td>
+ * <td>N</td>
+ * <td>maxlength=1000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ */
+public class GenericResponse extends RPCResponse {
+
+ public GenericResponse() {
+ super(FunctionID.GENERIC_RESPONSE.toString());
+ }
+ public GenericResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new GenericResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public GenericResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceData.java
new file mode 100644
index 000000000..bfc0e43be
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceData.java
@@ -0,0 +1,82 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * This request asks the module for current data related to the specific service.
+ * It also includes an option to subscribe to that service for future updates
+ */
+public class GetAppServiceData extends RPCRequest {
+
+ public static final String KEY_SERVICE_TYPE = "serviceType";
+ public static final String KEY_SUBSCRIBE = "subscribe";
+
+ // Constructors
+ /**
+ * Constructs a new GetAppServiceData object
+ */
+ public GetAppServiceData() {
+ super(FunctionID.GET_APP_SERVICE_DATA.toString());
+ }
+
+ /**
+ * Constructs a new GetAppServiceData object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public GetAppServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetAppServiceData object with the mandatory appServiceType parameter
+ * @param appServiceType - The appServiceType
+ */
+ public GetAppServiceData(@NonNull String appServiceType) {
+ this();
+ setServiceType(appServiceType);
+ }
+
+ // Getters / Setters
+
+ /**
+ * @param appServiceType - the appServiceType
+ */
+ public void setServiceType(@NonNull String appServiceType){
+ setParameters(KEY_SERVICE_TYPE, appServiceType);
+ }
+
+ /**
+ * @return appServiceType
+ */
+ public String getServiceType(){
+ return getString(KEY_SERVICE_TYPE);
+ }
+
+ /**
+ * If true, the consumer is requesting to subscribe to all future updates from the service
+ * publisher. If false, the consumer doesn't wish to subscribe and should be unsubscribed
+ * if it was previously subscribed.
+ * @param subscribe -
+ */
+ public void setSubscribe(Boolean subscribe){
+ setParameters(KEY_SUBSCRIBE, subscribe);
+ }
+
+ /**
+ * If true, the consumer is requesting to subscribe to all future updates from the service
+ * publisher. If false, the consumer doesn't wish to subscribe and should be unsubscribed
+ * if it was previously subscribed.
+ * @return subscribe
+ */
+ public Boolean getSubscribe(){
+ return getBoolean(KEY_SUBSCRIBE);
+ }
+
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceDataResponse.java
new file mode 100644
index 000000000..db2dea526
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetAppServiceDataResponse.java
@@ -0,0 +1,51 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * This response includes the data that is requested from the specific service
+ */
+public class GetAppServiceDataResponse extends RPCResponse {
+
+ public static final String KEY_SERVICE_DATA = "serviceData";
+
+ // Constructors
+
+ public GetAppServiceDataResponse(){
+ super(FunctionID.GET_APP_SERVICE_DATA.toString());
+ }
+
+ public GetAppServiceDataResponse(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ public GetAppServiceDataResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull AppServiceData serviceData){
+ this();
+ setServiceData(serviceData);
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param serviceData -
+ */
+ public void setServiceData(@NonNull AppServiceData serviceData){
+ setParameters(KEY_SERVICE_DATA, serviceData);
+ }
+
+ /**
+ * @return serviceData
+ */
+ public AppServiceData getServiceData(){
+ return (AppServiceData) getObject(AppServiceData.class, KEY_SERVICE_DATA);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppProperties.java
new file mode 100644
index 000000000..032ae7dad
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppProperties.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class GetCloudAppProperties extends RPCRequest {
+
+ public static final String KEY_APP_ID = "appID";
+
+ public GetCloudAppProperties() {
+ super(FunctionID.GET_CLOUD_APP_PROPERTIES.toString());
+ }
+
+ public GetCloudAppProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public GetCloudAppProperties(@NonNull String appID){
+ this();
+ setParameters(KEY_APP_ID, appID);
+ }
+
+ public void setAppId(String appId){
+ setParameters(KEY_APP_ID, appId);
+ }
+
+ public String getAppId(){
+ return getString((KEY_APP_ID));
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppPropertiesResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppPropertiesResponse.java
new file mode 100644
index 000000000..7577dd396
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetCloudAppPropertiesResponse.java
@@ -0,0 +1,28 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.Hashtable;
+
+public class GetCloudAppPropertiesResponse extends RPCResponse {
+
+ public static final String KEY_PROPERTIES = "properties";
+
+ public GetCloudAppPropertiesResponse() {
+ super(FunctionID.GET_CLOUD_APP_PROPERTIES.toString());
+ }
+ public GetCloudAppPropertiesResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setCloudAppProperties(@NonNull CloudAppProperties cloudAppProperties){
+ setParameters(KEY_PROPERTIES, cloudAppProperties);
+ }
+
+ public CloudAppProperties getCloudAppProperties(){
+ return (CloudAppProperties) getObject(CloudAppProperties.class, KEY_PROPERTIES);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCs.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCs.java
new file mode 100644
index 000000000..23eeac0d4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCs.java
@@ -0,0 +1,118 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * This RPC allows to request diagnostic module trouble codes from a certain
+ * vehicle module.
+ *
+ *<p> Function Group: ProprietaryData</p>
+ *
+ *<p> <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>ecuName</td>
+ * <td>Integer</td>
+ * <td>Name of ECU.</td>
+ * <td>Y</td>
+ * <td>Min Value: 0; Max Value: 65535</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>dtcMask</td>
+ * <td>Integer</td>
+ * <td>DTC Mask Byte to be sent in diagnostic request to module.</td>
+ * <td>N</td>
+ * <td>Min Value: 0; Max Value: 255</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * </table>
+ * <p><b>Response</b></p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ *<p> SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ *<p> OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ *<p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p>DISALLOWED </p>
+ * <p>USER_DISALLOWED</p>
+ * @since SmartDeviceLink 2.0
+ */
+public class GetDTCs extends RPCRequest {
+ public static final String KEY_DTC_MASK = "dtcMask";
+ public static final String KEY_ECU_NAME = "ecuName";
+
+ /**
+ * Constructs a new GetDTCs object
+ */
+ public GetDTCs() {
+ super(FunctionID.GET_DTCS.toString());
+ }
+
+ /**
+ * <p>Constructs a new GetDTCs object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public GetDTCs(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetDTCs object
+ * @param ecuName an Integer value representing a name of the module to receive the DTC form <br>
+ * <b>Notes: </b>Minvalue:0; Maxvalue:65535
+ */
+ public GetDTCs(@NonNull Integer ecuName) {
+ this();
+ setEcuName(ecuName);
+ }
+
+ /**
+ * Sets a name of the module to receive the DTC form
+ *
+ * @param ecuName
+ * an Integer value representing a name of the module to receive
+ * the DTC form
+ * <p>
+ * <b>Notes:</p> </b>Minvalue:0; Maxvalue:65535
+ */
+ public void setEcuName(@NonNull Integer ecuName) {
+ setParameters(KEY_ECU_NAME, ecuName);
+ }
+
+ /**
+ * Gets a name of the module to receive the DTC form
+ *
+ * @return Integer -an Integer value representing a name of the module to
+ * receive the DTC form
+ */
+ public Integer getEcuName() {
+ return getInteger(KEY_ECU_NAME);
+ }
+ public void setDtcMask(Integer dtcMask) {
+ setParameters(KEY_DTC_MASK, dtcMask);
+ }
+ public Integer getDtcMask() {
+ return getInteger(KEY_DTC_MASK);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCsResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCsResponse.java
new file mode 100644
index 000000000..802f6b34a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetDTCsResponse.java
@@ -0,0 +1,60 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Get DTCs Response is sent, when GetDTCs has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class GetDTCsResponse extends RPCResponse{
+
+ public static final String KEY_ECU_HEADER = "ecuHeader";
+ public static final String KEY_DTC = "dtc";
+
+ public GetDTCsResponse(){
+ super(FunctionID.GET_DTCS.toString());
+ }
+
+ public GetDTCsResponse(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetDTCsResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ * @param ecuHeader
+ */
+ public GetDTCsResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull Integer ecuHeader) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ setEcuHeader(ecuHeader);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getDtc(){
+ return (List<String>) getObject(String.class, KEY_DTC);
+ }
+
+ public void setDtc(List<String> dtc){
+ setParameters(KEY_DTC, dtc);
+ }
+
+ public Integer getEcuHeader(){
+ return getInteger(KEY_ECU_HEADER);
+ }
+
+ public void setEcuHeader(@NonNull Integer ecuHeader){
+ setParameters(KEY_ECU_HEADER, ecuHeader);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFile.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFile.java
new file mode 100644
index 000000000..51913be77
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFile.java
@@ -0,0 +1,127 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.FileType;
+
+import java.util.Hashtable;
+
+/**
+ * This request is sent to the module to retrieve a file
+ */
+public class GetFile extends RPCRequest {
+
+ public static final String KEY_FILE_NAME = "fileName";
+ public static final String KEY_APP_SERVICE_ID = "appServiceId";
+ public static final String KEY_FILE_TYPE = "fileType";
+ public static final String KEY_OFFSET = "offset";
+ public static final String KEY_LENGTH = "length";
+
+ // Constructors
+
+ public GetFile() {
+ super(FunctionID.GET_FILE.toString());
+ }
+
+ public GetFile(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public GetFile(@NonNull String fileName) {
+ this();
+ setFileName(fileName);
+ }
+
+ // Setters and Getters
+
+ /**
+ * File name that should be retrieved.
+ * maxlength="255"
+ * @param fileName -
+ */
+ public void setFileName(@NonNull String fileName){
+ setParameters(KEY_FILE_NAME, fileName);
+ }
+
+ /**
+ * File name that should be retrieved.
+ * maxlength="255"
+ * @return fileName
+ */
+ public String getFileName(){
+ return getString(KEY_FILE_NAME);
+ }
+
+ /**
+ * ID of the service that should have uploaded the requested file
+ * @param appServiceId -
+ */
+ public void setAppServiceId(String appServiceId){
+ setParameters(KEY_APP_SERVICE_ID, appServiceId);
+ }
+
+ /**
+ * ID of the service that should have uploaded the requested file
+ * @return appServiceId
+ */
+ public String getAppServiceId(){
+ return getString(KEY_APP_SERVICE_ID);
+ }
+
+ /**
+ * Selected file type.
+ * @param fileType -
+ */
+ public void setFileType(FileType fileType){
+ setParameters(KEY_FILE_TYPE, fileType);
+ }
+
+ /**
+ * Selected file type.
+ * @return fileType
+ */
+ public FileType getFileType(){
+ return (FileType) getObject(FileType.class, KEY_FILE_TYPE);
+ }
+
+ /**
+ * Optional offset in bytes for resuming partial data chunks
+ * minvalue="0" maxvalue="2000000000"
+ * @param offset -
+ */
+ public void setOffset(Integer offset){
+ setParameters(KEY_OFFSET, offset);
+ }
+
+ /**
+ * Optional offset in bytes for resuming partial data chunks
+ * minvalue="0" maxvalue="2000000000"
+ * @return offset
+ */
+ public Integer getOffset(){
+ return getInteger(KEY_OFFSET);
+ }
+
+ /**
+ * Optional length in bytes for resuming partial data chunks if offset is set to 0, then length
+ * is the total length of the file to be downloaded
+ * minvalue="0" maxvalue="2000000000"
+ * @param length -
+ */
+ public void setLength(Integer length){
+ setParameters(KEY_LENGTH, length);
+ }
+
+ /**
+ * Optional length in bytes for resuming partial data chunks if offset is set to 0, then length
+ * is the total length of the file to be downloaded
+ * minvalue="0" maxvalue="2000000000"
+ * @return length
+ */
+ public Integer getLength(){
+ return getInteger(KEY_LENGTH);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFileResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFileResponse.java
new file mode 100644
index 000000000..10d8bb72e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetFileResponse.java
@@ -0,0 +1,112 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.FileType;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class GetFileResponse extends RPCResponse {
+
+ public static final String KEY_OFFSET = "offset";
+ public static final String KEY_LENGTH = "length";
+ public static final String KEY_FILE_TYPE = "fileType";
+ public static final String KEY_CRC = "crc";
+ /**
+ * Constructs a new PublishAppServiceResponse object
+ */
+ public GetFileResponse() {
+ super(FunctionID.GET_FILE.toString());
+ }
+
+ public GetFileResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PublishAppServiceResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public GetFileResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ // Custom Getters / Setters
+
+ /**
+ * File type that is being sent in response
+ * @param fileType -
+ */
+ public void setFileType(FileType fileType){
+ setParameters(KEY_FILE_TYPE, fileType);
+ }
+
+ /**
+ * File type that is being sent in response
+ * @return fileType
+ */
+ public FileType getFileType(){
+ return (FileType) getObject(FileType.class, KEY_FILE_TYPE);
+ }
+
+ /**
+ * Optional offset in bytes for resuming partial data chunks
+ * minvalue="0" maxvalue="2000000000"
+ * @param offset -
+ */
+ public void setOffset(Integer offset){
+ setParameters(KEY_OFFSET, offset);
+ }
+
+ /**
+ * Optional offset in bytes for resuming partial data chunks
+ * minvalue="0" maxvalue="2000000000"
+ * @return offset
+ */
+ public Integer getOffset(){
+ return getInteger(KEY_OFFSET);
+ }
+
+ /**
+ * Optional length in bytes for resuming partial data chunks if offset is set to 0, then length
+ * is the total length of the file to be downloaded
+ * minvalue="0" maxvalue="2000000000"
+ * @param length -
+ */
+ public void setLength(Integer length){
+ setParameters(KEY_LENGTH, length);
+ }
+
+ /**
+ * Optional length in bytes for resuming partial data chunks if offset is set to 0, then length
+ * is the total length of the file to be downloaded
+ * minvalue="0" maxvalue="2000000000"
+ * @return length
+ */
+ public Integer getLength(){
+ return getInteger(KEY_LENGTH);
+ }
+
+ /**
+ * Additional CRC32 checksum to protect data integrity up to 512 Mbits
+ * minvalue="0" maxvalue="4294967295"
+ * @param crc -
+ */
+ public void setCRC(Integer crc){
+ setParameters(KEY_CRC, crc);
+ }
+
+ /**
+ * Additional CRC32 checksum to protect data integrity up to 512 Mbits
+ * minvalue="0" maxvalue="4294967295"
+ * @return crc
+ */
+ public Integer getCRC(){
+ return getInteger(KEY_CRC);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleData.java
new file mode 100644
index 000000000..dc6ab5444
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleData.java
@@ -0,0 +1,89 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.ModuleType;
+import java.util.Hashtable;
+
+/**
+ * Read the current status value of specified remote control module (type). In addition,
+ * When subscribe=true, subscribes for specific remote control module data items;
+ * When subscribe=false, un-subscribes for specific remote control module data items.
+ * Once subscribed, the application will be notified by the onInteriorVehicleData notification
+ * whenever new data is available for the module.
+ */
+public class GetInteriorVehicleData extends RPCRequest {
+ public static final String KEY_MODULE_TYPE = "moduleType";
+ public static final String KEY_SUBSCRIBE = "subscribe";
+
+ /**
+ * Constructs a new GetInteriorVehicleData object
+ */
+ public GetInteriorVehicleData() {
+ super(FunctionID.GET_INTERIOR_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new GetInteriorVehicleData object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public GetInteriorVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetInteriorVehicleData object
+ */
+ public GetInteriorVehicleData(@NonNull ModuleType moduleType) {
+ this();
+ setModuleType(moduleType);
+ }
+
+ /**
+ * Gets the ModuleType
+ *
+ * @return ModuleType - The type of a RC module to retrieve module data from the vehicle.
+ * In the future, this should be the Identification of a module.
+ */
+ public ModuleType getModuleType() {
+ return (ModuleType) getObject(ModuleType.class, KEY_MODULE_TYPE);
+ }
+
+ /**
+ * Sets a ModuleType
+ *
+ * @param moduleType
+ * The type of a RC module to retrieve module data from the vehicle.
+ * In the future, this should be the Identification of a module.
+ */
+ public void setModuleType(@NonNull ModuleType moduleType) {
+ setParameters(KEY_MODULE_TYPE, moduleType);
+ }
+
+ /**
+ * Sets subscribe parameter
+ *
+ * @param subscribe
+ * If subscribe is true, the head unit will register onInteriorVehicleData notifications for the requested moduelType.
+ * If subscribe is false, the head unit will unregister onInteriorVehicleData notifications for the requested moduelType.
+ */
+ public void setSubscribe(Boolean subscribe) {
+ setParameters(KEY_SUBSCRIBE, subscribe);
+ }
+
+ /**
+ * Gets subscribe parameter
+ *
+ * @return Boolean - If subscribe is true, the head unit will register onInteriorVehicleData notifications for the requested moduelType.
+ * If subscribe is false, the head unit will unregister onInteriorVehicleData notifications for the requested moduelType.
+ */
+ public Boolean getSubscribe() {
+ return getBoolean(KEY_SUBSCRIBE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleDataResponse.java
new file mode 100644
index 000000000..88d663805
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetInteriorVehicleDataResponse.java
@@ -0,0 +1,88 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class GetInteriorVehicleDataResponse extends RPCResponse {
+ public static final String KEY_MODULE_DATA = "moduleData";
+ public static final String KEY_IS_SUBSCRIBED = "isSubscribed";
+
+ /**
+ * Constructs a new GetInteriorVehicleDataResponse object
+ */
+ public GetInteriorVehicleDataResponse() {
+ super(FunctionID.GET_INTERIOR_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new GetInteriorVehicleDataResponse object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public GetInteriorVehicleDataResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetInteriorVehicleDataResponse object
+ * @param moduleData
+ * @param resultCode whether the request is successfully processed
+ * @param success whether the request is successfully processed
+
+ */
+ public GetInteriorVehicleDataResponse( @NonNull ModuleData moduleData, @NonNull Result resultCode, @NonNull Boolean success) {
+ this();
+ setModuleData(moduleData);
+ setResultCode(resultCode);
+ setSuccess(success);
+ }
+
+ /**
+ * Gets the moduleData
+ *
+ * @return ModuleData
+ */
+ public ModuleData getModuleData() {
+ return (ModuleData) getObject(ModuleData.class, KEY_MODULE_DATA);
+ }
+
+ /**
+ * Sets the moduleData
+ *
+ * @param moduleData
+ */
+ public void setModuleData(ModuleData moduleData) {
+ setParameters(KEY_MODULE_DATA, moduleData);
+ }
+
+ /**
+ * Sets isSubscribed parameter
+ *
+ * @param isSubscribed
+ * It is a conditional-mandatory parameter: must be returned in case "subscribe" parameter was present in the related request.
+ * If "true" - the "moduleType" from request is successfully subscribed and the head unit will send onInteriorVehicleData notifications for the moduleType.
+ * If "false" - the "moduleType" from request is either unsubscribed or failed to subscribe.
+ * */
+ public void setIsSubscribed(Boolean isSubscribed) {
+ setParameters(KEY_IS_SUBSCRIBED, isSubscribed);
+ }
+
+ /**
+ * Gets isSubscribed parameter
+ *
+ * @return Boolean - It is a conditional-mandatory parameter: must be returned in case "subscribe" parameter was present in the related request.
+ * If "true" - the "moduleType" from request is successfully subscribed and the head unit will send onInteriorVehicleData notifications for the moduleType.
+ * If "false" - the "moduleType" from request is either unsubscribed or failed to subscribe.
+ * */
+ public Boolean getIsSubscribed() {
+ return getBoolean(KEY_IS_SUBSCRIBED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapability.java
new file mode 100644
index 000000000..9d8529d6d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapability.java
@@ -0,0 +1,79 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
+
+import java.util.Hashtable;
+
+/**
+ * Used to request the corresponding capability object for a given capability.
+ */
+
+public class GetSystemCapability extends RPCRequest {
+ public static final String KEY_SYSTEM_CAPABILITY_TYPE = "systemCapabilityType";
+ public static final String KEY_SUBSCRIBE = "subscribe";
+
+ /**
+ * Constructs a new GetSystemCapability object
+ */
+ public GetSystemCapability(){
+ super(FunctionID.GET_SYSTEM_CAPABILITY.toString());
+ }
+
+ /**
+ * <p>Constructs a new GetSystemCapability object indicated by the Hashtable parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public GetSystemCapability(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetSystemCapability object
+ * @param systemCapabilityType SystemCapabilityType being requested
+ */
+ public GetSystemCapability(@NonNull SystemCapabilityType systemCapabilityType){
+ this();
+ setSystemCapabilityType(systemCapabilityType);
+ }
+
+ /**
+ * Used to get the SystemCapabilityType being requested
+ * @return the SystemCapabilityType being requested
+ */
+ public SystemCapabilityType getSystemCapabilityType(){
+ return (SystemCapabilityType) getObject(SystemCapabilityType.class, KEY_SYSTEM_CAPABILITY_TYPE);
+ }
+
+ /**
+ * Used to set the SystemCapabilityType being requested
+ * @param value SystemCapabilityType being requested
+ */
+ public void setSystemCapabilityType(@NonNull SystemCapabilityType value){
+ setParameters(KEY_SYSTEM_CAPABILITY_TYPE, value);
+ }
+
+ /**
+ * Flag to subscribe to updates of the supplied service capability type. If true, the requester
+ * will be subscribed. If false, the requester will not be subscribed and be removed as a
+ * subscriber if it was previously subscribed.
+ * @return if the SystemCapabilityType is subscribed to
+ */
+ public Boolean getSubscribe(){
+ return getBoolean(KEY_SUBSCRIBE);
+ }
+
+ /**
+ * Flag to subscribe to updates of the supplied service capability type. If true, the requester
+ * will be subscribed. If false, the requester will not be subscribed and be removed as a
+ * subscriber if it was previously subscribed.
+ * @param subscribe to changes in the SystemCapabilityType
+ */
+ public void setSubscribe(Boolean subscribe){
+ setParameters(KEY_SUBSCRIBE, subscribe);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapabilityResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapabilityResponse.java
new file mode 100644
index 000000000..afcc8c48c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetSystemCapabilityResponse.java
@@ -0,0 +1,64 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * GetSystemCapabilityResponse is sent, when GetSystemCapability has been called
+ */
+
+public class GetSystemCapabilityResponse extends RPCResponse {
+ public static final String KEY_SYSTEM_CAPABILITY = "systemCapability";
+
+ /**
+ * Constructs a new GetSystemCapability object
+ */
+ public GetSystemCapabilityResponse(){
+ super(FunctionID.GET_SYSTEM_CAPABILITY.toString());
+ }
+
+ /**
+ * <p>Constructs a new GetSystemCapability object indicated by the Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public GetSystemCapabilityResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new GetSystemCapabilityResponse object
+ * @param systemCapability SystemCapability object
+ * @param resultCode whether the request is successfully processed
+ * @param success whether the request is successfully processed
+ */
+ public GetSystemCapabilityResponse(@NonNull SystemCapability systemCapability, @NonNull Result resultCode, @NonNull Boolean success) {
+ this();
+ setSystemCapability(systemCapability);
+ setResultCode(resultCode);
+ setSuccess(success);
+ }
+
+ /**
+ * Get the SystemCapability object returned after a GetSystemCapability call
+ * @return SystemCapability object
+ */
+ public SystemCapability getSystemCapability(){
+ return (SystemCapability) getObject(SystemCapability.class, KEY_SYSTEM_CAPABILITY);
+ }
+
+ /**
+ * Set a SystemCapability object in the response
+ * @param value SystemCapability object
+ */
+ public void setSystemCapability(@NonNull SystemCapability value){
+ setParameters(KEY_SYSTEM_CAPABILITY, value);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java
new file mode 100644
index 000000000..b847b37bc
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java
@@ -0,0 +1,512 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Non periodic vehicle data read request.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>gps</td>
+ * <td>Boolean</td>
+ * <td>GPS data. See {@linkplain GPS data }for details</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>speed</td>
+ * <td>Boolean</td>
+ * <td>The vehicle speed in kilometers per hour</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>rpm</td>
+ * <td>Boolean</td>
+ * <td>The number of revolutions per minute of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel</td>
+ * <td>Boolean</td>
+ * <td>The fuel level in the tank (percentage)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel_State</td>
+ * <td>Boolean</td>
+ * <td>The fuel level state</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>instantFuelConsumption</td>
+ * <td>Boolean</td>
+ * <td>The instantaneous fuel consumption in microlitres</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>externalTemperature</td>
+ * <td>Boolean</td>
+ * <td>The external temperature in degrees celsius</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>vin</td>
+ * <td>Boolean</td>
+ * <td>Vehicle identification number</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>prndl</td>
+ * <td>Boolean</td>
+ * <td>Currently selected gear.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>tirePressure</td>
+ * <td>Boolean</td>
+ * <td>Tire pressure status</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>odometer</td>
+ * <td>Boolean</td>
+ * <td>Odometer in km</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>beltStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the seat belts</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>bodyInformation</td>
+ * <td>Boolean</td>
+ * <td>The body information including ignition status and internal temp</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>deviceStatus</td>
+ * <td>Boolean</td>
+ * <td>The device status including signal and battery strength</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>driverBraking</td>
+ * <td>Boolean</td>
+ * <td>The status of the brake pedal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>wiperStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the wipers</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>headLampStatus</td>
+ * <td>Boolean</td>
+ * <td>Status of the head lamps</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>engineTorque</td>
+ * <td>Boolean</td>
+ * <td>Torque value for engine (in Nm) on non-diesel variants</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>engineOilLife</td>
+ * <td>Boolean</td>
+ * <td>The estimated percentage of remaining oil life of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>accPedalPosition</td>
+ * <td>Boolean</td>
+ * <td>Accelerator pedal position (percentage depressed)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>steeringWheelAngle</td>
+ * <td>Boolean</td>
+ * <td>Current angle of the steering wheel (in deg)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>turnSignal</td>
+ * <td>Boolean</td>
+ * <td>@see TurnSignal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>cloudAppVehicleID</td>
+ * <td>Boolean</td>
+ * <td>ID for the vehicle when connecting to cloud applications</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.1 </td>
+ * </tr>
+ * </table>
+ *
+ *
+ * <p><b>Response</b></p>
+ *
+ * <p> <b>Non-default Result Codes:</b></p>
+ * <p> SUCCESS</p>
+ * <p> INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ * <p> VEHICLE_DATA_NOT_ALLOWED</p>
+ * <p>VEHICLE_DATA_NOT_AVAILABLE</p>
+ * <p> USER_DISALLOWED</p>
+ *
+ * @see SubscribeVehicleData
+ * @see UnsubscribeVehicleData
+ * @since SmartDeviceLink 2.0
+ *
+ *
+ */
+public class GetVehicleData extends RPCRequest {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_VIN = "vin";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new GetVehicleData object
+ */
+
+ public GetVehicleData() {
+ super(FunctionID.GET_VEHICLE_DATA.toString());
+ }
+ /**
+ * <p>
+ * Constructs a new GetVehicleDta object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public GetVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public void setGps(Boolean gps) {
+ setParameters(KEY_GPS, gps);
+ }
+ public Boolean getGps() {
+ return getBoolean(KEY_GPS);
+ }
+ public void setSpeed(Boolean speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+ public Boolean getSpeed() {
+ return getBoolean(KEY_SPEED);
+ }
+ public void setRpm(Boolean rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+ public Boolean getRpm() {
+ return getBoolean(KEY_RPM);
+ }
+ public void setFuelLevel(Boolean fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+ public Boolean getFuelLevel() {
+ return getBoolean(KEY_FUEL_LEVEL);
+ }
+ @Deprecated
+ public void setFuelLevel_State(Boolean fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+ @Deprecated
+ public Boolean getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+ public void setFuelLevelState(Boolean fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+ public Boolean getFuelLevelState() {
+ return getBoolean(KEY_FUEL_LEVEL_STATE);
+ }
+ public void setInstantFuelConsumption(Boolean instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+ public Boolean getInstantFuelConsumption() {
+ return getBoolean(KEY_INSTANT_FUEL_CONSUMPTION);
+ }
+ public void setExternalTemperature(Boolean externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+ public Boolean getExternalTemperature() {
+ return getBoolean(KEY_EXTERNAL_TEMPERATURE);
+ }
+
+ public void setVin(Boolean vin) {
+ setParameters(KEY_VIN, vin);
+ }
+ public Boolean getVin() {
+ return getBoolean(KEY_VIN);
+ }
+
+ public void setPrndl(Boolean prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+ public Boolean getPrndl() {
+ return getBoolean(KEY_PRNDL);
+ }
+ public void setTirePressure(Boolean tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+ public Boolean getTirePressure() {
+ return getBoolean(KEY_TIRE_PRESSURE);
+ }
+ public void setOdometer(Boolean odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+ public Boolean getOdometer() {
+ return getBoolean(KEY_ODOMETER);
+ }
+ public void setBeltStatus(Boolean beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+ public Boolean getBeltStatus() {
+ return getBoolean(KEY_BELT_STATUS);
+ }
+ public void setBodyInformation(Boolean bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+ public Boolean getBodyInformation() {
+ return getBoolean(KEY_BODY_INFORMATION);
+ }
+ public void setDeviceStatus(Boolean deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+ public Boolean getDeviceStatus() {
+ return getBoolean(KEY_DEVICE_STATUS);
+ }
+ public void setDriverBraking(Boolean driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+ public Boolean getDriverBraking() {
+ return getBoolean(KEY_DRIVER_BRAKING);
+ }
+ public void setWiperStatus(Boolean wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+ public Boolean getWiperStatus() {
+ return getBoolean(KEY_WIPER_STATUS);
+ }
+ public void setHeadLampStatus(Boolean headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+ public Boolean getHeadLampStatus() {
+ return getBoolean(KEY_HEAD_LAMP_STATUS);
+ }
+ public void setEngineTorque(Boolean engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+ public Boolean getEngineTorque() {
+ return getBoolean(KEY_ENGINE_TORQUE);
+ }
+ public void setEngineOilLife(Boolean engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+ public Boolean getEngineOilLife() {
+ return getBoolean(KEY_ENGINE_OIL_LIFE);
+ }
+ public void setAccPedalPosition(Boolean accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+ public Boolean getAccPedalPosition() {
+ return getBoolean(KEY_ACC_PEDAL_POSITION);
+ }
+
+ public void setSteeringWheelAngle(Boolean steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+ public Boolean getSteeringWheelAngle() {
+ return getBoolean(KEY_STEERING_WHEEL_ANGLE);
+ }
+ public void setECallInfo(Boolean eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ public Boolean getECallInfo() {
+ return getBoolean(KEY_E_CALL_INFO);
+ }
+
+
+ public void setAirbagStatus(Boolean airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ public Boolean getAirbagStatus() {
+ return getBoolean(KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(Boolean emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ public Boolean getEmergencyEvent() {
+ return getBoolean(KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(Boolean clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ public Boolean getClusterModeStatus() {
+ return getBoolean(KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(Boolean myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ public Boolean getMyKey() {
+ return getBoolean(KEY_MY_KEY);
+ }
+
+ /**
+ * Sets a boolean value. If true, gets fuelRange data
+ * @param fuelRange
+ * a boolean value
+ */
+ public void setFuelRange(Boolean fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets a boolean value.
+ *
+ * @return Boolean -a Boolean value.
+ *
+ */
+ public Boolean getFuelRange() {
+ return getBoolean(KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes turnSignal data
+ * @param turnSignal a boolean value
+ */
+ public void setTurnSignal(Boolean turnSignal) { setParameters(KEY_TURN_SIGNAL, turnSignal); }
+
+ /**
+ * Gets a boolean value. If true, means the turnSignal data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getTurnSignal() { return getBoolean(KEY_TURN_SIGNAL); }
+
+ /**
+ * Sets a boolean value. If true, subscribes electronicParkBrakeStatus data
+ * @param electronicParkBrakeStatus a boolean value
+ */
+ public void setElectronicParkBrakeStatus(Boolean electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the electronicParkBrakeStatus data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getElectronicParkBrakeStatus(){
+ return getBoolean(KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, gets the cloudAppVehicleID data
+ * @param cloudAppVehicleID a boolean value
+ */
+ public void setCloudAppVehicleID(boolean cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the cloudAppVehicleDataID data has been set to retrieve.
+ * @return a Boolean value.
+ */
+ public Boolean getCloudAppVehicleID(){
+ return getBoolean(KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java
new file mode 100644
index 000000000..fc26a2c9a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java
@@ -0,0 +1,333 @@
+package com.smartdevicelink.proxy.rpc;
+
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.ComponentVolumeStatus;
+import com.smartdevicelink.proxy.rpc.enums.ElectronicParkBrakeStatus;
+import com.smartdevicelink.proxy.rpc.enums.PRNDL;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.proxy.rpc.enums.TurnSignal;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+import com.smartdevicelink.proxy.rpc.enums.WiperStatus;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Get Vehicle Data Response is sent, when GetVehicleData has been called.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class GetVehicleDataResponse extends RPCResponse {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_VIN = "vin";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new GetVehicleDataResponse object
+ */
+
+ public GetVehicleDataResponse() {
+ super(FunctionID.GET_VEHICLE_DATA.toString());
+ }
+ public GetVehicleDataResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new GetVehicleDataResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public GetVehicleDataResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ public void setGps(GPSData gps) {
+ setParameters(KEY_GPS, gps);
+ }
+ @SuppressWarnings("unchecked")
+ public GPSData getGps() {
+ return (GPSData) getObject(GPSData.class, KEY_GPS);
+ }
+ public void setSpeed(Double speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+ public Double getSpeed() {
+ Object object = getParameters(KEY_SPEED);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setRpm(Integer rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+ public Integer getRpm() {
+ return getInteger(KEY_RPM);
+ }
+ public void setFuelLevel(Double fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+ public Double getFuelLevel() {
+ Object object = getParameters(KEY_FUEL_LEVEL);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ @Deprecated
+ public void setFuelLevel_State(ComponentVolumeStatus fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+ @Deprecated
+ public ComponentVolumeStatus getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+ public void setFuelLevelState(ComponentVolumeStatus fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+ public ComponentVolumeStatus getFuelLevelState() {
+ return (ComponentVolumeStatus) getObject(ComponentVolumeStatus.class, KEY_FUEL_LEVEL_STATE);
+ }
+ public void setInstantFuelConsumption(Double instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+ public Double getInstantFuelConsumption() {
+ Object object = getParameters(KEY_INSTANT_FUEL_CONSUMPTION);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setExternalTemperature(Double externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+ public Double getExternalTemperature() {
+ Object object = getParameters(KEY_EXTERNAL_TEMPERATURE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setVin(String vin) {
+ setParameters(KEY_VIN, vin);
+ }
+ public String getVin() {
+ return getString(KEY_VIN);
+ }
+ public void setPrndl(PRNDL prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+ public PRNDL getPrndl() {
+ return (PRNDL) getObject(PRNDL.class, KEY_PRNDL);
+ }
+ public void setTirePressure(TireStatus tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+ @SuppressWarnings("unchecked")
+ public TireStatus getTirePressure() {
+ return (TireStatus) getObject(TireStatus.class, KEY_TIRE_PRESSURE);
+ }
+ public void setOdometer(Integer odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+ public Integer getOdometer() {
+ return getInteger(KEY_ODOMETER);
+ }
+ public void setBeltStatus(BeltStatus beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public BeltStatus getBeltStatus() {
+ return (BeltStatus) getObject(BeltStatus.class, KEY_BELT_STATUS);
+ }
+ public void setBodyInformation(BodyInformation bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+ @SuppressWarnings("unchecked")
+ public BodyInformation getBodyInformation() {
+ return (BodyInformation) getObject(BodyInformation.class, KEY_BODY_INFORMATION);
+ }
+ public void setDeviceStatus(DeviceStatus deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public DeviceStatus getDeviceStatus() {
+ return (DeviceStatus) getObject(DeviceStatus.class, KEY_DEVICE_STATUS);
+ }
+ public void setDriverBraking(VehicleDataEventStatus driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+ public VehicleDataEventStatus getDriverBraking() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_BRAKING);
+ }
+ public void setWiperStatus(WiperStatus wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+ public WiperStatus getWiperStatus() {
+ return (WiperStatus) getObject(WiperStatus.class, KEY_WIPER_STATUS);
+ }
+
+ public void setHeadLampStatus(HeadLampStatus headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public HeadLampStatus getHeadLampStatus() {
+ return (HeadLampStatus) getObject(HeadLampStatus.class, KEY_HEAD_LAMP_STATUS);
+ }
+ public void setEngineTorque(Double engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+ public Double getEngineTorque() {
+ Object object = getParameters(KEY_ENGINE_TORQUE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setEngineOilLife(Float engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+ public Float getEngineOilLife() {
+ Object object = getParameters(KEY_ENGINE_OIL_LIFE);
+ return SdlDataTypeConverter.objectToFloat(object);
+ }
+
+ public void setAccPedalPosition(Double accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+ public Double getAccPedalPosition() {
+ Object object = getParameters(KEY_ACC_PEDAL_POSITION);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ public void setSteeringWheelAngle(Double steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+ public Double getSteeringWheelAngle() {
+ Object object = getParameters(KEY_STEERING_WHEEL_ANGLE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+
+ public void setECallInfo(ECallInfo eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ @SuppressWarnings("unchecked")
+ public ECallInfo getECallInfo() {
+ return (ECallInfo) getObject(ECallInfo.class, KEY_E_CALL_INFO);
+ }
+
+ public void setAirbagStatus(AirbagStatus airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public AirbagStatus getAirbagStatus() {
+ return (AirbagStatus) getObject(AirbagStatus.class, KEY_AIRBAG_STATUS);
+ }
+
+ public void setEmergencyEvent(EmergencyEvent emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ @SuppressWarnings("unchecked")
+ public EmergencyEvent getEmergencyEvent() {
+ return (EmergencyEvent) getObject(EmergencyEvent.class, KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(ClusterModeStatus clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public ClusterModeStatus getClusterModeStatus() {
+ return (ClusterModeStatus) getObject(ClusterModeStatus.class, KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(MyKey myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ @SuppressWarnings("unchecked")
+ public MyKey getMyKey() {
+ return (MyKey) getObject(MyKey.class, KEY_MY_KEY);
+ }
+
+ /**
+ * Sets Fuel Range List. Fuel Range - The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ * @param fuelRange
+ */
+ public void setFuelRange(List<FuelRange> fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets Fuel Range List
+ * @return List<FuelRange>
+ * Fuel Range - The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ */
+ @SuppressWarnings("unchecked")
+ public List<FuelRange> getFuelRange() {
+ return (List<FuelRange>) getObject(FuelRange.class, KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets turnSignal
+ * @param turnSignal
+ */
+ public void setTurnSignal(TurnSignal turnSignal) {
+ setParameters(KEY_TURN_SIGNAL, turnSignal);
+ }
+
+ /**
+ * Gets turnSignal
+ * @return TurnSignal
+ */
+ @SuppressWarnings("unchecked")
+ public TurnSignal getTurnSignal() {
+ return (TurnSignal) getObject(TurnSignal.class, KEY_TURN_SIGNAL);
+ }
+
+ /**
+ * Sets electronicParkBrakeStatus
+ * @param electronicParkBrakeStatus
+ */
+ public void setElectronicParkBrakeStatus(ElectronicParkBrakeStatus electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets electronicParkBrakeStatus
+ * @return ElectronicParkBrakeStatus
+ */
+ public ElectronicParkBrakeStatus getElectronicParkBrakeStatus(){
+ return (ElectronicParkBrakeStatus) getObject(ElectronicParkBrakeStatus.class, KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets a string value for the cloud app vehicle ID
+ * @param cloudAppVehicleID a string value
+ */
+ public void setCloudAppVehicleID(String cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a String value of the returned cloud app vehicle ID
+ * @return a String value.
+ */
+ public String getCloudAppVehicleID(){
+ return getString(KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPoints.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPoints.java
new file mode 100644
index 000000000..95b076e52
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPoints.java
@@ -0,0 +1,34 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.WayPointType;
+
+import java.util.Hashtable;
+
+public class GetWayPoints extends RPCRequest {
+ public static final String KEY_WAY_POINT_TYPE = "wayPointType";
+
+ public GetWayPoints() {
+ super(FunctionID.GET_WAY_POINTS.toString());
+ }
+
+ public GetWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public GetWayPoints(@NonNull WayPointType wayPointType) {
+ this();
+ setWayPointType(wayPointType);
+ }
+
+ public WayPointType getWayPointType() {
+ return (WayPointType) getObject(WayPointType.class, KEY_WAY_POINT_TYPE);
+ }
+
+ public void setWayPointType(@NonNull WayPointType wayPointType) {
+ setParameters(KEY_WAY_POINT_TYPE, wayPointType);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java
new file mode 100644
index 000000000..32344ffbd
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java
@@ -0,0 +1,38 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class GetWayPointsResponse extends RPCResponse {
+ public static final String KEY_WAY_POINTS = "wayPoints";
+
+ public GetWayPointsResponse() {
+ super(FunctionID.GET_WAY_POINTS.toString());
+ }
+ public GetWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new GetWayPointsResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public GetWayPointsResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ public void setWayPoints(List<LocationDetails> wayPoints) {
+ setParameters(KEY_WAY_POINTS, wayPoints);
+ }
+ @SuppressWarnings("unchecked")
+ public List<LocationDetails> getWayPoints() {
+ return (List<LocationDetails>) getObject(LocationDetails.class, KEY_WAY_POINTS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HMICapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMICapabilities.java
new file mode 100644
index 000000000..8f4cdfe66
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMICapabilities.java
@@ -0,0 +1,68 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class HMICapabilities extends RPCStruct{
+ public static final String KEY_NAVIGATION = "navigation";
+ public static final String KEY_PHONE_CALL = "phoneCall";
+ public static final String KEY_VIDEO_STREAMING = "videoStreaming";
+ public static final String KEY_REMOTE_CONTROL = "remoteControl";
+
+ public HMICapabilities() { }
+
+ public HMICapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public boolean isNavigationAvailable(){
+ Object available = getValue(KEY_NAVIGATION);
+ if(available == null){
+ return false;
+ }
+ return (Boolean)available;
+ }
+
+ public void setNavigationAvilable(Boolean available){
+ setValue(KEY_NAVIGATION, available);
+ }
+
+ public boolean isPhoneCallAvailable(){
+ Object available = getValue(KEY_PHONE_CALL);
+ if(available == null){
+ return false;
+ }
+ return (Boolean)available;
+ }
+
+ public void setPhoneCallAvilable(Boolean available){
+ setValue(KEY_PHONE_CALL, available);
+ }
+
+ public boolean isVideoStreamingAvailable(){
+ Object available = getValue(KEY_VIDEO_STREAMING);
+ if(available == null){
+ return false;
+ }
+ return (Boolean)available;
+ }
+
+ public void setVideoStreamingAvailable(Boolean available){
+ setValue(KEY_VIDEO_STREAMING, available);
+ }
+
+ public boolean isRemoteControlAvailable(){
+ Object available = getValue(KEY_REMOTE_CONTROL);
+ if(available == null){
+ return false;
+ }
+ return (Boolean)available;
+ }
+
+ public void setRemoteControlAvailable(Boolean available){
+ setValue(KEY_REMOTE_CONTROL, available);
+ }
+
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HMIPermissions.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMIPermissions.java
new file mode 100644
index 000000000..307ff8b06
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMIPermissions.java
@@ -0,0 +1,104 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.HMILevel;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Defining sets of HMI levels, which are permitted or prohibited for a given RPC.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>allowed</td>
+ * <td>HMILevel</td>
+ * <td>A set of all HMI levels that are permitted for this given RPC.
+ * <ul>
+ * <li>Min: 0</li>
+ * <li>Max: 100</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>userDisallowed</td>
+ * <td>HMILevel</td>
+ * <td>A set of all HMI levels that are prohibited for this given RPC.
+ * <ul>
+ * <li>Min: 0</li>
+ * <li>Max: 100</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class HMIPermissions extends RPCStruct {
+ public static final String KEY_ALLOWED = "allowed";
+ public static final String KEY_USER_DISALLOWED = "userDisallowed";
+ /**
+ * Constructs a newly allocated HMIPermissions object
+ */
+ public HMIPermissions() { }
+
+ /**
+ * Constructs a newly allocated HMIPermissions object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public HMIPermissions(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated HMIPermissions object
+ * @param allowed HMI level that is permitted for this given RPC
+ * @param userDisallowed HMI level that is prohibited for this given RPC
+ */
+ public HMIPermissions(@NonNull List<HMILevel> allowed, @NonNull List<HMILevel> userDisallowed) {
+ this();
+ setAllowed(allowed);
+ setUserDisallowed(userDisallowed);
+ }
+ /**
+ * get a set of all HMI levels that are permitted for this given RPC.
+ * @return a set of all HMI levels that are permitted for this given RPC
+ */
+ @SuppressWarnings("unchecked")
+ public List<HMILevel> getAllowed() {
+ return (List<HMILevel>) getObject(HMILevel.class, KEY_ALLOWED);
+ }
+
+ /**
+ * set HMI level that is permitted for this given RPC.
+ * @param allowed HMI level that is permitted for this given RPC
+ */
+ public void setAllowed(@NonNull List<HMILevel> allowed) {
+ setValue(KEY_ALLOWED, allowed);
+ }
+
+ /**
+ * get a set of all HMI levels that are prohibited for this given RPC
+ * @return a set of all HMI levels that are prohibited for this given RPC
+ */
+ @SuppressWarnings("unchecked")
+ public List<HMILevel> getUserDisallowed() {
+ return (List<HMILevel>) getObject(HMILevel.class, KEY_USER_DISALLOWED);
+ }
+
+ /**
+ * set a set of all HMI levels that are prohibited for this given RPC
+ * @param userDisallowed HMI level that is prohibited for this given RPC
+ */
+ public void setUserDisallowed(@NonNull List<HMILevel> userDisallowed) {
+ setValue(KEY_USER_DISALLOWED, userDisallowed);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlCapabilities.java
new file mode 100644
index 000000000..f5377b1b0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlCapabilities.java
@@ -0,0 +1,107 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class HMISettingsControlCapabilities extends RPCStruct {
+ public static final String KEY_MODULE_NAME = "moduleName";
+ public static final String KEY_DISTANCE_UNIT_AVAILABLE = "distanceUnitAvailable";
+ public static final String KEY_TEMPERATURE_UNIT_AVAILABLE = "temperatureUnitAvailable";
+ public static final String KEY_DISPLAY_MODE_UNIT_AVAILABLE = "displayModeUnitAvailable";
+
+ /**
+ * Constructs a new HMISettingsControlCapabilities object
+ */
+ public HMISettingsControlCapabilities() {
+ }
+
+ /**
+ * <p>Constructs a new HMISettingsControlCapabilities object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public HMISettingsControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public HMISettingsControlCapabilities(@NonNull String moduleName) {
+ this();
+ setModuleName(moduleName);
+ }
+
+ /**
+ * Sets the moduleName portion of the HMISettingsControlCapabilities class
+ *
+ * @param moduleName The short friendly name of the hmi setting module. It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Gets the moduleName portion of the HMISettingsControlCapabilities class
+ *
+ * @return String - The short friendly name of the hmi setting module. It should not be used to identify a module by mobile application.
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Sets the distanceUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @param distanceUnitAvailable Availability of the control of distance unit.
+ */
+ public void setDistanceUnitAvailable(Boolean distanceUnitAvailable) {
+ setValue(KEY_DISTANCE_UNIT_AVAILABLE, distanceUnitAvailable);
+ }
+
+ /**
+ * Gets the distanceUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of distance unit.
+ */
+ public Boolean getDistanceUnitAvailable() {
+ return getBoolean(KEY_DISTANCE_UNIT_AVAILABLE);
+ }
+
+ /**
+ * Sets the temperatureUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @param temperatureUnitAvailable Availability of the control of temperature unit.
+ */
+ public void setTemperatureUnitAvailable(Boolean temperatureUnitAvailable) {
+ setValue(KEY_TEMPERATURE_UNIT_AVAILABLE, temperatureUnitAvailable);
+ }
+
+ /**
+ * Gets the temperatureUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of temperature unit.
+ */
+ public Boolean getTemperatureUnitAvailable() {
+ return getBoolean(KEY_TEMPERATURE_UNIT_AVAILABLE);
+ }
+
+ /**
+ * Sets the displayModeUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @param displayModeUnitAvailable Availability of the control of HMI display mode.
+ */
+ public void setDisplayModeUnitAvailable(Boolean displayModeUnitAvailable) {
+ setValue(KEY_DISPLAY_MODE_UNIT_AVAILABLE, displayModeUnitAvailable);
+ }
+
+ /**
+ * Gets the displayModeUnitAvailable portion of the HMISettingsControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of HMI display mode.
+ */
+ public Boolean getDisplayModeUnitAvailable() {
+ return getBoolean(KEY_DISPLAY_MODE_UNIT_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlData.java
new file mode 100644
index 000000000..e6dc4d301
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HMISettingsControlData.java
@@ -0,0 +1,79 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.DisplayMode;
+import com.smartdevicelink.proxy.rpc.enums.DistanceUnit;
+import com.smartdevicelink.proxy.rpc.enums.TemperatureUnit;
+
+import java.util.Hashtable;
+
+/**
+ * Corresponds to "HMI_SETTINGS" ModuleType
+ */
+
+public class HMISettingsControlData extends RPCStruct {
+ public static final String KEY_DISPLAY_MODE = "displayMode";
+ public static final String KEY_TEMPERATURE_UNIT = "temperatureUnit";
+ public static final String KEY_DISTANCE_UNIT = "distanceUnit";
+
+ public HMISettingsControlData() {
+ }
+
+ public HMISettingsControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the displayMode portion of the HMISettingsControlData class
+ *
+ * @param displayMode
+ */
+ public void setDisplayMode(DisplayMode displayMode) {
+ setValue(KEY_DISPLAY_MODE, displayMode);
+ }
+
+ /**
+ * Gets the displayMode portion of the HMISettingsControlData class
+ *
+ * @return DisplayMode
+ */
+ public DisplayMode getDisplayMode() {
+ return (DisplayMode) getObject(DisplayMode.class, KEY_DISPLAY_MODE);
+ }
+
+ /**
+ * Sets the temperatureUnit portion of the HMISettingsControlData class
+ *
+ * @param temperatureUnit
+ */
+ public void setTemperatureUnit(TemperatureUnit temperatureUnit) {
+ setValue(KEY_TEMPERATURE_UNIT, temperatureUnit);
+ }
+
+ /**
+ * Gets the temperatureUnit portion of the HMISettingsControlData class
+ *
+ * @return TemperatureUnit
+ */
+ public TemperatureUnit getTemperatureUnit() {
+ return (TemperatureUnit) getObject(TemperatureUnit.class, KEY_TEMPERATURE_UNIT);
+ }
+
+ /**
+ * Sets the distanceUnit portion of the HMISettingsControlData class
+ *
+ * @param distanceUnit
+ */
+ public void setDistanceUnit(DistanceUnit distanceUnit) {
+ setValue(KEY_DISTANCE_UNIT, distanceUnit);
+ }
+
+ /**
+ * Gets the distanceUnit portion of the HMISettingsControlData class
+ *
+ * @return DistanceUnit
+ */
+ public DistanceUnit getDistanceUnit() {
+ return (DistanceUnit) getObject(DistanceUnit.class, KEY_DISTANCE_UNIT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HapticRect.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HapticRect.java
new file mode 100644
index 000000000..a102f3eb1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HapticRect.java
@@ -0,0 +1,89 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/*
+ * Copyright (c) 2017 Livio, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Livio Inc. nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Defines a haptic rectangle that contains a reference ID and the spatial data of a rectangle UI component.
+ * @since SmartDeviceLink 4.5.0
+ *
+ */
+
+public class HapticRect extends RPCStruct {
+ public static final String KEY_ID = "id";
+ public static final String KEY_RECT = "rect";
+
+ public HapticRect() {}
+
+ public HapticRect(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public HapticRect(@NonNull Integer id, @NonNull Rectangle rect) {
+ this();
+ setId(id);
+ setRect(rect);
+ }
+ /**
+ * Set a user control spatial identifier that references the supplied spatial data
+ */
+ public void setId(@NonNull Integer id) {
+ setValue(KEY_ID, id);
+ }
+
+ /**
+ * @return a user control spatial identifier that references the supplied spatial data
+ */
+ public Integer getId() {
+ return getInteger(KEY_ID);
+ }
+
+ /**
+ * Set the position of the haptic rectangle to be highlighted. The center of this rectangle will be "touched" when a press occurs.
+ */
+ public void setRect(@NonNull Rectangle rect) {
+ setValue(KEY_RECT, rect);
+ }
+
+ /**
+ * @return the position of the haptic rectangle to be highlighted. The center of this rectangle will be "touched" when a press occurs.
+ */
+ public Rectangle getRect() {
+ return (Rectangle) getObject(Rectangle.class, KEY_RECT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/HeadLampStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/HeadLampStatus.java
new file mode 100644
index 000000000..68ffc88ad
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/HeadLampStatus.java
@@ -0,0 +1,88 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.AmbientLightStatus;
+/** Status of the head lamps.
+ *
+ * <p><table border="1" rules="all"></p>
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>lowBeamsOn</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>Status of the low beam lamps. </td>
+ * </tr>
+ * <tr>
+ * <td>highBeamsOn</td>
+ * <td>Boolean</td>
+ * <td>true</td>
+ * <td>Status of the high beam lamps. </td>
+ * </tr>
+ * <tr>
+ * <td>ambientLightSensorStatus</td>
+ * <td>AmbientLightStatus</td>
+ * <td>true</td>
+ * <td>Status of the ambient light sensor.</td>
+ * </tr>
+ *
+ *
+ * </table>
+ * @see OnVehicleData
+ * @see GetVehicleData
+ * @since SmartDeviceLink 1.0
+ *
+ */
+
+public class HeadLampStatus extends RPCStruct {
+ public static final String KEY_AMBIENT_LIGHT_SENSOR_STATUS = "ambientLightSensorStatus";
+ public static final String KEY_HIGH_BEAMS_ON = "highBeamsOn";
+ public static final String KEY_LOW_BEAMS_ON = "lowBeamsOn";
+
+ /**
+ * Constructs a new HeadLampStatus object
+ */
+ public HeadLampStatus() {}
+ /**
+ * <p>Constructs a new HeadLampStatus object indicated by the Hashtable
+ * parameter</p>
+ * @param hash The hash table to use
+ */
+ public HeadLampStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new HeadLampStatus object
+ */
+ public HeadLampStatus(@NonNull Boolean lowBeamsOn, @NonNull Boolean highBeamsOn) {
+ this();
+ setLowBeamsOn(lowBeamsOn);
+ setHighBeamsOn(highBeamsOn);
+ }
+ public void setAmbientLightStatus(AmbientLightStatus ambientLightSensorStatus) {
+ setValue(KEY_AMBIENT_LIGHT_SENSOR_STATUS, ambientLightSensorStatus);
+ }
+ public AmbientLightStatus getAmbientLightStatus() {
+ return (AmbientLightStatus) getObject(AmbientLightStatus.class, KEY_AMBIENT_LIGHT_SENSOR_STATUS);
+ }
+ public void setHighBeamsOn(@NonNull Boolean highBeamsOn) {
+ setValue(KEY_HIGH_BEAMS_ON, highBeamsOn);
+ }
+ public Boolean getHighBeamsOn() {
+ return getBoolean(KEY_HIGH_BEAMS_ON);
+ }
+ public void setLowBeamsOn(@NonNull Boolean lowBeamsOn) {
+ setValue(KEY_LOW_BEAMS_ON, lowBeamsOn);
+ }
+ public Boolean getLowBeamsOn() {
+ return getBoolean(KEY_LOW_BEAMS_ON);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Headers.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Headers.java
new file mode 100644
index 000000000..2ae607100
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Headers.java
@@ -0,0 +1,119 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ *
+ * @since SmartDeviceLink 3.0
+ *
+ */
+
+public class Headers extends RPCStruct {
+ public static final String KEY_CONTENT_TYPE = "ContentType";
+ public static final String KEY_CONNECT_TIMEOUT = "ConnectTimeout";
+ public static final String KEY_DO_OUTPUT = "DoOutput";
+ public static final String KEY_DO_INPUT = "DoInput";
+ public static final String KEY_USE_CACHES = "UseCaches";
+ public static final String KEY_REQUEST_METHOD = "RequestMethod";
+ public static final String KEY_READ_TIMEOUT = "ReadTimeout";
+ public static final String KEY_INSTANCE_FOLLOW_REDIRECTS = "InstanceFollowRedirects";
+ public static final String KEY_CHARSET = "charset";
+ public static final String KEY_CONTENT_LENGTH = "Content-Length";
+
+ public Headers() { }
+ /**
+ * <p>
+ * Constructs a new Headers object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public Headers(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setContentType(String contenttype) {
+ setValue(KEY_CONTENT_TYPE, contenttype);
+ }
+
+ public String getContentType() {
+ return getString(KEY_CONTENT_TYPE);
+ }
+
+ public void setConnectTimeout(Integer connectiontimeout) {
+ setValue(KEY_CONNECT_TIMEOUT, connectiontimeout);
+ }
+
+ public Integer getConnectTimeout() {
+ return getInteger(KEY_CONNECT_TIMEOUT);
+ }
+
+ public void setDoOutput(Boolean dooutput) {
+ setValue(KEY_DO_OUTPUT, dooutput);
+ }
+
+ public Boolean getDoOutput() {
+ return getBoolean(KEY_DO_OUTPUT);
+ }
+
+ public void setDoInput(Boolean doinput) {
+ setValue(KEY_DO_INPUT, doinput);
+ }
+
+ public Boolean getDoInput() {
+ return getBoolean(KEY_DO_INPUT);
+ }
+
+ public void setUseCaches(Boolean usescaches) {
+ setValue(KEY_USE_CACHES, usescaches);
+ }
+
+ public Boolean getUseCaches() {
+ return getBoolean(KEY_USE_CACHES);
+ }
+
+ public void setRequestMethod(String requestmethod) {
+ setValue(KEY_REQUEST_METHOD, requestmethod);
+ }
+
+ public String getRequestMethod() {
+ return getString(KEY_REQUEST_METHOD);
+ }
+
+
+ public void setReadTimeout(Integer readtimeout) {
+ setValue(KEY_READ_TIMEOUT, readtimeout);
+ }
+
+ public Integer getReadTimeout() {
+ return getInteger(KEY_READ_TIMEOUT);
+ }
+
+ public void setInstanceFollowRedirects(Boolean instancefollowredirects) {
+ setValue(KEY_INSTANCE_FOLLOW_REDIRECTS, instancefollowredirects);
+ }
+
+ public Boolean getInstanceFollowRedirects() {
+ return getBoolean(KEY_INSTANCE_FOLLOW_REDIRECTS);
+ }
+
+ public void setCharset(String charset) {
+ setValue(KEY_CHARSET, charset);
+ }
+
+ public String getCharset() {
+ return getString(KEY_CHARSET);
+ }
+
+ public void setContentLength(Integer contentlength) {
+ setValue(KEY_CONTENT_LENGTH, contentlength);
+ }
+
+ public Integer getContentLength() {
+ return getInteger(KEY_CONTENT_LENGTH);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Image.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Image.java
new file mode 100644
index 000000000..f58664054
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Image.java
@@ -0,0 +1,116 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ImageType;
+
+import java.util.Hashtable;
+
+/**
+ *Specifies, which image shall be used, e.g. in Alerts or on Softbuttons provided the display supports it.
+ *<p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>value</td>
+ * <td>String</td>
+ * <td>Either the static hex icon value or the binary image file name identifier (sent by PutFile).
+ * <ul>
+ * <li>Min: 0</li>
+ * <li>Max: 65535</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>imageType</td>
+ * <td>ImageType</td>
+ * <td>Describes, whether it is a static or dynamic image.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class Image extends RPCStruct {
+ public static final String KEY_VALUE = "value";
+ public static final String KEY_IMAGE_TYPE = "imageType";
+ public static final String KEY_IS_TEMPLATE = "isTemplate";
+
+ /**
+ * Constructs a newly allocated Image object
+ */
+ public Image() { }
+
+ /**
+ * Constructs a newly allocated Image object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public Image(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated Image object
+ * @param value either the static hex icon value or the binary image file name identifier (sent by PutFile)
+ * @param imageType whether it is a static or dynamic image
+ */
+ public Image(@NonNull String value, @NonNull ImageType imageType) {
+ this();
+ setValue(value);
+ setImageType(imageType);
+ }
+
+ /**
+ * Set either the static hex icon value or the binary image file name identifier (sent by PutFile)
+ * @param value either the static hex icon value or the binary image file name identifier (sent by PutFile)
+ */
+ public void setValue(@NonNull String value) {
+ setValue(KEY_VALUE, value);
+ }
+
+ /**
+ * Get either the static hex icon value or the binary image file name identifier (sent by PutFile)
+ * @return either the static hex icon value or the binary image file name identifier (sent by PutFile)
+ */
+ public String getValue() {
+ return getString(KEY_VALUE);
+ }
+
+ /**
+ * Set the image type (static or dynamic image)
+ * @param imageType whether it is a static or dynamic image
+ */
+ public void setImageType(@NonNull ImageType imageType) {
+ setValue(KEY_IMAGE_TYPE, imageType);
+ }
+
+ /**
+ * Get image type (static or dynamic image)
+ * @return the image type (static or dynamic image)
+ */
+ public ImageType getImageType() {
+ return (ImageType) getObject(ImageType.class, KEY_IMAGE_TYPE);
+ }
+
+ /**
+ * Set whether this Image is a template image whose coloring should be decided by the HMI
+ * @param isTemplate boolean that tells whether this Image is a template image
+ */
+ public void setIsTemplate(Boolean isTemplate){
+ setValue(KEY_IS_TEMPLATE, isTemplate);
+ }
+
+ /**
+ * Get whether this Image is a template image whose coloring should be decided by the HMI
+ * @return boolean that tells whether this Image is a template image
+ */
+ public Boolean getIsTemplate(){
+ return getBoolean(KEY_IS_TEMPLATE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageField.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageField.java
new file mode 100644
index 000000000..6114f28c0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageField.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.FileType;
+import com.smartdevicelink.proxy.rpc.enums.ImageFieldName;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/** <p>The name that identifies the field.For example AppIcon,SoftButton, LocationImage, etc.</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th> Version</th>
+ * </tr>
+ * <tr>
+ * <td>name</td>
+ * <td>ImageFieldName</td>
+ * <td>The name that identifies the field.{@linkplain ImageFieldName}</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>imageTypeSupported</td>
+ * <td>FileType</td>
+ * <td>The image types that are supported in this field. {@linkplain FileType}</td>
+ * <td></td>
+ * <td>maxlength: 100</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>imageResolution</td>
+ * <td>ImageResolution</td>
+ * <td>The image resolution of this field.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 3.0
+ * @see DisplayType
+ * @see MediaClockFormat
+ * @see TextFieldName
+ * @see ImageType
+ *
+ *
+ *
+ *
+ */
+
+public class ImageField extends RPCStruct {
+ public static final String KEY_IMAGE_TYPE_SUPPORTED = "imageTypeSupported";
+ public static final String KEY_IMAGE_RESOLUTION = "imageResolution";
+ public static final String KEY_NAME = "name";
+
+
+ public ImageField() { }
+
+ public ImageField(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public ImageField(@NonNull ImageFieldName name, @NonNull List<FileType> imageTypeSupported) {
+ this();
+ setName(name);
+ setImageTypeSupported(imageTypeSupported);
+ }
+
+ public ImageFieldName getName() {
+ return (ImageFieldName) getObject(ImageFieldName.class, KEY_NAME);
+ }
+ public void setName(@NonNull ImageFieldName name ) {
+ setValue(KEY_NAME, name);
+ }
+ @SuppressWarnings("unchecked")
+ public List<FileType> getImageTypeSupported() {
+ return (List<FileType>) getObject(FileType.class, KEY_IMAGE_TYPE_SUPPORTED);
+ }
+ public void setImageTypeSupported(@NonNull List<FileType> imageTypeSupported ) {
+ setValue(KEY_IMAGE_TYPE_SUPPORTED, imageTypeSupported);
+ }
+ @SuppressWarnings("unchecked")
+ public ImageResolution getImageResolution() {
+ return (ImageResolution) getObject(ImageResolution.class, KEY_IMAGE_RESOLUTION);
+ }
+ public void setImageResolution( ImageResolution imageResolution ) {
+ setValue(KEY_IMAGE_RESOLUTION, imageResolution);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageResolution.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageResolution.java
new file mode 100644
index 000000000..2eb69f652
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ImageResolution.java
@@ -0,0 +1,93 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/** The image resolution of this field.
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>resolutionWidth</td>
+ * <td>Integer</td>
+ * <td>The image resolution width.</td>
+ * <td></td>
+ * <td>minvalue:1; maxvalue: 10000</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>resolutionHeight</td>
+ * <td>Integer</td>
+ * <td>The image resolution height.</td>
+ * <td></td>
+ * <td>minvalue:1; maxvalue: 10000</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ *
+ * </table>
+ * @since SmartDeviceLink 3.0
+ * @see DisplayType
+ * @see MediaClockFormat
+ * @see TextFieldName
+ * @see ImageType
+ *
+ */
+
+public class ImageResolution extends RPCStruct {
+ public static final String KEY_RESOLUTION_WIDTH = "resolutionWidth";
+ public static final String KEY_RESOLUTION_HEIGHT = "resolutionHeight";
+
+ public ImageResolution() {}
+ /**
+ * <p>
+ * Constructs a new ImageResolution object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public ImageResolution(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public ImageResolution(@NonNull Integer resolutionWidth, @NonNull Integer resolutionHeight) {
+ this();
+ setResolutionWidth(resolutionWidth);
+ setResolutionHeight(resolutionHeight);
+ }
+
+ public void setResolutionWidth(@NonNull Integer resolutionWidth) {
+ setValue(KEY_RESOLUTION_WIDTH, resolutionWidth);
+ }
+
+ public Integer getResolutionWidth() {
+ return getInteger(KEY_RESOLUTION_WIDTH);
+ }
+
+ public void setResolutionHeight(@NonNull Integer resolutionHeight) {
+ setValue(KEY_RESOLUTION_HEIGHT, resolutionHeight);
+ }
+
+ public Integer getResolutionHeight() {
+ return getInteger(KEY_RESOLUTION_HEIGHT);
+ }
+
+ @Override
+ public String toString() {
+ return "width=" + String.valueOf(getResolutionWidth()) +
+ ", height=" + String.valueOf(getResolutionHeight());
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/KeyboardProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/KeyboardProperties.java
new file mode 100644
index 000000000..d74914cb3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/KeyboardProperties.java
@@ -0,0 +1,140 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.KeyboardLayout;
+import com.smartdevicelink.proxy.rpc.enums.KeypressMode;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/** This mode causes the interaction to immediately display a keyboard entry through the HMI.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th> Additional</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>language</td>
+ * <td>Language</td>
+ * <td>false</td>
+ * <td></td>
+ * <td>The keyboard language. </td>
+ * </tr>
+ * <tr>
+ * <td>keyboardLayout</td>
+ * <td>KeyboardLayout</td>
+ * <td>false</td>
+ * <td></td>
+ * <td>Desired keyboard layout.</td>
+ * </tr>
+ * <tr>
+ * <td>sendDynamicEntry</td>
+ * <td>Boolean</td>
+ * <td>false</td>
+ * <td></td>
+ * <td>In this mode, all keypresses will be sent as they occur. If disabled, entire string of text will be returned only once submitted by user.If omitted, this value will be set to FALSE.</td>
+ * </tr>
+ * <tr>
+ * <td>keypressMode</td>
+ * <td>KeypressMode</td>
+ * <td>False</td>
+ * <td></td>
+ * <td>Desired keypress mode.If omitted, this value will be set to RESEND_CURRENT_ENTRY. </td>
+ * </tr>
+ * <tr>
+ * <td>limitedCharacterList</td>
+ * <td>String</td>
+ * <td>false</td>
+ * <td>Array = true maxlength = 1 minsize = 1 maxsize = 100</td>
+ * <td>Array of keyboard characters to enable. All omitted characters will be greyed out (disabled) on the keyboard. If omitted, the entire keyboard will be enabled.</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>autoCompleteText</td>
+ * <td>String</td>
+ * <td>false</td>
+ * <td>maxlength = 1000 </td>
+ * <td>Allows an app to prepopulate the text field with a suggested or completed entry as the user types.</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 3.0
+ *@see ButtonName
+ *
+ */
+
+public class KeyboardProperties extends RPCStruct {
+ public static final String KEY_KEYPRESS_MODE = "keypressMode";
+ public static final String KEY_KEYBOARD_LAYOUT = "keyboardLayout";
+ public static final String KEY_LIMITED_CHARACTER_LIST = "limitedCharacterList";
+ public static final String KEY_AUTO_COMPLETE_TEXT = "autoCompleteText";
+ public static final String KEY_LANGUAGE = "language";
+
+ private static final KeypressMode KEYPRESS_MODE_DEFAULT = KeypressMode.RESEND_CURRENT_ENTRY;
+
+ public KeyboardProperties() {
+ setValue(KEY_KEYPRESS_MODE, KEYPRESS_MODE_DEFAULT);
+ }
+
+ public KeyboardProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ if (!store.containsKey(KEY_KEYPRESS_MODE)) {
+ setValue(KEY_KEYPRESS_MODE, KEYPRESS_MODE_DEFAULT);
+ }
+ }
+
+ public Language getLanguage() {
+ return (Language) getObject(Language.class, KEY_LANGUAGE);
+ }
+
+ public void setLanguage(Language language) {
+ setValue(KEY_LANGUAGE, language);
+ }
+
+ public KeyboardLayout getKeyboardLayout() {
+ return (KeyboardLayout) getObject(KeyboardLayout.class, KEY_KEYBOARD_LAYOUT);
+ }
+
+ public void setKeyboardLayout(KeyboardLayout keyboardLayout) {
+ setValue(KEY_KEYBOARD_LAYOUT, keyboardLayout);
+ }
+
+ public KeypressMode getKeypressMode() {
+ KeypressMode kp = (KeypressMode) getObject(KeypressMode.class, KEY_KEYPRESS_MODE);
+ if(kp == null){
+ kp = KEYPRESS_MODE_DEFAULT;
+ }
+ return kp;
+ }
+
+ public void setKeypressMode(KeypressMode keypressMode) {
+ if (keypressMode != null) {
+ setValue(KEY_KEYPRESS_MODE, keypressMode);
+ } else {
+ setValue(KEY_KEYPRESS_MODE, KEYPRESS_MODE_DEFAULT);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getLimitedCharacterList() {
+ return (List<String>) getObject(String.class, KEY_LIMITED_CHARACTER_LIST);
+ }
+
+ public void setLimitedCharacterList(List<String> limitedCharacterList) {
+ setValue(KEY_LIMITED_CHARACTER_LIST, limitedCharacterList);
+ }
+
+ public String getAutoCompleteText() {
+ return (String) getObject(String.class, KEY_AUTO_COMPLETE_TEXT);
+ }
+
+ public void setAutoCompleteText(String autoCompleteText) {
+ setValue(KEY_AUTO_COMPLETE_TEXT, autoCompleteText);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/LightCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightCapabilities.java
new file mode 100644
index 000000000..b23c8356c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightCapabilities.java
@@ -0,0 +1,113 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.LightName;
+
+import java.util.Hashtable;
+
+public class LightCapabilities extends RPCStruct {
+
+ public static final String KEY_NAME = "name";
+ public static final String KEY_DENSITY_AVAILABLE = "densityAvailable";
+ public static final String KEY_RGB_COLOR_SPACE_AVAILABLE = "rgbColorSpaceAvailable";
+ public static final String KEY_STATUS_AVAILABLE = "statusAvailable";
+
+ /**
+ * Constructs a newly allocated LightCapabilities object
+ */
+ public LightCapabilities() {
+ }
+
+ /**
+ * Constructs a newly allocated LightCapabilities object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public LightCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated LightCapabilities object
+ *
+ * @param name name of Light
+ */
+ public LightCapabilities(@NonNull LightName name) {
+ this();
+ setName(name);
+ }
+
+ /**
+ * Sets the name portion of the LightCapabilities class
+ *
+ * @param name
+ */
+ public void setName(@NonNull LightName name) {
+ setValue(KEY_NAME, name);
+ }
+
+ /**
+ * Gets the name portion of the LightCapabilities class
+ *
+ * @return LightName
+ */
+ public LightName getName() {
+ return (LightName) getObject(LightName.class, KEY_NAME);
+ }
+
+ /**
+ * Sets the densityAvailable portion of the LightCapabilities class
+ *
+ * @param densityAvailable Indicates if the light's density can be set remotely (similar to a dimmer).
+ */
+ public void setDensityAvailable(Boolean densityAvailable) {
+ setValue(KEY_DENSITY_AVAILABLE, densityAvailable);
+ }
+
+ /**
+ * Gets the densityAvailable portion of the LightCapabilities class
+ *
+ * @return Boolean - Indicates if the light's density can be set remotely (similar to a dimmer).
+ */
+ public Boolean getDensityAvailable() {
+ return getBoolean(KEY_DENSITY_AVAILABLE);
+ }
+
+ /**
+ * Sets the RGBColorSpaceAvailable portion of the LightCapabilities class
+ *
+ * @param RGBColorSpaceAvailable Indicates if the light's color can be set remotely by using the RGB color space.
+ */
+ public void setRGBColorSpaceAvailable(Boolean RGBColorSpaceAvailable) {
+ setValue(KEY_RGB_COLOR_SPACE_AVAILABLE, RGBColorSpaceAvailable);
+ }
+
+ /**
+ * Gets the RGBColorSpaceAvailable portion of the LightCapabilities class
+ *
+ * @return Boolean - Indicates if the light's color can be set remotely by using the RGB color space.
+ */
+ public Boolean getRGBColorSpaceAvailable() {
+ return getBoolean(KEY_RGB_COLOR_SPACE_AVAILABLE);
+ }
+
+ /**
+ * Sets the statusAvailable portion of the LightCapabilities class
+ *
+ * @param statusAvailable 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.
+ */
+ public void setStatusAvailable(Boolean statusAvailable) {
+ setValue(KEY_STATUS_AVAILABLE, statusAvailable);
+ }
+
+ /**
+ * Gets the statusAvailable portion of the LightCapabilities class
+ *
+ * @return Boolean - 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.
+ */
+ public Boolean getStatusAvailable() {
+ return getBoolean(KEY_STATUS_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlCapabilities.java
new file mode 100644
index 000000000..ab84da275
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlCapabilities.java
@@ -0,0 +1,78 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class LightControlCapabilities extends RPCStruct {
+ public static final String KEY_MODULE_NAME = "moduleName";
+ public static final String KEY_SUPPORTED_LIGHTS = "supportedLights";
+
+ /**
+ * Constructs a new LightControlCapabilities object
+ */
+ public LightControlCapabilities() {
+ }
+
+ /**
+ * <p>Constructs a new LightControlCapabilities object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public LightControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated LightControlCapabilities object
+ *
+ * @param moduleName short friendly name of the light control module.
+ * @param supportedLights An array of available LightCapabilities that are controllable.
+ */
+ public LightControlCapabilities(@NonNull String moduleName, @NonNull List<LightCapabilities> supportedLights) {
+ this();
+ setModuleName(moduleName);
+ setSupportedLights(supportedLights);
+ }
+
+ /**
+ * Sets the moduleName portion of the LightControlCapabilities class
+ *
+ * @param moduleName The short friendly name of the light control module. It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Gets the moduleName portion of the LightControlCapabilities class
+ *
+ * @return String - The short friendly name of the light control module. It should not be used to identify a module by mobile application.
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Gets the supportedLights portion of the LightControlCapabilities class
+ *
+ * @return List<LightCapabilities> - An array of available LightCapabilities that are controllable.
+ */
+ @SuppressWarnings("unchecked")
+ public List<LightCapabilities> getSupportedLights() {
+ return (List<LightCapabilities>) getObject(LightCapabilities.class, KEY_SUPPORTED_LIGHTS);
+ }
+
+ /**
+ * Sets the supportedLights portion of the LightControlCapabilities class
+ *
+ * @param supportedLights An array of available LightCapabilities that are controllable.
+ */
+ public void setSupportedLights(@NonNull List<LightCapabilities> supportedLights) {
+ setValue(KEY_SUPPORTED_LIGHTS, supportedLights);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlData.java
new file mode 100644
index 000000000..a78b979c5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightControlData.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class LightControlData extends RPCStruct {
+ public static final String KEY_LIGHT_STATE = "lightState";
+
+ /**
+ * Constructs a new LightControlData object
+ */
+ public LightControlData() {
+ }
+
+ /**
+ * <p>Constructs a new LightControlData object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public LightControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated LightControlData object
+ *
+ * @param lightState An array of LightNames and their current or desired status.
+ * Status of the LightNames that are not listed in the array shall remain unchanged.
+ */
+ public LightControlData(@NonNull List<LightState> lightState) {
+ this();
+ setLightState(lightState);
+ }
+
+ /**
+ * Gets the lightState portion of the LightControlData class
+ *
+ * @return List<LightState> - An array of LightNames and their current or desired status. Status of the LightNames that are not listed in the array shall remain unchanged.
+ */
+ @SuppressWarnings("unchecked")
+ public List<LightState> getLightState() {
+ return (List<LightState>) getObject(LightState.class, KEY_LIGHT_STATE);
+ }
+
+ /**
+ * Sets the lightState portion of the LightControlData class
+ *
+ * @param lightState An array of LightNames and their current or desired status. Status of the LightNames that are not listed in the array shall remain unchanged.
+ */
+ public void setLightState(@NonNull List<LightState> lightState) {
+ setValue(KEY_LIGHT_STATE, lightState);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/LightState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightState.java
new file mode 100644
index 000000000..90315f785
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/LightState.java
@@ -0,0 +1,119 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.LightName;
+import com.smartdevicelink.proxy.rpc.enums.LightStatus;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+public class LightState extends RPCStruct {
+ public static final String KEY_ID = "id";
+ public static final String KEY_STATUS = "status";
+ public static final String KEY_DENSITY = "density";
+ public static final String KEY_COLOR = "color";
+
+ /**
+ * Constructs a new LightState object
+ */
+ public LightState() {
+ }
+
+ /**
+ * <p>Constructs a new LightState object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public LightState(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated LightState object
+ *
+ * @param id The name of a light or a group of lights.
+ * @param status Status of Light.
+ */
+ public LightState(@NonNull LightName id, @NonNull LightStatus status) {
+ this();
+ setId(id);
+ setStatus(status);
+ }
+
+ /**
+ * Sets the id portion of the LightState class
+ *
+ * @param id The name of a light or a group of lights.
+ */
+ public void setId(@NonNull LightName id) {
+ setValue(KEY_ID, id);
+ }
+
+ /**
+ * Gets the id portion of the LightState class
+ *
+ * @return LightName - The name of a light or a group of lights.
+ */
+ public LightName getId() {
+ return (LightName) getObject(LightName.class, KEY_ID);
+ }
+
+ /**
+ * Sets the status portion of the LightState class
+ *
+ * @param status
+ */
+ public void setStatus(@NonNull LightStatus status) {
+ setValue(KEY_STATUS, status);
+ }
+
+ /**
+ * Gets the status portion of the LightState class
+ *
+ * @return LightStatus
+ */
+ public LightStatus getStatus() {
+ return (LightStatus) getObject(LightStatus.class, KEY_STATUS);
+ }
+
+ /**
+ * Gets the density portion of the LightState class
+ *
+ * @return Float
+ */
+ public Float getDensity() {
+ Object value = getValue(KEY_DENSITY);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ /**
+ * Sets the density portion of the LightState class
+ *
+ * @param density
+ */
+ public void setDensity(Float density) {
+ setValue(KEY_DENSITY, density);
+ }
+
+ /**
+ * Gets the color portion of the LightState class
+ *
+ * @return RGBColor
+ */
+ @SuppressWarnings("unchecked")
+ public RGBColor getColor() {
+ return (RGBColor) getObject(RGBColor.class, KEY_COLOR);
+ }
+
+ /**
+ * Sets the color portion of the LightState class
+ *
+ * @param color
+ */
+ public void setColor(RGBColor color) {
+ setValue(KEY_COLOR, color);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFiles.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFiles.java
new file mode 100644
index 000000000..faeaa7977
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFiles.java
@@ -0,0 +1,45 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+/**
+ * Requests the current list of resident filenames for the registered app. Not
+ * supported on First generation SDL vehicles.
+ *
+ * <p><b>Request</b></p>
+ * <p>No parameters.</p>
+ * <p><b>Response:</b></p>
+ * Returns the current list of resident filenames for the registered app along with the current space available.
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR </p>
+ * <p>REJECTED</p>
+ * @since SmartDeviceLink 2.0
+ */
+public class ListFiles extends RPCRequest {
+
+ /**
+ * Constructs a new ListFiles object
+ */
+ public ListFiles() {
+ super(FunctionID.LIST_FILES.toString());
+ }
+
+ /**
+ * <p>Constructs a new ListFiles object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ListFiles(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFilesResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFilesResponse.java
new file mode 100644
index 000000000..b525bc599
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ListFilesResponse.java
@@ -0,0 +1,94 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.util.Version;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * List Files Response is sent, when ListFiles has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ListFilesResponse extends RPCResponse {
+ public static final String KEY_FILENAMES = "filenames";
+ public static final String KEY_SPACE_AVAILABLE = "spaceAvailable";
+ private static final Integer MAX_VALUE = 2000000000;
+
+ /**
+ * Constructs a new ListFilesResponse object
+ */
+ public ListFilesResponse() {
+ super(FunctionID.LIST_FILES.toString());
+ }
+ public ListFilesResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * @deprecated use {@link ListFilesResponse#ListFilesResponse(Boolean, Result)} instead <br>
+ *
+ * Constructs a new ListFilesResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ @Deprecated
+ public ListFilesResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull Integer spaceAvailable) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ setSpaceAvailable(spaceAvailable);
+ }
+
+ /**
+ * Constructs a new ListFilesResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ListFilesResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ /**
+ * SpaceAvailable became optional as of RPC Spec 5.0. If a system that expected the value to
+ * always have a value connects to such a system, it could return null. Check to see if there
+ * is a value, and if not, set it to MAX_VALUE as defined by the RPC Spec
+ *
+ * @param rpcVersion the rpc spec version that has been negotiated. If value is null the
+ * the max value of RPC spec version this library supports should be used.
+ * @param formatParams if true, the format method will be called on subsequent params
+ */
+ @Override
+ public void format(Version rpcVersion, boolean formatParams){
+ if (rpcVersion == null || rpcVersion.getMajor() >= 5){
+ if (getSpaceAvailable() == null){
+ setSpaceAvailable(MAX_VALUE);
+ }
+ }
+ super.format(rpcVersion, formatParams);
+ }
+
+ public void setFilenames(List<String> filenames) {
+ setParameters(KEY_FILENAMES, filenames);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getFilenames() {
+ return (List<String>) getObject(String.class, KEY_FILENAMES);
+ }
+
+ public void setSpaceAvailable(Integer spaceAvailable) {
+ setParameters(KEY_SPACE_AVAILABLE, spaceAvailable);
+ }
+
+ public Integer getSpaceAvailable() {
+ return getInteger(KEY_SPACE_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/LocationDetails.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/LocationDetails.java
new file mode 100644
index 000000000..51d150a2b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/LocationDetails.java
@@ -0,0 +1,81 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class LocationDetails extends RPCStruct{
+ public static final String KEY_COORDINATE = "coordinate";
+ public static final String KEY_LOCATION_NAME = "locationName";
+ public static final String KEY_ADDRESS_LINES = "addressLines";
+ public static final String KEY_LOCATION_DESCRIPTION = "locationDescription";
+ public static final String KEY_PHONE_NUMBER = "phoneNumber";
+ public static final String KEY_LOCATION_IMAGE = "locationImage";
+ public static final String KEY_SEARCH_ADDRESS = "searchAddress";
+
+ public LocationDetails() {
+ }
+
+ public LocationDetails(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Coordinate getCoordinate() {
+ return (Coordinate) getObject(Coordinate.class, KEY_COORDINATE);
+ }
+ public void setCoordinate(Coordinate coordinate) {
+ setValue(KEY_COORDINATE, coordinate);
+ }
+
+ public String getLocationName() {
+ return getString(KEY_LOCATION_NAME);
+ }
+
+ public void setLocationName(String locationName) {
+ setValue(KEY_LOCATION_NAME, locationName);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getAddressLines() {
+ return (List<String>) getObject(String.class, KEY_ADDRESS_LINES);
+ }
+
+ public void setAddressLines(List<String> addressLines) {
+ setValue(KEY_ADDRESS_LINES, addressLines);
+ }
+
+ public String getLocationDescription() {
+ return getString(KEY_LOCATION_DESCRIPTION);
+ }
+
+ public void setLocationDescription(String locationDescription) {
+ setValue(KEY_LOCATION_DESCRIPTION, locationDescription);
+ }
+
+ public String getPhoneNumber() {
+ return getString(KEY_PHONE_NUMBER);
+ }
+
+ public void setPhoneNumber(String phoneNumber) {
+ setValue(KEY_PHONE_NUMBER, phoneNumber);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Image getLocationImage() {
+ return (Image) getObject(Image.class, KEY_LOCATION_IMAGE);
+ }
+
+ public void setLocationImage(Image locationImage) {
+ setValue(KEY_LOCATION_IMAGE, locationImage);
+ }
+
+ @SuppressWarnings("unchecked")
+ public OasisAddress getSearchAddress() {
+ return (OasisAddress) getObject(OasisAddress.class, KEY_SEARCH_ADDRESS);
+ }
+ public void setSearchAddress(OasisAddress searchAddress) {
+ setValue(KEY_SEARCH_ADDRESS, searchAddress);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageCushionFirmness.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageCushionFirmness.java
new file mode 100644
index 000000000..8e87eff7d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageCushionFirmness.java
@@ -0,0 +1,79 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.MassageCushion;
+
+import java.util.Hashtable;
+
+/**
+ * The intensity or firmness of a cushion.
+ */
+public class MassageCushionFirmness extends RPCStruct {
+ public static final String KEY_CUSHION = "cushion";
+ public static final String KEY_FIRMNESS = "firmness";
+
+ /**
+ * Constructs a new MassageCushionFirmness object
+ */
+ public MassageCushionFirmness() {
+ }
+
+ /**
+ * <p>Constructs a new MassageCushionFirmness object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public MassageCushionFirmness(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated MassageCushionFirmness object
+ * @param cushion type of MassageCushion for multi-contour massage seat
+ * @param firmness Min: 0 Max: 100
+ */
+ public MassageCushionFirmness(@NonNull MassageCushion cushion, @NonNull Integer firmness) {
+ this();
+ setCushion(cushion);
+ setFirmness(firmness);
+ }
+
+ /**
+ * Sets the cushion portion of the MassageCushionFirmness class
+ *
+ * @param cushion
+ */
+ public void setCushion(@NonNull MassageCushion cushion) {
+ setValue(KEY_CUSHION, cushion);
+ }
+
+ /**
+ * Gets the cushion portion of the MassageCushionFirmness class
+ *
+ * @return MassageCushion.
+ */
+ public MassageCushion getCushion() {
+ return (MassageCushion) getObject(MassageCushion.class, KEY_CUSHION);
+ }
+
+ /**
+ * Sets the firmness portion of the MassageCushionFirmness class
+ *
+ * @param firmness
+ */
+ public void setFirmness(@NonNull Integer firmness) {
+ setValue(KEY_FIRMNESS, firmness);
+ }
+
+ /**
+ * Gets the firmness portion of the MassageCushionFirmness class
+ *
+ * @return Integer
+ */
+ public Integer getFirmness() {
+ return getInteger(KEY_FIRMNESS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageModeData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageModeData.java
new file mode 100644
index 000000000..857d4dc7c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MassageModeData.java
@@ -0,0 +1,80 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.MassageMode;
+import com.smartdevicelink.proxy.rpc.enums.MassageZone;
+
+import java.util.Hashtable;
+
+/**
+ * Specify the mode of a massage zone.
+ */
+public class MassageModeData extends RPCStruct {
+ public static final String KEY_MASSAGE_ZONE = "massageZone";
+ public static final String KEY_MASSAGE_MODE = "massageMode";
+
+ /**
+ * Constructs a new MassageModeData object
+ */
+ public MassageModeData() {
+ }
+
+ /**
+ * <p>Constructs a new MassageModeData object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public MassageModeData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated MassageModeData object
+ * @param massageZone type of MassageZone for multi-contour massage seat
+ * @param massageMode mode of massage zone.
+ */
+ public MassageModeData(@NonNull MassageZone massageZone, @NonNull MassageMode massageMode) {
+ this();
+ setMassageZone(massageZone);
+ setMassageMode(massageMode);
+ }
+
+ /**
+ * Sets the massageZone portion of the MassageModeData class
+ *
+ * @param massageZone
+ */
+ public void setMassageZone(@NonNull MassageZone massageZone) {
+ setValue(KEY_MASSAGE_ZONE, massageZone);
+ }
+
+ /**
+ * Gets the massageZone portion of the MassageModeData class
+ *
+ * @return MassageZone.
+ */
+ public MassageZone getMassageZone() {
+ return (MassageZone) getObject(MassageZone.class, KEY_MASSAGE_ZONE);
+ }
+
+ /**
+ * Gets the massageMode portion of the MassageModeData class
+ *
+ * @return MassageMode
+ */
+ public MassageMode getMassageMode() {
+ return (MassageMode) getObject(MassageMode.class, KEY_MASSAGE_MODE);
+ }
+
+ /**
+ * Sets the massageMode portion of the MassageModeData class
+ *
+ * @param massageMode
+ */
+ public void setMassageMode(@NonNull MassageMode massageMode) {
+ setValue(KEY_MASSAGE_MODE, massageMode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceData.java
new file mode 100644
index 000000000..bf4b960eb
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceData.java
@@ -0,0 +1,264 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.MediaType;
+
+import java.util.Hashtable;
+
+/**
+ * This data is related to what a media service should provide
+ */
+public class MediaServiceData extends RPCStruct {
+
+ public static final String KEY_MEDIA_TYPE = "mediaType";
+ public static final String KEY_MEDIA_TITLE = "mediaTitle";
+ public static final String KEY_MEDIA_ARTIST = "mediaArtist";
+ public static final String KEY_MEDIA_ALBUM = "mediaAlbum";
+ public static final String KEY_PLAYLIST_NAME = "playlistName";
+ public static final String KEY_IS_EXPLICIT = "isExplicit";
+ public static final String KEY_TRACK_PLAYBACK_PROGRESS = "trackPlaybackProgress";
+ public static final String KEY_TRACK_PLAYBACK_DURATION = "trackPlaybackDuration";
+ public static final String KEY_QUEUE_PLAYBACK_PROGRESS = "queuePlaybackProgress";
+ public static final String KEY_QUEUE_PLAYBACK_DURATION = "queuePlaybackDuration";
+ public static final String KEY_QUEUE_CURRENT_TRACK_NUMBER = "queueCurrentTrackNumber";
+ public static final String KEY_QUEUE_TOTAL_TRACK_COUNT = "queueTotalTrackCount";
+
+ // Constructors
+
+ public MediaServiceData() { }
+
+ public MediaServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param mediaType - The type of the currently playing or paused track.
+ */
+ public void setMediaType(MediaType mediaType) {
+ setValue(KEY_MEDIA_TYPE, mediaType);
+ }
+
+ /**
+ * @return mediaType - The type of the currently playing or paused track.
+ */
+ public MediaType getMediaType() {
+ return (MediaType) getObject(MediaType.class,KEY_MEDIA_TYPE);
+ }
+
+ /**
+ * Music: The name of the current track
+ * Podcast: The name of the current episode
+ * Audiobook: The name of the current chapter
+ * @param mediaTitle -
+ */
+ public void setMediaTitle(String mediaTitle) {
+ setValue(KEY_MEDIA_TITLE, mediaTitle);
+ }
+
+ /**
+ * Music: The name of the current track
+ * Podcast: The name of the current episode
+ * Audiobook: The name of the current chapter
+ * @return mediaTitle -
+ */
+ public String getMediaTitle() {
+ return getString(KEY_MEDIA_TITLE);
+ }
+
+ /**
+ * Music: The name of the current album artist
+ * Podcast: The provider of the podcast (hosts, network, company)
+ * Audiobook: The book author's name
+ * @param mediaArtist -
+ */
+ public void setMediaArtist(String mediaArtist) {
+ setValue(KEY_MEDIA_ARTIST, mediaArtist);
+ }
+
+ /**
+ * Music: The name of the current album artist
+ * Podcast: The provider of the podcast (hosts, network, company)
+ * Audiobook: The book author's name
+ * @return mediaArtist -
+ */
+ public String getMediaArtist() {
+ return getString(KEY_MEDIA_ARTIST);
+ }
+
+ /**
+ * Music: The name of the current album
+ * Podcast: The name of the current podcast show
+ * Audiobook: The name of the current book
+ * @param mediaAlbum -
+ */
+ public void setMediaAlbum(String mediaAlbum) {
+ setValue(KEY_MEDIA_ALBUM, mediaAlbum);
+ }
+
+ /**
+ * Music: The name of the current album
+ * Podcast: The name of the current podcast show
+ * Audiobook: The name of the current book
+ * @return mediaAlbum -
+ */
+ public String getMediaAlbum() {
+ return getString(KEY_MEDIA_ALBUM);
+ }
+
+ /**
+ * Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null
+ * Podcast: The name of the playlist, if the user is playing from a playlist, otherwise, Null
+ * Audiobook: Likely not applicable, possibly a collection or "playlist" of books
+ * @param playlistName -
+ */
+ public void setPlaylistName(String playlistName) {
+ setValue(KEY_PLAYLIST_NAME, playlistName);
+ }
+
+ /**
+ * Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null
+ * Podcast: The name of the playlist, if the user is playing from a playlist, otherwise, Null
+ * Audiobook: Likely not applicable, possibly a collection or "playlist" of books
+ * @return playlistName -
+ */
+ public String getPlaylistName() {
+ return getString(KEY_PLAYLIST_NAME);
+ }
+
+ /**
+ * @param isExplicit - Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content
+ */
+ public void setIsExplicit(Boolean isExplicit) {
+ setValue(KEY_IS_EXPLICIT, isExplicit);
+ }
+
+ /**
+ * @return isExplicit - Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content
+ */
+ public Boolean getIsExplicit() {
+ return getBoolean(KEY_IS_EXPLICIT);
+ }
+
+ /**
+ * Music: The current progress of the track in seconds
+ * Podcast: The current progress of the episode in seconds
+ * Audiobook: The current progress of the current segment (e.g. the chapter) in seconds
+ * @param trackPlaybackProgress -
+ */
+ public void setTrackPlaybackProgress(Integer trackPlaybackProgress) {
+ setValue(KEY_TRACK_PLAYBACK_PROGRESS, trackPlaybackProgress);
+ }
+
+ /**
+ * Music: The current progress of the track in seconds
+ * Podcast: The current progress of the episode in seconds
+ * Audiobook: The current progress of the current segment (e.g. the chapter) in seconds
+ * @return trackPlaybackProgress -
+ */
+ public Integer getTrackPlaybackProgress() {
+ return getInteger(KEY_TRACK_PLAYBACK_PROGRESS);
+ }
+
+ /**
+ * Music: The total duration of the track in seconds
+ * Podcast: The total duration of the episode in seconds
+ * Audiobook: The total duration of the current segment (e.g. the chapter) in seconds
+ * @param trackPlaybackDuration -
+ */
+ public void setTrackPlaybackDuration(Integer trackPlaybackDuration) {
+ setValue(KEY_TRACK_PLAYBACK_DURATION, trackPlaybackDuration);
+ }
+
+ /**
+ * Music: The total duration of the track in seconds
+ * Podcast: The total duration of the episode in seconds
+ * Audiobook: The total duration of the current segment (e.g. the chapter) in seconds
+ * @return trackPlaybackDuration -
+ */
+ public Integer getTrackPlaybackDuration() {
+ return getInteger(KEY_TRACK_PLAYBACK_DURATION);
+ }
+
+ /**
+ * Music: The current progress of the playback queue in seconds
+ * Podcast: The current progress of the playback queue in seconds
+ * Audiobook: The current progress of the playback queue (e.g. the book) in seconds
+ * @param queuePlaybackProgress -
+ */
+ public void setQueuePlaybackProgress(Integer queuePlaybackProgress) {
+ setValue(KEY_QUEUE_PLAYBACK_PROGRESS, queuePlaybackProgress);
+ }
+
+ /**
+ * Music: The current progress of the playback queue in seconds
+ * Podcast: The current progress of the playback queue in seconds
+ * Audiobook: The current progress of the playback queue (e.g. the book) in seconds
+ * @return queuePlaybackProgress -
+ */
+ public Integer getQueuePlaybackProgress() {
+ return getInteger(KEY_QUEUE_PLAYBACK_PROGRESS);
+ }
+
+ /**
+ * Music: The total duration of the playback queue in seconds
+ * Podcast: The total duration of the playback queue in seconds
+ * Audiobook: The total duration of the playback queue (e.g. the book) in seconds
+ * @param queuePlaybackDuration -
+ */
+ public void setQueuePlaybackDuration(Integer queuePlaybackDuration) {
+ setValue(KEY_QUEUE_PLAYBACK_DURATION, queuePlaybackDuration);
+ }
+
+ /**
+ * Music: The total duration of the playback queue in seconds
+ * Podcast: The total duration of the playback queue in seconds
+ * Audiobook: The total duration of the playback queue (e.g. the book) in seconds
+ * @return queuePlaybackDuration -
+ */
+ public Integer getQueuePlaybackDuration() {
+ return getInteger(KEY_QUEUE_PLAYBACK_DURATION);
+ }
+
+ /**
+ * Music: The current number (1 based) of the track in the playback queue
+ * Podcast: The current number (1 based) of the episode in the playback queue
+ * Audiobook: The current number (1 based) of the episode in the playback queue (e.g. the chapter number in the book)
+ * @param queueCurrentTrackNumber -
+ */
+ public void setQueueCurrentTrackNumber(Integer queueCurrentTrackNumber) {
+ setValue(KEY_QUEUE_CURRENT_TRACK_NUMBER, queueCurrentTrackNumber);
+ }
+
+ /**
+ * Music: The current number (1 based) of the track in the playback queue
+ * Podcast: The current number (1 based) of the episode in the playback queue
+ * Audiobook: The current number (1 based) of the episode in the playback queue (e.g. the chapter number in the book)
+ * @return queueCurrentTrackNumber -
+ */
+ public Integer getQueueCurrentTrackNumber() {
+ return getInteger(KEY_QUEUE_CURRENT_TRACK_NUMBER);
+ }
+
+ /**
+ * Music: The total number of tracks in the playback queue
+ * Podcast: The total number of episodes in the playback queue
+ * Audiobook: The total number of sections in the playback queue (e.g. the number of chapters in the book)
+ * @param queueTotalTrackCount -
+ */
+ public void setQueueTotalTrackCount(Integer queueTotalTrackCount) {
+ setValue(KEY_QUEUE_TOTAL_TRACK_COUNT, queueTotalTrackCount);
+ }
+
+ /**
+ * Music: The total number of tracks in the playback queue
+ * Podcast: The total number of episodes in the playback queue
+ * Audiobook: The total number of sections in the playback queue (e.g. the number of chapters in the book)
+ * @return queueTotalTrackCount -
+ */
+ public Integer getQueueTotalTrackCount() {
+ return getInteger(KEY_QUEUE_TOTAL_TRACK_COUNT);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceManifest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceManifest.java
new file mode 100644
index 000000000..22d66e7e7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MediaServiceManifest.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+
+public class MediaServiceManifest extends RPCStruct {
+
+ public MediaServiceManifest() { }
+
+ public MediaServiceManifest(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MenuParams.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MenuParams.java
new file mode 100644
index 000000000..841cf6b90
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MenuParams.java
@@ -0,0 +1,151 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ * Used when adding a sub menu to an application menu or existing sub menu.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>parentID</td>
+ * <td>Integer</td>
+ * <td>The unique ID of an existing submenu to which a command will be added.
+ * If this element is not provided, the command will be added to the top level of the Command Menu.
+ * <ul>
+ * <li>Min: 0</li>
+ * <li>Max: 2000000000</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>position</td>
+ * <td>Integer</td>
+ * <td>Position within the items of the parent Command Menu. 0 will insert at the front, 1 will insert after the first existing element, etc.
+ * Position of any submenu will always be located before the return and exit options.
+ * <ul>
+ * <li>Min Value: 0</li>
+ * <li>Max Value: 1000</li>
+ * <li>If position is greater or equal than the number of items in the parent Command Menu, the sub menu will be appended to the end of that Command Menu.</li>
+ * <li>If this element is omitted, the entry will be added at the end of the parent menu.</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuName</td>
+ * <td>String</td>
+ * <td>Text which appears in menu, representing this command.
+ * <ul>
+ * <li>Min: 1</li>
+ * <li>Max: 100</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ * @see AddCommand
+ * @see AddSubMenu
+ */
+public class MenuParams extends RPCStruct {
+ public static final String KEY_PARENT_ID = "parentID";
+ public static final String KEY_POSITION = "position";
+ public static final String KEY_MENU_NAME = "menuName";
+ /**
+ * Constructs a newly allocated MenuParams object
+ */
+ public MenuParams() { }
+ /**
+ * Constructs a newly allocated MenuParams object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public MenuParams(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated MenuParams object
+ * @param menuName the menu name
+ */
+ public MenuParams(@NonNull String menuName) {
+ this();
+ setMenuName(menuName);
+ }
+ /**
+ * Get the unique ID of an existing submenu to which a command will be added.
+ * If this element is not provided, the command will be added to the top level of the Command Menu.
+ * @return parentID Min: 0 Max: 2000000000
+ */
+ public Integer getParentID() {
+ return getInteger( KEY_PARENT_ID );
+ }
+ /**
+ * Set the unique ID of an existing submenu to which a command will be added.
+ * If this element is not provided, the command will be added to the top level of the Command Menu.
+ * @param parentID Min: 0; Max: 2000000000
+ */
+ public void setParentID( Integer parentID ) {
+ setValue(KEY_PARENT_ID, parentID);
+ }
+ /**
+ * Get the position within the items of the parent Command Menu. 0 will insert at the front, 1 will insert after the first existing element, etc.
+ * Position of any submenu will always be located before the return and exit options.
+ * <ul>
+ * <li>Min Value: 0</li>
+ * <li>Max Value: 1000</li>
+ * <li>If position is greater or equal than the number of items in the parent Command Menu, the sub menu will be appended to the end of that Command Menu.</li>
+ * <li>If this element is omitted, the entry will be added at the end of the parent menu.</li>
+ * </ul>
+ * @return the position within the items of the parent Command Menu
+ */
+ public Integer getPosition() {
+ return getInteger( KEY_POSITION );
+ }
+ /**
+ * Set the position within the items of the parent Command Menu. 0 will insert at the front, 1 will insert after the first existing element, etc.
+ * Position of any submenu will always be located before the return and exit options.
+ * <ul>
+ * <li>Min Value: 0</li>
+ * <li>Max Value: 1000</li>
+ * <li>If position is greater or equal than the number of items in the parent Command Menu, the sub menu will be appended to the end of that Command Menu.</li>
+ * <li>If this element is omitted, the entry will be added at the end of the parent menu.</li>
+ * </ul>
+ * @param position Mix: 0 Max: 1000
+ */
+ public void setPosition( Integer position ) {
+ setValue(KEY_POSITION, position);
+ }
+ /**
+ * Get the text which appears in menu, representing this command.
+ * <ul>
+ * <li>Min: 1</li>
+ * <li>Max: 100</li>
+ * </ul>
+ * @return menuName the menu name
+ */
+
+ public String getMenuName() {
+ return getString( KEY_MENU_NAME );
+ }
+ /**
+ * Set text which appears in menu, representing this command.
+ * <ul>
+ * <li>Min: 1</li>
+ * <li>Max: 100</li>
+ * </ul>
+ * @param menuName the menu name
+ */
+
+ public void setMenuName( @NonNull String menuName ) {
+ setValue(KEY_MENU_NAME, menuName);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MetadataTags.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MetadataTags.java
new file mode 100644
index 000000000..dc5a9b5aa
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MetadataTags.java
@@ -0,0 +1,116 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.MetadataType;
+
+import java.util.Collections;
+import java.util.Hashtable;
+import java.util.List;
+
+public class MetadataTags extends RPCStruct {
+
+ public static final String KEY_MAIN_FIELD_1_TYPE = "mainField1";
+ public static final String KEY_MAIN_FIELD_2_TYPE = "mainField2";
+ public static final String KEY_MAIN_FIELD_3_TYPE = "mainField3";
+ public static final String KEY_MAIN_FIELD_4_TYPE = "mainField4";
+
+ /**
+ * Constructs a newly allocated MetadataTags object
+ */
+ public MetadataTags(){}
+
+ /**
+ * Constructs a newly allocated MetadataTags object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public MetadataTags(Hashtable<String, Object> hash){super(hash);}
+
+ /**
+ * Set the metadata types of data contained in the "mainField1" text field
+ */
+ public void setMainField1( List<MetadataType> metadataTypes ) {
+ setValue(KEY_MAIN_FIELD_1_TYPE, metadataTypes);
+ }
+
+ /**
+ * Set the metadata type of data contained in the "mainField1" text field
+ */
+ public void setMainField1(MetadataType metadataType) {
+ setValue(KEY_MAIN_FIELD_1_TYPE, Collections.singletonList(metadataType));
+ }
+
+ /**
+ * @return The type of data contained in the "mainField1" text field
+ */
+ @SuppressWarnings("unchecked")
+ public List<MetadataType> getMainField1() {
+ return (List<MetadataType>) getObject(MetadataType.class, KEY_MAIN_FIELD_1_TYPE);
+ }
+
+ /**
+ * Set the metadata types of data contained in the "mainField2" text field
+ */
+ public void setMainField2( List<MetadataType> metadataTypes ) {
+ setValue(KEY_MAIN_FIELD_2_TYPE, metadataTypes);
+ }
+
+ /**
+ * Set the metadata type of data contained in the "mainField2" text field
+ */
+ public void setMainField2(MetadataType metadataType) {
+ setValue(KEY_MAIN_FIELD_2_TYPE, Collections.singletonList(metadataType));
+ }
+
+ /**
+ * @return The type of data contained in the "mainField2" text field
+ */
+ @SuppressWarnings("unchecked")
+ public List<MetadataType> getMainField2() {
+ return (List<MetadataType>) getObject(MetadataType.class, KEY_MAIN_FIELD_2_TYPE);
+ }
+
+ /**
+ * Set the metadata types of data contained in the "mainField3" text field
+ */
+ public void setMainField3( List<MetadataType> metadataTypes ) {
+ setValue(KEY_MAIN_FIELD_3_TYPE, metadataTypes);
+ }
+
+ /**
+ * Set the metadata type of data contained in the "mainField3" text field
+ */
+ public void setMainField3(MetadataType metadataType) {
+ setValue(KEY_MAIN_FIELD_3_TYPE, Collections.singletonList(metadataType));
+ }
+
+ /**
+ * @return The type of data contained in the "mainField3" text field
+ */
+ @SuppressWarnings("unchecked")
+ public List<MetadataType> getMainField3() {
+ return (List<MetadataType>) getObject(MetadataType.class, KEY_MAIN_FIELD_3_TYPE);
+ }
+
+ /**
+ * Set the metadata types of data contained in the "mainField4" text field
+ */
+ public void setMainField4( List<MetadataType> metadataTypes ) {
+ setValue(KEY_MAIN_FIELD_4_TYPE, metadataTypes);
+ }
+
+ /**
+ * Set the metadata type of data contained in the "mainField4" text field
+ */
+ public void setMainField4(MetadataType metadataType) {
+ setValue(KEY_MAIN_FIELD_4_TYPE, Collections.singletonList(metadataType));
+ }
+
+ /**
+ * @return The type of data contained in the "mainField4" text field
+ */
+ @SuppressWarnings("unchecked")
+ public List<MetadataType> getMainField4() {
+ return (List<MetadataType>) getObject(MetadataType.class, KEY_MAIN_FIELD_4_TYPE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ModuleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ModuleData.java
new file mode 100644
index 000000000..85a24c064
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ModuleData.java
@@ -0,0 +1,158 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ModuleType;
+
+import java.util.Hashtable;
+
+public class ModuleData extends RPCStruct {
+ public static final String KEY_MODULE_TYPE = "moduleType";
+ public static final String KEY_RADIO_CONTROL_DATA = "radioControlData";
+ public static final String KEY_CLIMATE_CONTROL_DATA = "climateControlData";
+ public static final String KEY_SEAT_CONTROL_DATA = "seatControlData";
+ public static final String KEY_AUDIO_CONTROL_DATA = "audioControlData";
+ public static final String KEY_LIGHT_CONTROL_DATA = "lightControlData";
+ public static final String KEY_HMI_SETTINGS_CONTROL_DATA = "hmiSettingsControlData";
+
+ public ModuleData() {
+ }
+
+ public ModuleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public ModuleData(@NonNull ModuleType moduleType) {
+ this();
+ setModuleType(moduleType);
+ }
+
+ /**
+ * Sets the moduleType portion of the ModuleData class
+ *
+ * @param moduleType 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
+ */
+ public void setModuleType(@NonNull ModuleType moduleType) {
+ setValue(KEY_MODULE_TYPE, moduleType);
+ }
+
+ /**
+ * Gets the moduleType portion of the ModuleData class
+ *
+ * @return ModuleType - 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.
+ */
+ public ModuleType getModuleType() {
+ return (ModuleType) getObject(ModuleType.class, KEY_MODULE_TYPE);
+ }
+
+ /**
+ * Sets the radioControlData portion of the ModuleData class
+ *
+ * @param radioControlData
+ */
+ public void setRadioControlData(RadioControlData radioControlData) {
+ setValue(KEY_RADIO_CONTROL_DATA, radioControlData);
+ }
+
+ /**
+ * Gets the radioControlData portion of the ModuleData class
+ *
+ * @return RadioControlData
+ */
+ public RadioControlData getRadioControlData() {
+ return (RadioControlData) getObject(RadioControlData.class, KEY_RADIO_CONTROL_DATA);
+ }
+
+ /**
+ * Sets the climateControlData portion of the ModuleData class
+ *
+ * @param climateControlData
+ */
+ public void setClimateControlData(ClimateControlData climateControlData) {
+ setValue(KEY_CLIMATE_CONTROL_DATA, climateControlData);
+ }
+
+ /**
+ * Gets the climateControlData portion of the ModuleData class
+ *
+ * @return ClimateControlData
+ */
+ public ClimateControlData getClimateControlData() {
+ return (ClimateControlData) getObject(ClimateControlData.class, KEY_CLIMATE_CONTROL_DATA);
+ }
+
+ /**
+ * Sets the seatControlData portion of the ModuleData class
+ *
+ * @param seatControlData
+ */
+ public void setSeatControlData(SeatControlData seatControlData) {
+ setValue(KEY_SEAT_CONTROL_DATA, seatControlData);
+ }
+
+ /**
+ * Gets the seatControlData portion of the ModuleData class
+ *
+ * @return SeatControlData
+ */
+ public SeatControlData getSeatControlData() {
+ return (SeatControlData) getObject(SeatControlData.class, KEY_SEAT_CONTROL_DATA);
+ }
+
+ /**
+ * Sets the audioControlData portion of the ModuleData class
+ *
+ * @param audioControlData
+ */
+ public void setAudioControlData(AudioControlData audioControlData) {
+ setValue(KEY_AUDIO_CONTROL_DATA, audioControlData);
+ }
+
+ /**
+ * Gets the audioControlData portion of the ModuleData class
+ *
+ * @return AudioControlData
+ */
+ public AudioControlData getAudioControlData() {
+ return (AudioControlData) getObject(AudioControlData.class, KEY_AUDIO_CONTROL_DATA);
+ }
+
+ /**
+ * Sets the lightControlData portion of the ModuleData class
+ *
+ * @param lightControlData
+ */
+ public void setLightControlData(LightControlData lightControlData) {
+ setValue(KEY_LIGHT_CONTROL_DATA, lightControlData);
+ }
+
+ /**
+ * Gets the lightControlData portion of the ModuleData class
+ *
+ * @return LightControlData
+ */
+ public LightControlData getLightControlData() {
+ return (LightControlData) getObject(LightControlData.class, KEY_LIGHT_CONTROL_DATA);
+ }
+
+ /**
+ * Sets the hmiSettingsControlData portion of the ModuleData class
+ *
+ * @param hmiSettingsControlData
+ */
+ public void setHmiSettingsControlData(HMISettingsControlData hmiSettingsControlData) {
+ setValue(KEY_HMI_SETTINGS_CONTROL_DATA, hmiSettingsControlData);
+ }
+
+ /**
+ * Gets the hmiSettingsControlData portion of the ModuleData class
+ *
+ * @return HMISettingsControlData
+ */
+ public HMISettingsControlData getHmiSettingsControlData() {
+ return (HMISettingsControlData) getObject(HMISettingsControlData.class, KEY_HMI_SETTINGS_CONTROL_DATA);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/MyKey.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/MyKey.java
new file mode 100644
index 000000000..3393f527a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/MyKey.java
@@ -0,0 +1,62 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataStatus;
+/** Information related to the MyKey feature.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Mandatory</th>
+ * <th>Description</th>
+ * </tr>
+ * <tr>
+ * <td>e911Override</td>
+ * <td>VehicleDataStatus</td>
+ * <td>true</td>
+ * <td>Indicates whether e911 override is on.</td>
+ * </tr>
+ * </table>
+ *
+ *@since SmartDeviceLink 2.0
+ *
+ *@see GetVehicleData
+ *@see OnVehicleData
+ *@see VehicleDataStatus
+ *
+ *
+ */
+
+public class MyKey extends RPCStruct {
+ public static final String KEY_E_911_OVERRIDE = "e911Override";
+ /**
+ * Constructs a new MyKey object indicated
+ */
+ public MyKey() { }
+ /**
+ * <p>Constructs a new MyKey object indicated by the Hashtable
+ * parameter</p>
+ * @param hash The Hashtable to use
+ */
+ public MyKey(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new MyKey object indicated
+ */
+ public MyKey(@NonNull VehicleDataStatus e911Override) {
+ this();
+ setE911Override(e911Override);
+ }
+ public void setE911Override(@NonNull VehicleDataStatus e911Override) {
+ setValue(KEY_E_911_OVERRIDE, e911Override);
+ }
+ public VehicleDataStatus getE911Override() {
+ return (VehicleDataStatus) getObject(VehicleDataStatus.class, KEY_E_911_OVERRIDE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationCapability.java
new file mode 100644
index 000000000..c3d0d59f8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationCapability.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/*
+ * Extended capabilities for an onboard navigation system
+ */
+public class NavigationCapability extends RPCStruct{
+ public static final String KEY_LOCATION_ENABLED = "sendLocationEnabled";
+ public static final String KEY_GETWAYPOINTS_ENABLED = "getWayPointsEnabled";
+
+ public NavigationCapability(){}
+
+ public NavigationCapability(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public Boolean getSendLocationEnabled(){
+ return getBoolean(KEY_LOCATION_ENABLED);
+ }
+
+ public void setSendLocationEnabled(Boolean sendLocationEnabled){
+ setValue(KEY_LOCATION_ENABLED, sendLocationEnabled);
+ }
+
+ public Boolean getWayPointsEnabled(){
+ return getBoolean(KEY_GETWAYPOINTS_ENABLED);
+ }
+
+ public void setWayPointsEnabled(Boolean getWayPointsEnabled){
+ setValue(KEY_GETWAYPOINTS_ENABLED, getWayPointsEnabled);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationInstruction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationInstruction.java
new file mode 100644
index 000000000..5052e55f9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationInstruction.java
@@ -0,0 +1,169 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.Direction;
+import com.smartdevicelink.proxy.rpc.enums.NavigationAction;
+import com.smartdevicelink.proxy.rpc.enums.NavigationJunction;
+
+import java.util.Hashtable;
+
+public class NavigationInstruction extends RPCStruct {
+
+ public static final String KEY_LOCATION_DETAILS = "locationDetails";
+ public static final String KEY_ACTION = "action";
+ public static final String KEY_ETA = "eta";
+ public static final String KEY_BEARING = "bearing";
+ public static final String KEY_JUNCTION_TYPE = "junctionType";
+ public static final String KEY_DRIVING_SIDE = "drivingSide";
+ public static final String KEY_DETAILS = "details";
+ public static final String KEY_IMAGE = "image";
+
+ // Constructors
+
+ public NavigationInstruction() { }
+
+ public NavigationInstruction(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public NavigationInstruction(@NonNull LocationDetails locationDetails, @NonNull NavigationAction action){
+ this();
+ setLocationDetails(locationDetails);
+ setAction(action);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param locationDetails -
+ */
+ public void setLocationDetails(@NonNull LocationDetails locationDetails){
+ setValue(KEY_LOCATION_DETAILS, locationDetails);
+ }
+
+ /**
+ * @return locationDetails
+ */
+ public LocationDetails getLocationDetails(){
+ return (LocationDetails) getObject(LocationDetails.class, KEY_LOCATION_DETAILS);
+ }
+
+ /**
+ * @param action -
+ */
+ public void setAction(@NonNull NavigationAction action){
+ setValue(KEY_ACTION, action);
+ }
+
+ /**
+ * @return action
+ */
+ public NavigationAction getAction(){
+ return (NavigationAction) getObject(NavigationAction.class, KEY_ACTION);
+ }
+
+ /**
+ * @param eta -
+ */
+ public void setEta(DateTime eta){
+ setValue(KEY_ETA, eta);
+ }
+
+ /**
+ * @return eta
+ */
+ public DateTime getEta(){
+ return (DateTime) getObject(DateTime.class, KEY_ETA);
+ }
+
+ /**
+ * The angle at which this instruction takes place. For example, 0 would mean straight, <=45
+ * is bearing right, >= 135 is sharp right, between 45 and 135 is a regular right, and 180 is
+ * a U-Turn, etc.
+ * @param bearing - minValue="0" maxValue="359"
+ */
+ public void setBearing(Integer bearing){
+ setValue(KEY_BEARING, bearing);
+ }
+
+ /**
+ * The angle at which this instruction takes place. For example, 0 would mean straight, <=45
+ * is bearing right, >= 135 is sharp right, between 45 and 135 is a regular right, and 180 is
+ * a U-Turn, etc.
+ * @return bearing - minValue="0" maxValue="359"
+ */
+ public Integer getBearing(){
+ return getInteger(KEY_BEARING);
+ }
+
+ /**
+ * @param junctionType -
+ */
+ public void setJunctionType(NavigationJunction junctionType){
+ setValue(KEY_JUNCTION_TYPE, junctionType);
+ }
+
+ /**
+ * @return junctionType
+ */
+ public NavigationJunction getJunctionType(){
+ return (NavigationJunction) getObject(NavigationJunction.class, KEY_JUNCTION_TYPE);
+ }
+
+ /**
+ * Used to infer which side of the road this instruction takes place. For a U-Turn
+ * (Action=Turn, direction=180) this will determine which direction the turn should take place.
+ * @param drivingSide -
+ */
+ public void setDrivingSide(Direction drivingSide){
+ setValue(KEY_DRIVING_SIDE, drivingSide);
+ }
+
+ /**
+ * Used to infer which side of the road this instruction takes place. For a U-Turn
+ * (Action=Turn, direction=180) this will determine which direction the turn should take place.
+ * @return drivingSide
+ */
+ public Direction getDrivingSide(){
+ return (Direction) getObject(Direction.class, KEY_DRIVING_SIDE);
+ }
+
+ /**
+ * This is a string representation of this instruction, used to display instructions to the
+ * users. This is not intended to be read aloud to the users, see the param prompt in
+ * NavigationServiceData for that.
+ * @param details -
+ */
+ public void setDetails(String details){
+ setValue(KEY_DETAILS, details);
+ }
+
+ /**
+ * This is a string representation of this instruction, used to display instructions to the
+ * users. This is not intended to be read aloud to the users, see the param prompt in
+ * NavigationServiceData for that.
+ * @return details
+ */
+ public String getDetails(){
+ return getString(KEY_DETAILS);
+ }
+
+ /**
+ * An image representation of this instruction.
+ * @param image -
+ */
+ public void setImage(Image image){
+ setValue(KEY_IMAGE, image);
+ }
+
+ /**
+ * An image representation of this instruction.
+ * @return image
+ */
+ public Image getImage(){
+ return (Image) getObject(Image.class, KEY_IMAGE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceData.java
new file mode 100644
index 000000000..4c1817954
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceData.java
@@ -0,0 +1,189 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * This data is related to what a navigation service would provide.
+ */
+public class NavigationServiceData extends RPCStruct {
+
+ public static final String KEY_TIMESTAMP = "timeStamp";
+ public static final String KEY_ORIGIN= "origin";
+ public static final String KEY_DESTINATION = "destination";
+ public static final String KEY_DESTINATION_ETA = "destinationETA";
+ public static final String KEY_INSTRUCTIONS = "instructions";
+ public static final String KEY_NEXT_INSTRUCTION_ETA = "nextInstructionETA";
+ public static final String KEY_NEXT_INSTRUCTION_DISTANCE = "nextInstructionDistance";
+ public static final String KEY_NEXT_INSTRUCTION_DISTANCE_SCALE= "nextInstructionDistanceScale";
+ public static final String KEY_PROMPT = "prompt";
+
+ // Constructors
+
+ public NavigationServiceData() { }
+
+ public NavigationServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public NavigationServiceData(@NonNull DateTime timeStamp){
+ this();
+ setTimeStamp(timeStamp);
+ }
+
+ // Setters and Getters
+
+ /**
+ * This is the timeStamp of when the data was generated. This is to ensure any time or distance
+ * given in the data can accurately be adjusted if necessary.
+ * @param timeStamp -
+ */
+ public void setTimeStamp(@NonNull DateTime timeStamp){
+ setValue(KEY_TIMESTAMP, timeStamp);
+ }
+
+ /**
+ * This is the timeStamp of when the data was generated. This is to ensure any time or distance
+ * given in the data can accurately be adjusted if necessary.
+ * @return timeStamp
+ */
+ public DateTime getTimeStamp(){
+ return (DateTime) getObject(DateTime.class, KEY_TIMESTAMP);
+ }
+
+ /**
+ * @param origin -
+ */
+ public void setOrigin(LocationDetails origin){
+ setValue(KEY_ORIGIN, origin);
+ }
+
+ /**
+ * @return origin
+ */
+ public LocationDetails getOrigin(){
+ return (LocationDetails) getObject(LocationDetails.class, KEY_ORIGIN);
+ }
+
+ /**
+ * @param destination -
+ */
+ public void setDestination(LocationDetails destination){
+ setValue(KEY_DESTINATION, destination);
+ }
+
+ /**
+ * @return destination
+ */
+ public LocationDetails getDestination(){
+ return (LocationDetails) getObject(LocationDetails.class, KEY_DESTINATION);
+ }
+
+ /**
+ * @param destinationETA -
+ */
+ public void setDestinationETA(DateTime destinationETA){
+ setValue(KEY_DESTINATION_ETA, destinationETA);
+ }
+
+ /**
+ * @return destinationETA
+ */
+ public DateTime getDestinationETA(){
+ return (DateTime) getObject(DateTime.class, KEY_DESTINATION_ETA);
+ }
+
+ /**
+ * This array should be ordered with all remaining instructions. The start of this array should
+ * always contain the next instruction.
+ * @param instructions -
+ */
+ public void setInstructions(List<NavigationInstruction> instructions){
+ setValue(KEY_INSTRUCTIONS, instructions);
+ }
+
+ /**
+ * This array should be ordered with all remaining instructions. The start of this array should
+ * always contain the next instruction.
+ * @return instructions
+ */
+ @SuppressWarnings("unchecked")
+ public List<NavigationInstruction> getInstructions(){
+ return (List<NavigationInstruction>) getObject(NavigationInstruction.class,KEY_INSTRUCTIONS);
+ }
+
+ /**
+ * @param nextInstructionETA -
+ */
+ public void setNextInstructionETA(DateTime nextInstructionETA){
+ setValue(KEY_NEXT_INSTRUCTION_ETA, nextInstructionETA);
+ }
+
+ /**
+ * @return nextInstructionETA
+ */
+ public DateTime getNextInstructionETA(){
+ return (DateTime) getObject(DateTime.class, KEY_NEXT_INSTRUCTION_ETA);
+ }
+
+ /**
+ * The distance to this instruction from current location. This should only be updated every
+ * .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and
+ * the next instruction.
+ * @param nextInstructionDistance -
+ */
+ public void setNextInstructionDistance(Float nextInstructionDistance){
+ setValue(KEY_NEXT_INSTRUCTION_DISTANCE, nextInstructionDistance);
+ }
+
+ /**
+ * The distance to this instruction from current location. This should only be updated every
+ * .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and
+ * the next instruction.
+ * @return nextInstructionDistance
+ */
+ public Float getNextInstructionDistance(){
+ return getFloat(KEY_NEXT_INSTRUCTION_DISTANCE);
+ }
+
+ /**
+ * Distance till next maneuver (starting from) from previous maneuver.
+ * @param nextInstructionDistanceScale -
+ */
+ public void setNextInstructionDistanceScale(Float nextInstructionDistanceScale){
+ setValue(KEY_NEXT_INSTRUCTION_DISTANCE_SCALE, nextInstructionDistanceScale);
+ }
+
+ /**
+ * Distance till next maneuver (starting from) from previous maneuver.
+ * @return nextInstructionDistanceScale
+ */
+ public Float getNextInstructionDistanceScale(){
+ return getFloat(KEY_NEXT_INSTRUCTION_DISTANCE_SCALE);
+ }
+
+ /**
+ * This is a prompt message that should be conveyed to the user through either display or voice
+ * (TTS). This param will change often as it should represent the following: approaching
+ * instruction, post instruction, alerts that affect the current navigation session, etc.
+ * @param prompt -
+ */
+ public void setPrompt(String prompt){
+ setValue(KEY_PROMPT, prompt);
+ }
+
+ /**
+ * This is a prompt message that should be conveyed to the user through either display or voice
+ * (TTS). This param will change often as it should represent the following: approaching
+ * instruction, post instruction, alerts that affect the current navigation session, etc.
+ * @return prompt
+ */
+ public String getPrompt(){
+ return getString(KEY_PROMPT);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceManifest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceManifest.java
new file mode 100644
index 000000000..54da7bdd1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/NavigationServiceManifest.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class NavigationServiceManifest extends RPCStruct {
+
+ public static final String KEY_ACCEPTS_WAY_POINTS = "acceptsWayPoints";
+
+ // Constructors
+
+ public NavigationServiceManifest() { }
+
+ public NavigationServiceManifest(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ // Setters and Getters
+
+ /**
+ * Informs the subscriber if this service can actually accept way points.
+ * @param acceptsWayPoints -
+ */
+ public void setAcceptsWayPoints(Boolean acceptsWayPoints){
+ setValue(KEY_ACCEPTS_WAY_POINTS, acceptsWayPoints);
+ }
+
+ /**
+ * Informs the subscriber if this service can actually accept way points.
+ * @return acceptsWayPoints
+ */
+ public Boolean getAcceptsWayPoints(){
+ return getBoolean(KEY_ACCEPTS_WAY_POINTS);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OasisAddress.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OasisAddress.java
new file mode 100644
index 000000000..54b95e300
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OasisAddress.java
@@ -0,0 +1,218 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class OasisAddress extends RPCStruct{
+ public static final String KEY_COUNTRY_NAME = "countryName";
+ public static final String KEY_COUNTRY_CODE = "countryCode";
+ public static final String KEY_POSTAL_CODE = "postalCode";
+ public static final String KEY_ADMINISTRATIVE_AREA = "administrativeArea";
+ public static final String KEY_SUB_ADMINISTRATIVE_AREA = "subAdministrativeArea";
+ public static final String KEY_LOCALITY = "locality";
+ public static final String KEY_SUB_LOCALITY = "subLocality";
+ public static final String KEY_THOROUGH_FARE = "thoroughfare";
+ public static final String KEY_SUB_THOROUGH_FARE = "subThoroughfare";
+
+ /**
+ * OASIS Address - A standard based address class that has been established by The Organization for the Advancement of Structured Information Standards (OASIS).
+ * Oasis is a global nonprofit consortium that works on the development, convergence, and adoption of standards for security,
+ * Internet of Things, energy, content technologies, emergency management, and other areas.
+ *
+ */
+ public OasisAddress() {
+ }
+
+ public OasisAddress(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Gets the localized Name of the country associated with the OasisAddress class.
+ *
+ * @return String - The localized Name of the country associated with the OasisAddress class.
+ *
+ */
+ public String getCountryName() {
+ return getString(KEY_COUNTRY_NAME);
+ }
+
+ /**
+ * Sets the localized Name of the country associated with the OasisAddress class.
+ *
+ * @param countryName
+ * The localized Name of the country associated with the OasisAddress class.
+ *
+ */
+ public void setCountryName(String countryName) {
+ setValue(KEY_COUNTRY_NAME, countryName);
+ }
+
+ /**
+ * Gets the country code in ISO 3166-2 format associated with the OasisAddress class.
+ *
+ * @return String - The country code in ISO 3166-2 format associated with the OasisAddress class.
+ *
+ */
+ public String getCountryCode() {
+ return getString(KEY_COUNTRY_CODE);
+ }
+
+ /**
+ * Sets the country code in ISO 3166-2 format associated with the OasisAddress class.
+ *
+ * @param countryCode
+ * The country code in ISO 3166-2 format associated with the OasisAddress class.
+ *
+ */
+ public void setCountryCode(String countryCode) {
+ setValue(KEY_COUNTRY_CODE, countryCode);
+ }
+
+ /**
+ * Gets the Postal Code associated with the OasisAddress class.
+ *
+ * @return String - The Postal Code associated with the OasisAddress class.
+ *
+ */
+ public String getPostalCode() {
+ return getString(KEY_POSTAL_CODE);
+ }
+
+ /**
+ * Sets the Postal Code associated with the OasisAddress class.
+ *
+ * @param postalCode
+ * The Postal Code associated with the OasisAddress class.
+ *
+ */
+ public void setPostalCode(String postalCode) {
+ setValue(KEY_POSTAL_CODE, postalCode);
+ }
+
+ /**
+ * Gets the Administrative Area associated with the OasisAddress class. A portion of the country - Administrative Area's can include details of the top-level area division in the country, such as state, district, province, island, region, etc.
+ *
+ * @return String - The Administrative Area associated with the OasisAddress class.
+ *
+ */
+ public String getAdministrativeArea() {
+ return getString(KEY_ADMINISTRATIVE_AREA);
+ }
+
+ /**
+ * Sets the Administrative Area associated with the OasisAddress class. A portion of the country - Administrative Area can include details of the top-level area division in the country, such as state, district, province, island, region, etc.
+ *
+ * @param administrativeArea
+ * The Administrative Area associated with the OasisAddress class.
+ *
+ */
+ public void setAdministrativeArea(String administrativeArea) {
+ setValue(KEY_ADMINISTRATIVE_AREA, administrativeArea);
+ }
+
+ /**
+ * Gets the SubAdministrative Area associated with the OasisAddress class. A portion of the administrativeArea - The next level down division of the area. E.g. state / county, province / reservation.
+ *
+ * @return String - The SubAdministrative Area associated with the OasisAddress class.
+ *
+ */
+ public String getSubAdministrativeArea() {
+ return getString(KEY_SUB_ADMINISTRATIVE_AREA);
+ }
+
+ /**
+ * Sets the SubAdministrative Area associated with the OasisAddress class. A portion of the administrativeArea - The next level down division of the area. E.g. state / county, province / reservation.
+ *
+ * @param subAdministrativeArea
+ * The SubAdministrative Area associated with the OasisAddress class.
+ *
+ */
+ public void setSubAdministrativeArea(String subAdministrativeArea) {
+ setValue(KEY_SUB_ADMINISTRATIVE_AREA, subAdministrativeArea);
+ }
+
+ /**
+ * Gets the Locality associated with the OasisAddress class. - A hypernym for city/village
+ *
+ * @return String - The Locality associated with the OasisAddress class.
+ *
+ */
+ public String getLocality() {
+ return getString(KEY_LOCALITY);
+ }
+
+ /**
+ * Sets the Locality associated with the OasisAddress class. - A hypernym for city/village.
+ *
+ * @param locality
+ * The Locality associated with the OasisAddress class.
+ *
+ */
+ public void setLocality(String locality) {
+ setValue(KEY_LOCALITY, locality);
+ }
+
+ /**
+ * Gets the Sub-Locality associated with the OasisAddress class. - Hypernym for district.
+ *
+ * @return String - The Sub-Locality associated with the OasisAddress class.
+ *
+ */
+ public String getSubLocality() {
+ return getString(KEY_SUB_LOCALITY);
+ }
+
+ /**
+ * Sets the Sub-Locality associated with the OasisAddress class. A hypernym for district.
+ *
+ * @param subLocality
+ * The Sub-Locality associated with the OasisAddress class.
+ *
+ */
+ public void setSubLocality(String subLocality) {
+ setValue(KEY_SUB_LOCALITY, subLocality);
+ }
+
+ /**
+ * Gets the Thoroughfare associated with the OasisAddress class. - A hypernym for street, road etc.
+ *
+ * @return String - The Thoroughfare associated with the OasisAddress class.
+ *
+ */
+ public String getThoroughfare() {
+ return getString(KEY_THOROUGH_FARE);
+ }
+
+ /**
+ * Sets the Thoroughfare associated with the OasisAddress class. A hypernym for street, road etc.
+ *
+ * @param thoroughFare
+ * The Thoroughfare associated with the OasisAddress class.
+ *
+ */
+ public void setThoroughfare(String thoroughFare) {
+ setValue(KEY_THOROUGH_FARE, thoroughFare);
+ }
+
+ /**
+ * Gets the Sub-Thoroughfare associated with the OasisAddress class. - A Portion of thoroughfare (e.g. house number).
+ *
+ * @return String - The Sub-Thoroughfare associated with the OasisAddress class.
+ */
+ public String getSubThoroughfare() {
+ return getString(KEY_SUB_THOROUGH_FARE);
+ }
+
+ /**
+ * Sets the Sub-Thoroughfare associated with the OasisAddress class. - A Portion of thoroughfare (e.g. house number).
+ *
+ * @param subThoroughfare
+ * The Sub-Thoroughfare associated with the OasisAddress class.
+ *
+ */
+ public void setSubThoroughfare(String subThoroughfare) {
+ setValue(KEY_SUB_THOROUGH_FARE, subThoroughfare);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppInterfaceUnregistered.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppInterfaceUnregistered.java
new file mode 100644
index 000000000..adc3296c1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppInterfaceUnregistered.java
@@ -0,0 +1,81 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.AppInterfaceUnregisteredReason;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Notifies an application that its interface registration has been terminated. This means that all SDL resources
+ * associated with the application are discarded, including the Command Menu, Choice Sets, button subscriptions, etc.</p>
+ * For more information about SDL resources related to an interface registration, see {@linkplain RegisterAppInterface}.
+ * <p></p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul><li>Any</li></ul>
+ * AudioStreamingState:
+ * <ul><li>Any</li></ul>
+ * SystemContext:
+ * <ul><li>Any</li></ul>
+ * </ul>
+ * <p></p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>reason</td>
+ * <td>{@linkplain AppInterfaceUnregisteredReason}</td>
+ * <td>The reason the application's interface registration was terminated</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ * @see RegisterAppInterface
+ */
+public class OnAppInterfaceUnregistered extends RPCNotification {
+ public static final String KEY_REASON = "reason";
+ /**
+ *Constructs a newly allocated OnAppInterfaceUnregistered object
+ */
+ public OnAppInterfaceUnregistered() {
+ super(FunctionID.ON_APP_INTERFACE_UNREGISTERED.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnAppInterfaceUnregistered object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnAppInterfaceUnregistered(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnAppInterfaceUnregistered object
+ * @param reason The reason application's interface registration was terminated
+ */
+ public OnAppInterfaceUnregistered(@NonNull AppInterfaceUnregisteredReason reason) {
+ this();
+ setReason(reason);
+ }
+ /**
+ * <p>Get the reason the registration was terminated</p>
+ * @return {@linkplain AppInterfaceUnregisteredReason} the reason the application's interface registration was terminated
+ */
+ public AppInterfaceUnregisteredReason getReason() {
+ return (AppInterfaceUnregisteredReason) getObject(AppInterfaceUnregisteredReason.class, KEY_REASON);
+ }
+ /**
+ * <p>Set the reason application's interface was terminated</p>
+ * @param reason The reason application's interface registration was terminated
+ */
+ public void setReason( @NonNull AppInterfaceUnregisteredReason reason ) {
+ setParameters(KEY_REASON, reason);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppServiceData.java
new file mode 100644
index 000000000..48cab3cd6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAppServiceData.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+
+/**
+ * This notification includes the data that is updated from the specific service
+ */
+public class OnAppServiceData extends RPCNotification {
+
+ public static final String KEY_SERVICE_DATA = "serviceData";
+
+ // Constructors
+
+ public OnAppServiceData() {
+ super(FunctionID.ON_APP_SERVICE_DATA.toString());
+ }
+
+ public OnAppServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public OnAppServiceData(@NonNull AppServiceData serviceData) {
+ this();
+ setServiceData(serviceData);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param serviceData -
+ */
+ public void setServiceData(@NonNull AppServiceData serviceData){
+ setParameters(KEY_SERVICE_DATA, serviceData);
+ }
+
+ /**
+ * @return serviceData
+ */
+ public AppServiceData getServiceData(){
+ return (AppServiceData) getObject(AppServiceData.class, KEY_SERVICE_DATA);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAudioPassThru.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAudioPassThru.java
new file mode 100644
index 000000000..40186c63d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnAudioPassThru.java
@@ -0,0 +1,62 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+/**
+ * Binary data is in binary part of hybrid msg.
+ * <p>
+ * </p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul>
+ * <li>BACKGROUND, FULL, LIMITED</li>
+ * </ul>
+ * AudioStreamingState:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * SystemContext:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * </ul>
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Req</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * </table>
+ * </p>
+ *
+ */
+public class OnAudioPassThru extends RPCNotification {
+ /**
+ *Constructs a newly allocated OnCommand object
+ */
+ public OnAudioPassThru() {
+ super(FunctionID.ON_AUDIO_PASS_THRU.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnAudioPassThru object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnAudioPassThru(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public void setAPTData(byte[] aptData) {
+ setBulkData(aptData);
+ }
+ public byte[] getAPTData() {
+ return getBulkData();
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonEvent.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonEvent.java
new file mode 100644
index 000000000..28bf0b3ce
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonEvent.java
@@ -0,0 +1,154 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.ButtonEventMode;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+
+import java.util.Hashtable;
+
+/**
+ * Notifies application that user has depressed or released a button to which
+ * the application has subscribed.Further information about button events
+ * and button-presses can be found at {@linkplain SubscribeButton}.
+ * <p>
+ * </p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul>
+ * <li>The application will receive OnButtonEvent notifications for all
+ * subscribed buttons when HMILevel is FULL.</li>
+ * <li>The application will receive OnButtonEvent notifications for subscribed
+ * media buttons when HMILevel is LIMITED.</li>
+ * <li>Media buttons include SEEKLEFT, SEEKRIGHT, TUNEUP, TUNEDOWN, and
+ * PRESET_0-PRESET_9.</li>
+ * <li>The application will not receive OnButtonEvent notification when HMILevel
+ * is BACKGROUND.</li>
+ * </ul>
+ * AudioStreamingState:
+ * <ul>
+ * <li> Any </li>
+ * </ul>
+ * SystemContext:
+ * <ul>
+ * <li>MAIN, VR. In MENU, only PRESET buttons. In VR, pressing any subscribable
+ * button will cancel VR.</li>
+ * </ul>
+ * </ul>
+ * <p></p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Req</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>buttonName</td>
+ * <td>{@linkplain ButtonName}</td>
+ * <td>Name of the button which triggered this event</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>buttonEventMode</td>
+ * <td>{@linkplain ButtonEventMode}</td>
+ * <td>Indicats button was depressed (DOWN) or released (UP)</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>customButtonID</td>
+ * <td>Integer</td>
+ * <td>If ButtonName is CUSTOM_BUTTON", this references the integer ID passed
+ * by a custom button. (e.g. softButton ID)</td>
+ * <td>N</td>
+ * <td>Minvalue=0 Maxvalue=65536</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * <p></p>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ * @see SubscribeButton
+ * @see UnsubscribeButton
+ *
+ *
+ */
+public class OnButtonEvent extends RPCNotification {
+ public static final String KEY_BUTTON_EVENT_MODE = "buttonEventMode";
+ public static final String KEY_BUTTON_NAME = "buttonName";
+ public static final String KEY_CUSTOM_BUTTON_ID = "customButtonID";
+ /**
+ *Constructs a newly allocated OnButtonEvent object
+ */
+ public OnButtonEvent() {
+ super(FunctionID.ON_BUTTON_EVENT.toString());
+ }
+ /**
+ * <p>
+ * Constructs a newly allocated OnButtonEvent object indicated by the
+ * Hashtable parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public OnButtonEvent(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * <p>Returns <i>{@linkplain ButtonName}</i> the button's name</p>
+ * @return ButtonName Name of the button
+ */
+ /**
+ *Constructs a newly allocated OnButtonEvent object
+ * @param buttonName name of the button
+ * @param buttonEventMode indicates the button is pressed or released
+ */
+ public OnButtonEvent(@NonNull ButtonName buttonName, @NonNull ButtonEventMode buttonEventMode) {
+ this();
+ setButtonName(buttonName);
+ setButtonEventMode(buttonEventMode);
+ }
+ public ButtonName getButtonName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_BUTTON_NAME);
+ }
+ /**
+ * <p>Set the button's name</p>
+ * @param buttonName name of the button
+ */
+ public void setButtonName(@NonNull ButtonName buttonName) {
+ setParameters(KEY_BUTTON_NAME, buttonName);
+ }
+ /**
+ * <p>Return <i>{@linkplain ButtonEventMode} indicates the button was depressed or released</i></p>
+ * @return ButtonEventMode the button depressed or released
+ */
+ public ButtonEventMode getButtonEventMode() {
+ return (ButtonEventMode) getObject(ButtonEventMode.class, KEY_BUTTON_EVENT_MODE);
+ }
+ /**
+ * <p> Set the event mode of the button,pressed or released</p>
+ * @param buttonEventMode indicates the button is pressed or released
+ * @see ButtonEventMode
+ */
+ public void setButtonEventMode(@NonNull ButtonEventMode buttonEventMode) {
+ setParameters(KEY_BUTTON_EVENT_MODE, buttonEventMode);
+ }
+ public void setCustomButtonID(Integer customButtonID) {
+ setParameters(KEY_CUSTOM_BUTTON_ID, customButtonID);
+ }
+ public Integer getCustomButtonID() {
+ return getInteger(KEY_CUSTOM_BUTTON_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonPress.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonPress.java
new file mode 100644
index 000000000..f96548ec2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnButtonPress.java
@@ -0,0 +1,157 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+import com.smartdevicelink.proxy.rpc.enums.ButtonPressMode;
+
+import java.util.Hashtable;
+
+/**
+ * <p>
+ * Notifies application of button press events for buttons to which the
+ * application is subscribed. SDL supports two button press events defined as
+ * follows:
+ * </p>
+ * <ul>
+ * <li>SHORT - Occurs when a button is depressed, then released within two
+ * seconds. The event is considered to occur immediately after the button is
+ * released.</li>
+ * <li>LONG - Occurs when a button is depressed and held for two seconds or
+ * more. The event is considered to occur immediately after the two second
+ * threshold has been crossed, before the button is released</li>
+ * </ul>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul>
+ * <li>The application will receive OnButtonPress notifications for all
+ * subscribed buttons when HMILevel is FULL.</li>
+ * <li>The application will receive OnButtonPress notifications for subscribed
+ * media buttons when HMILevel is LIMITED.</li>
+ * <li>Media buttons include SEEKLEFT, SEEKRIGHT, TUNEUP, TUNEDOWN, and
+ * PRESET_0-PRESET_9.</li>
+ * <li>The application will not receive OnButtonPress notification when HMILevel
+ * is BACKGROUND or NONE.</li>
+ * </ul>
+ * AudioStreamingState:
+ * <ul>
+ * <li> Any </li>
+ * </ul>
+ * SystemContext:
+ * <ul>
+ * <li>MAIN, VR. In MENU, only PRESET buttons. In VR, pressing any subscribable
+ * button will cancel VR.</li>
+ * </ul>
+ * </ul>
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Req</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>buttonName</td>
+ * <td>{@linkplain ButtonName}</td>
+ * <td>Name of the button which triggered this event</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>buttonPressMode</td>
+ * <td>{@linkplain ButtonPressMode}</td>
+ * <td>Indicates whether this is an SHORT or LONG button press event.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>customButtonID</td>
+ * <td>Integer</td>
+ * <td>If ButtonName is "CUSTOM_BUTTON", this references the integer ID passed
+ * by a custom button. (e.g. softButton ID)</td>
+ * <td>N</td>
+ * <td>Minvalue=0 Maxvalue=65536</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * </p>
+ *
+ * @since SmartDeviceLink 1.0
+ * @see SubscribeButton
+ * @see UnsubscribeButton
+ */
+public class OnButtonPress extends RPCNotification {
+ public static final String KEY_BUTTON_PRESS_MODE = "buttonPressMode";
+ public static final String KEY_BUTTON_NAME = "buttonName";
+ public static final String KEY_CUSTOM_BUTTON_ID = "customButtonID";
+ /**
+ *Constructs a newly allocated OnButtonPress object
+ */
+ public OnButtonPress() {
+ super(FunctionID.ON_BUTTON_PRESS.toString());
+ }
+ /**
+ * <p>
+ * Constructs a newly allocated OnButtonPress object indicated by the
+ * Hashtable parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public OnButtonPress(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnButtonPress object
+ * @param buttonName name of the button
+ * @param buttonPressMode indicates whether this is a short or long press
+ */
+ public OnButtonPress(@NonNull ButtonName buttonName, @NonNull ButtonPressMode buttonPressMode) {
+ this();
+ setButtonName(buttonName);
+ setButtonPressMode(buttonPressMode);
+ }
+ /**
+ * <p>Returns an <i>{@linkplain ButtonName}</i> the button's name</p>
+ * @return ButtonName Name of the button
+ */
+ public ButtonName getButtonName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_BUTTON_NAME);
+ }
+ /**
+ * <p>Set the button's name</p>
+ * @param buttonName name of the button
+ */
+ public void setButtonName( @NonNull ButtonName buttonName ) {
+ setParameters(KEY_BUTTON_NAME, buttonName);
+ }
+ /**<p>Returns <i>{@linkplain ButtonPressMode}</i></p>
+ * @return ButtonPressMode whether this is a long or short button press event
+ */
+ public ButtonPressMode getButtonPressMode() {
+ return (ButtonPressMode) getObject(ButtonPressMode.class, KEY_BUTTON_PRESS_MODE);
+ }
+ /**
+ * <p>Set the button press mode of the event</p>
+ * @param buttonPressMode indicates whether this is a short or long press
+ */
+ public void setButtonPressMode( @NonNull ButtonPressMode buttonPressMode ) {
+ setParameters(KEY_BUTTON_PRESS_MODE, buttonPressMode);
+ }
+ public void setCustomButtonName(Integer customButtonID) {
+ setParameters(KEY_CUSTOM_BUTTON_ID, customButtonID);
+ }
+ public Integer getCustomButtonName() {
+ return getInteger(KEY_CUSTOM_BUTTON_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnCommand.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnCommand.java
new file mode 100644
index 000000000..0a7f1e89d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnCommand.java
@@ -0,0 +1,111 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.TriggerSource;
+
+import java.util.Hashtable;
+
+/**
+ * This is called when a command was selected via VR after pressing the PTT button, or selected from the menu after
+ * pressing the MENU button. <p>
+ * <b>Note: </b>Sequence of OnHMIStatus and OnCommand notifications for user-initiated interactions is indeterminate.
+ * <p></p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul><li>FULL,LIMITED</li></ul>
+ * AudioStreamingState:
+ * <ul><li>Any</li></ul>
+ * SystemContext:
+ * <ul><li>Any</li></ul>
+ * </ul>
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>cmdID</td>
+ * <td>Integer</td>
+ * <td>The cmdID of the command the user selected. This is the cmdID value provided by the application in the AddCommand operation that created the command.</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>triggerSource</td>
+ * <td>{@linkplain TriggerSource}</td>
+ * <td>Indicates whether command was selected via VR or via a menu selection (using the OKbutton).</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * </p>
+ * @since SmartDeviceLink 1.0
+ * @see AddCommand
+ * @see DeleteCommand
+ * @see DeleteSubMenu
+ */
+public class OnCommand extends RPCNotification {
+ public static final String KEY_CMD_ID = "cmdID";
+ public static final String KEY_TRIGGER_SOURCE = "triggerSource";
+ /**
+ *Constructs a newly allocated OnCommand object
+ */
+ public OnCommand() {
+ super(FunctionID.ON_COMMAND.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnCommand object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnCommand(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnCommand object
+ * @param cmdID an integer object representing a Command ID
+ * @param triggerSource a TriggerSource object
+ */
+ public OnCommand(@NonNull Integer cmdID, @NonNull TriggerSource triggerSource) {
+ this();
+ setCmdID(cmdID);
+ setTriggerSource(triggerSource);
+ }
+ /**
+ * <p>Returns an <i>Integer</i> object representing the Command ID</p>
+ * @return Integer an integer representation of this object
+ */
+ public Integer getCmdID() {
+ return getInteger( KEY_CMD_ID );
+ }
+ /**
+ * <p>Sets a Command ID</p>
+ * @param cmdID an integer object representing a Command ID
+ */
+ public void setCmdID( @NonNull Integer cmdID ) {
+ setParameters(KEY_CMD_ID, cmdID);
+ }
+ /**
+ * <p>Returns a <I>TriggerSource</I> object which will be shown in the HMI</p>
+ * @return TriggerSource a TriggerSource object
+ */
+ public TriggerSource getTriggerSource() {
+ return (TriggerSource) getObject(TriggerSource.class, KEY_TRIGGER_SOURCE);
+ }
+ /**
+ * <p>Sets TriggerSource</p>
+ * <p>Indicates whether command was selected via VR or via a menu selection (using the OK button).</p>
+ * @param triggerSource a TriggerSource object
+ */
+ public void setTriggerSource( @NonNull TriggerSource triggerSource ) {
+ setParameters(KEY_TRIGGER_SOURCE, triggerSource);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnDriverDistraction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnDriverDistraction.java
new file mode 100644
index 000000000..8bd45e528
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnDriverDistraction.java
@@ -0,0 +1,80 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.DriverDistractionState;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or
+ * not).</p>
+ *
+ * <p></p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul><li>Can be sent with FULL, LIMITED or BACKGROUND</li></ul>
+ * AudioStreamingState:
+ * <ul><li>Any</li></ul>
+ * SystemContext:
+ * <ul><li>Any</li></ul>
+ * </ul>
+ * <p></p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>state</td>
+ * <td>{@linkplain DriverDistractionState}</td>
+ * <td>Current driver distraction state (i.e. whether driver distraction rules are in effect, or not). </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ */
+public class OnDriverDistraction extends RPCNotification {
+ public static final String KEY_STATE = "state";
+ /**
+ *Constructs a newly allocated OnDriverDistraction object
+ */
+ public OnDriverDistraction() {
+ super(FunctionID.ON_DRIVER_DISTRACTION.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnDriverDistraction object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnDriverDistraction(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnDriverDistraction object
+ * @param state the current driver distraction state
+ */
+ public OnDriverDistraction(@NonNull DriverDistractionState state) {
+ this();
+ setState(state);
+ }
+ /**
+ * <p>Called to get the current driver distraction state(i.e. whether driver distraction rules are in effect, or not)</p>
+ * @return {@linkplain DriverDistractionState} the Current driver distraction state.
+ */
+ public DriverDistractionState getState() {
+ return (DriverDistractionState) getObject(DriverDistractionState.class, KEY_STATE);
+ }
+ /**
+ * <p>Called to set the driver distraction state(i.e. whether driver distraction rules are in effect, or not)</p>
+ * @param state the current driver distraction state
+ */
+ public void setState( @NonNull DriverDistractionState state ) {
+ setParameters(KEY_STATE, state);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHMIStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHMIStatus.java
new file mode 100644
index 000000000..6c79eeb5d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHMIStatus.java
@@ -0,0 +1,190 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.AudioStreamingState;
+import com.smartdevicelink.proxy.rpc.enums.HMILevel;
+import com.smartdevicelink.proxy.rpc.enums.SystemContext;
+import com.smartdevicelink.proxy.rpc.enums.VideoStreamingState;
+
+import java.util.Hashtable;
+
+/**
+ * <p>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 ({@linkplain HMILevel}, {@linkplain AudioStreamingState} or {@linkplain SystemContext}) for the application</p>
+ * <p>All three values are, in principle, independent of each other (though there may be some relationships). A value for
+ * one parameter should not be interpreted from the value of another parameter.</p>
+ * <p>There are no guarantees about the timeliness or latency of the OnHMIStatus notification. Therefore, for example,
+ * information such as {@linkplain AudioStreamingState} may not indicate that the audio stream became inaudible to the user
+ * exactly when the OnHMIStatus notification was received.</p>
+ *
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>hmiLevel</td>
+ * <td>{@linkplain HMILevel}</td>
+ * <td>The current HMI Level in effect for the application.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>audioStreamingState</td>
+ * <td>{@linkplain AudioStreamingState}</td>
+ * <td>Current state of audio streaming for the application.
+ * When this parameter has a value of NOT_AUDIBLE,
+ * the application must stop streaming audio to SDL.
+ * Informs app whether any currently streaming audio is
+ * audible to user (AUDIBLE) or not (NOT_AUDIBLE). A
+ * value of NOT_AUDIBLE means that either the
+ * application's audio will not be audible to the user, or
+ * that the application's audio should not be audible to
+ * the user (i.e. some other application on the mobile
+ * device may be streaming audio and the application's
+ * audio would be blended with that other audio). </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>videoStreamingState</td>
+ * <td>{@linkplain VideoStreamingState}</td>
+ * <td>If it is NOT_STREAMABLE, the app must stop streaming video to SDL Core(stop service).</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>systemContext</td>
+ * <td>{@linkplain SystemContext}</td>
+ * <td>Indicates that a user-initiated interaction is in-progress
+ * (VRSESSION or MENU), or not (MAIN)</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * </p>
+ * @since SmartDeviceLink 1.0
+ * @see RegisterAppInterface
+ */
+public class OnHMIStatus extends RPCNotification {
+ public static final String KEY_AUDIO_STREAMING_STATE = "audioStreamingState";
+ public static final String KEY_VIDEO_STREAMING_STATE = "videoStreamingState";
+ public static final String KEY_SYSTEM_CONTEXT = "systemContext";
+ public static final String KEY_HMI_LEVEL = "hmiLevel";
+
+ private Boolean firstRun;
+
+ /**
+ *Constructs a newly allocated OnHMIStatus object
+ */
+ public OnHMIStatus() {
+ super(FunctionID.ON_HMI_STATUS.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnHMIStatus object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnHMIStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnHMIStatus object
+ * @param hmiLevel the HMILevel to set
+ * @param audioStreamingState the state of audio streaming of the application
+ * @param systemContext Indicates that a user-initiated interaction is in-progress
+ */
+ public OnHMIStatus(@NonNull HMILevel hmiLevel, @NonNull AudioStreamingState audioStreamingState, @NonNull SystemContext systemContext) {
+ this();
+ setHmiLevel(hmiLevel);
+ setAudioStreamingState(audioStreamingState);
+ setSystemContext(systemContext);
+ }
+
+ @Override
+ public void format(com.smartdevicelink.util.Version rpcVersion, boolean formatParams){
+ if(rpcVersion.getMajor() < 5){
+ if(getVideoStreamingState() == null){
+ setVideoStreamingState(VideoStreamingState.STREAMABLE);
+ }
+ }
+
+ super.format(rpcVersion,formatParams);
+ }
+
+ /**
+ * <p>Get HMILevel in effect for the application</p>
+ * @return {@linkplain HMILevel} the current HMI Level in effect for the application
+ */
+ public HMILevel getHmiLevel() {
+ return (HMILevel) getObject(HMILevel.class, KEY_HMI_LEVEL);
+ }
+ /**
+ * <p>Set the HMILevel of OnHMIStatus</p>
+ * @param hmiLevel the HMILevel to set
+ */
+ public void setHmiLevel( @NonNull HMILevel hmiLevel ) {
+ setParameters(KEY_HMI_LEVEL, hmiLevel);
+ }
+ /**
+ * <p>Get current state of audio streaming for the application</p>
+ * @return {@linkplain AudioStreamingState} Returns current state of audio streaming for the application
+ */
+ public AudioStreamingState getAudioStreamingState() {
+ return (AudioStreamingState) getObject(AudioStreamingState.class, KEY_AUDIO_STREAMING_STATE);
+ }
+ /**
+ * <p>Set the audio streaming state</p>
+ * @param audioStreamingState the state of audio streaming of the application
+ */
+ public void setAudioStreamingState(@NonNull AudioStreamingState audioStreamingState ) {
+ setParameters(KEY_AUDIO_STREAMING_STATE, audioStreamingState);
+ }
+ /**
+ * <p>Get current state of video streaming for the application</p>
+ * @return {@linkplain VideoStreamingState} Returns current state of video streaming for the application
+ */
+ public VideoStreamingState getVideoStreamingState() {
+ return (VideoStreamingState) getObject(VideoStreamingState.class, KEY_VIDEO_STREAMING_STATE);
+ }
+ /**
+ * <p>Set the video streaming state</p>
+ * @param videoStreamingState the state of video streaming of the application
+ */
+ public void setVideoStreamingState( VideoStreamingState videoStreamingState ) {
+ setParameters(KEY_VIDEO_STREAMING_STATE, videoStreamingState);
+ }
+ /**
+ * <p>Get the System Context</p>
+ * @return {@linkplain SystemContext} whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN).
+ */
+ public SystemContext getSystemContext() {
+ return (SystemContext) getObject(SystemContext.class, KEY_SYSTEM_CONTEXT);
+ }
+ /**
+ * <p>Set the System Context of OnHMIStatus</p>
+ * @param systemContext Indicates that a user-initiated interaction is in-progress
+ * (VRSESSION or MENU), or not (MAIN)
+ */
+ public void setSystemContext( @NonNull SystemContext systemContext ) {
+ setParameters(KEY_SYSTEM_CONTEXT, systemContext);
+ }
+ /**
+ * <p>Query whether it's the first run</p>
+ * @return boolean whether it's the first run
+ */
+ public Boolean getFirstRun() {
+ return this.firstRun;
+ }
+ /**
+ * <p>Set the firstRun value</p>
+ * @param firstRun True if it is the first run, False or not
+ */
+ public void setFirstRun(Boolean firstRun) {
+ this.firstRun = firstRun;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHashChange.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHashChange.java
new file mode 100644
index 000000000..2a4581f06
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnHashChange.java
@@ -0,0 +1,75 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+
+/**
+ * Notification containing an updated hashID which can be used over connection cycles (i.e. loss of connection, ignition cycles, etc.).
+ * Sent after initial registration and subsequently after any change in the calculated hash of all persisted app data.
+ * <p></p>
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>hashID</td>
+ * <td>String</td>
+ * <td>Calculated hash ID to be referenced during RegisterAppInterface.</td>
+ * <td>Y</td>
+ * <td>maxlength: 100</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 3.0
+ *
+ */
+public class OnHashChange extends RPCNotification {
+ public static final String KEY_HASH_ID = "hashID";
+ /**
+ * Constructs a new OnHashChange object
+ */
+
+ public OnHashChange() {
+ super(FunctionID.ON_HASH_CHANGE.toString());
+ }
+ /**
+ * <p>
+ * Constructs a new OnKeyboardInput object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public OnHashChange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new OnHashChange object
+ */
+ public OnHashChange(@NonNull String hashID) {
+ this();
+ setHashID(hashID);
+ }
+
+ public String getHashID() {
+ return getString(KEY_HASH_ID);
+ }
+
+ public void setHashID(@NonNull String hashID) {
+ setParameters(KEY_HASH_ID, hashID);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnInteriorVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnInteriorVehicleData.java
new file mode 100644
index 000000000..a91a720c4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnInteriorVehicleData.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+
+public class OnInteriorVehicleData extends RPCNotification {
+ public static final String KEY_MODULE_DATA = "moduleData";
+
+ /**
+ * Constructs a new OnInteriorVehicleData object
+ */
+ public OnInteriorVehicleData() {
+ super(FunctionID.ON_INTERIOR_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new OnInteriorVehicleData object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public OnInteriorVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new OnInteriorVehicleData object
+ * @param moduleData
+ */
+ public OnInteriorVehicleData(@NonNull ModuleData moduleData) {
+ this();
+ setModuleData(moduleData);
+ }
+
+ /**
+ * Gets the moduleData
+ *
+ * @return ModuleData
+ */
+ public ModuleData getModuleData() {
+ return (ModuleData) getObject(ModuleData.class, KEY_MODULE_DATA);
+ }
+
+ /**
+ * Sets the moduleData
+ *
+ * @param moduleData
+ */
+ public void setModuleData(@NonNull ModuleData moduleData) {
+ setParameters(KEY_MODULE_DATA, moduleData);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnKeyboardInput.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnKeyboardInput.java
new file mode 100644
index 000000000..5bf3b8893
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnKeyboardInput.java
@@ -0,0 +1,100 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.KeyboardEvent;
+
+import java.util.Hashtable;
+
+/**
+ * On-screen keyboard event. Can be full string or individual keypresses depending on keyboard mode.
+ * <p></p>
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>event</td>
+ * <td>KeyboardEvent</td>
+ * <td>On-screen keyboard input data.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0</td>
+ * </tr>
+ * <tr>
+ * <td>data</td>
+ * <td>String</td>
+ * <td>On-screen keyboard input data.For dynamic keypress events, this will be the current compounded string of entry text.For entry cancelled and entry aborted events, this data param will be omitted.</td>
+ * <td></td>
+ * <td>Maxlength: 500</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ *
+ * </table>
+ *
+ */
+
+public class OnKeyboardInput extends RPCNotification {
+ public static final String KEY_DATA = "data";
+ public static final String KEY_EVENT = "event";
+ /**
+ * Constructs a new OnKeyboardInput object
+ */
+ public OnKeyboardInput() {
+ super(FunctionID.ON_KEYBOARD_INPUT.toString());
+ }
+ /**
+ * <p>
+ * Constructs a new OnKeyboardInput object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public OnKeyboardInput(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new OnKeyboardInput object
+ */
+ public OnKeyboardInput(@NonNull KeyboardEvent event) {
+ this();
+ setEvent(event);
+ }
+
+ public KeyboardEvent getEvent() {
+ return (KeyboardEvent) getObject(KeyboardEvent.class, KEY_EVENT);
+ }
+
+ public void setEvent(@NonNull KeyboardEvent event) {
+ setParameters(KEY_EVENT, event);
+ }
+
+ public void setData(String data) {
+ setParameters(KEY_DATA, data);
+ }
+ public String getData() {
+ Object obj = getParameters(KEY_DATA);
+ if (obj instanceof String) {
+ return (String) obj;
+ }
+ return null;
+ }
+
+ @Override
+ public String toString(){
+ String result = this.getFunctionName() +": " + " data: " + this.getData() + " event:" + this.getEvent().toString();
+ return result;
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLanguageChange.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLanguageChange.java
new file mode 100644
index 000000000..5464eb359
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLanguageChange.java
@@ -0,0 +1,115 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+
+import java.util.Hashtable;
+
+/**
+ * Provides information to what language the Sdl HMI language was changed
+ * <p>
+ * </p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * AudioStreamingState:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * SystemContext:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * </ul>
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Req</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>language</td>
+ * <td>{@linkplain Language}</td>
+ * <td>Current SDL voice engine (VR+TTS) language</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>hmiDisplayLanguage</td>
+ * <td>{@linkplain Language}</td>
+ * <td>Current display language</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * </p>
+ *
+ */
+public class OnLanguageChange extends RPCNotification {
+ public static final String KEY_LANGUAGE = "language";
+ public static final String KEY_HMI_DISPLAY_LANGUAGE = "hmiDisplayLanguage";
+ /**
+ *Constructs a newly allocated OnCommand object
+ */
+ public OnLanguageChange() {
+ super(FunctionID.ON_LANGUAGE_CHANGE.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnLanguageChange object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnLanguageChange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnCommand object
+ * @param language language that current SDL voice engine(VR+TTS) use
+ * @param hmiDisplayLanguage language that current SDL voice engine(VR+TTS) use
+ */
+ public OnLanguageChange(@NonNull Language language, @NonNull Language hmiDisplayLanguage) {
+ this();
+ setLanguage(language);
+ setHmiDisplayLanguage(hmiDisplayLanguage);
+ }
+ /**
+ * <p>Sets language that current SDL voice engine(VR+TTS) use</p>
+ * @param language language that current SDL voice engine(VR+TTS) use
+ */
+ public void setLanguage(@NonNull Language language) {
+ setParameters(KEY_LANGUAGE, language);
+ }
+ /**
+ * <p>Returns language that current SDL voice engine(VR+TTS) use</p>
+ * @return {@linkplain Language} language that current SDL voice engine(VR+TTS) use
+ */
+ public Language getLanguage() {
+ return (Language) getObject(Language.class, KEY_LANGUAGE);
+ }
+ /**
+ * <p>Sets language that current display use</p>
+ * @param hmiDisplayLanguage language that current SDL voice engine(VR+TTS) use
+ */
+ public void setHmiDisplayLanguage(@NonNull Language hmiDisplayLanguage) {
+ setParameters(KEY_HMI_DISPLAY_LANGUAGE, hmiDisplayLanguage);
+ }
+ /**
+ * <p>Returns language that current display use</p>
+ * @return {@linkplain Language} language that current display use
+ */
+ public Language getHmiDisplayLanguage() {
+ return (Language) getObject(Language.class, KEY_HMI_DISPLAY_LANGUAGE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLockScreenStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLockScreenStatus.java
new file mode 100644
index 000000000..21a5c3520
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnLockScreenStatus.java
@@ -0,0 +1,74 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.HMILevel;
+import com.smartdevicelink.proxy.rpc.enums.LockScreenStatus;
+
+import static com.smartdevicelink.proxy.rpc.OnHMIStatus.KEY_HMI_LEVEL;
+
+/**
+ * The lockscreen must perform the following:
+ * Limit all application control usability from the mobile device with a full-screen static image overlay or separate view.
+ * For simplicity, the OnLockScreenStatus RPC will be provided via the onOnLockScreenNotification call back. The call back will include the LockScreenStatus enum which indicates if the lockscreen is required, optional or not required.
+ * The call back also includes details regarding the current HMI_Status level, driver distraction status and user selection status of the application.
+ *
+ *
+ */
+public class OnLockScreenStatus extends RPCNotification {
+ public static final String KEY_DRIVER_DISTRACTION = "driverDistraction";
+ public static final String KEY_SHOW_LOCK_SCREEN = "showLockScreen";
+ public static final String KEY_USER_SELECTED = "userSelected";
+
+ public OnLockScreenStatus() {
+ super(FunctionID.ON_LOCK_SCREEN_STATUS.toString());
+ }
+ /**
+ * <p>Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)</p>
+ * @return Boolean
+ */
+
+ public Boolean getDriverDistractionStatus() {
+ return getBoolean(KEY_DRIVER_DISTRACTION);
+ }
+
+ public void setDriverDistractionStatus(Boolean driverDistractionStatus) {
+ setParameters(KEY_DRIVER_DISTRACTION, driverDistractionStatus);
+ }
+ /**
+ * <p>Get the {@linkplain LockScreenStatus} enumeration, indicating if the lockscreen should be required, optional or off </p>
+ * @return {@linkplain LockScreenStatus}
+ */
+
+ public LockScreenStatus getShowLockScreen() {
+ return (LockScreenStatus) getParameters(KEY_SHOW_LOCK_SCREEN);
+ }
+
+ public void setShowLockScreen(LockScreenStatus showLockScreen) {
+ setParameters(KEY_SHOW_LOCK_SCREEN, showLockScreen);
+ }
+ /**
+ * <p>Get user selection status for the application (has the app been selected via hmi or voice command)</p>
+ * @return Boolean the current user selection status
+ */
+
+ public Boolean getUserSelected() {
+ return getBoolean(KEY_USER_SELECTED);
+ }
+
+ public void setUserSelected(Boolean userSelected) {
+ setParameters(KEY_USER_SELECTED, userSelected);
+ }
+ /**
+ * <p>Get HMILevel in effect for the application</p>
+ * @return {@linkplain HMILevel} the current HMI Level in effect for the application
+ */
+
+ public HMILevel getHMILevel() {
+ return (HMILevel) getParameters(KEY_HMI_LEVEL);
+ }
+
+ public void setHMILevel(HMILevel setHMILevel) {
+ setParameters(KEY_HMI_LEVEL, setHMILevel);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnPermissionsChange.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnPermissionsChange.java
new file mode 100644
index 000000000..efe1c184b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnPermissionsChange.java
@@ -0,0 +1,90 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Provides update to app of which sets of functions are available
+ * <p>
+ * </p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul>
+ * <li>Any</li>
+ * </ul>
+ * AudioStreamingState:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * SystemContext:
+ * <ul>
+ * <li>TBD</li>
+ * </ul>
+ * </ul>
+ * <p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Req</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>permissionItem</td>
+ * <td>PermissionItem[]</td>
+ * <td>Change in permissions for a given set of RPCs</td>
+ * <td>Y</td>
+ * <td>Minsize=1 Maxsize=100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * </p>
+ */
+public class OnPermissionsChange extends RPCNotification {
+ public static final String KEY_PERMISSION_ITEM = "permissionItem";
+ /**
+ *Constructs a newly allocated OnCommand object
+ */
+ public OnPermissionsChange() {
+ super(FunctionID.ON_PERMISSIONS_CHANGE.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnPermissionsChange object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnPermissionsChange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnCommand object
+ * @param permissionItem an List of PermissionItem describing change in permissions for a given set of RPCs
+ */
+ public OnPermissionsChange(@NonNull List<PermissionItem> permissionItem) {
+ this();
+ setPermissionItem(permissionItem);
+ }
+ /**
+ * <p>Returns List<PermissionItem> object describing change in permissions for a given set of RPCs</p>
+ * @return List<{@linkplain PermissionItem}> an object describing describing change in permissions for a given set of RPCs
+ */
+ @SuppressWarnings("unchecked")
+ public List<PermissionItem> getPermissionItem() {
+ return (List<PermissionItem>) getObject(PermissionItem.class, KEY_PERMISSION_ITEM);
+ }
+ /**
+ * <p>Sets PermissionItems describing change in permissions for a given set of RPCs</p>
+ * @param permissionItem an List of PermissionItem describing change in permissions for a given set of RPCs
+ */
+ public void setPermissionItem(@NonNull List<PermissionItem> permissionItem) {
+ setParameters(KEY_PERMISSION_ITEM, permissionItem);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnRCStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnRCStatus.java
new file mode 100644
index 000000000..8be1e0007
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnRCStatus.java
@@ -0,0 +1,69 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class OnRCStatus extends RPCNotification {
+ public static final String KEY_ALLOCATED_MODULES = "allocatedModules";
+ public static final String KEY_FREE_MODULES = "freeModules";
+ public static final String KEY_ALLOWED = "allowed";
+
+ /**
+ * Constructs a new OnRCStatus object
+ */
+ public OnRCStatus() {
+ super(FunctionID.ON_RC_STATUS.toString());
+ }
+
+ /**
+ * Constructs a new OnRCStatus object indicated by the Hashtable
+ * parameter
+ * @param hash The Hashtable to use
+ */
+ public OnRCStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated OnRCStatus object
+ *
+ * @param allocatedModules Contains a list (zero or more) of module types that are allocated to the application.
+ * @param freeModules Contains a list (zero or more) of module types that are free to access for the application.
+ */
+ public OnRCStatus(@NonNull List<ModuleData> allocatedModules, @NonNull List<ModuleData> freeModules) {
+ this();
+ setAllocatedModules(allocatedModules);
+ setFreeModules(freeModules);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<ModuleData> getAllocatedModules() {
+ return (List<ModuleData>) getObject(ModuleData.class, KEY_ALLOCATED_MODULES);
+ }
+
+ public void setAllocatedModules(@NonNull List<ModuleData> allocatedModules) {
+ setParameters(KEY_ALLOCATED_MODULES, allocatedModules);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<ModuleData> getFreeModules() {
+ return (List<ModuleData>) getObject(ModuleData.class, KEY_FREE_MODULES);
+ }
+
+ public void setFreeModules(@NonNull List<ModuleData> freeModules) {
+ setParameters(KEY_FREE_MODULES, freeModules);
+ }
+
+ public Boolean getAllowed() {
+ return getBoolean(KEY_ALLOWED);
+ }
+
+ public void setAllowed(Boolean allowed) {
+ setParameters(KEY_ALLOWED, allowed);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSdlChoiceChosen.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSdlChoiceChosen.java
new file mode 100644
index 000000000..5eec2db91
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSdlChoiceChosen.java
@@ -0,0 +1,158 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.TriggerSource;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class OnSdlChoiceChosen extends RPCNotification {
+ public static final String KEY_SDL_CHOICE = "sdlChoice";
+ public static final String KEY_TRIGGER_SOURCE = "triggerSource";
+
+ public class SdlSubMenu {
+ private Integer _menuID = null;
+ @SuppressWarnings("unused")
+ private Integer _position = null;
+ private String _menuName = null;
+
+ // Constructor
+ SdlSubMenu(Integer menuID, Integer position, String menuName) {
+ _menuID = menuID;
+ _position = position;
+ _menuName = menuName;
+ }
+
+ // Restrict no-arg constructor
+ @SuppressWarnings("unused")
+ private SdlSubMenu() {}
+
+ // Public Getters
+ public Integer getMenuID() {
+ return _menuID;
+ }
+
+ public String getMenuName() {
+ return _menuName;
+ }
+
+ public String toString() {
+ return _menuName;
+ }
+ }
+
+ public class SdlCommand {
+ private Integer _commandID = null;
+ private SdlSubMenu _parentSubMenu = null;
+ @SuppressWarnings("unused")
+ private Integer _position = null;
+ private String _menuName = null;
+ private List<String> _vrCommands = null;
+
+ // Constructor
+ SdlCommand(Integer commandID, SdlSubMenu parentSubMenu, Integer position, String menuName, List<String> vrCommands) {
+ _commandID = commandID;
+ _parentSubMenu = parentSubMenu;
+ _position = position;
+ _menuName = menuName;
+ _vrCommands = vrCommands;
+ }
+
+ // Restrict no-arg constructor
+ @SuppressWarnings("unused")
+ private SdlCommand() {}
+
+ // Public Getters
+ public Integer getCommandID() {
+ return _commandID;
+ }
+
+ public SdlSubMenu getParentSubMenu() {
+ return _parentSubMenu;
+ }
+
+ public String getMenuName() {
+ return _menuName;
+ }
+
+ public List<String> getVrCommands() {
+ return _vrCommands;
+ }
+
+ public String toString() {
+ return _menuName;
+ }
+ }
+
+ public class SdlChoice {
+
+ private Choice _choice = null;
+
+ // Constructor
+ public SdlChoice(Choice choice) {
+ _choice = choice;
+ }
+
+ public Choice getChoice() {
+ return _choice;
+ }
+
+ public Integer getChoiceID() {
+ return _choice.getChoiceID();
+ }
+
+ public String getMenuName() {
+ return _choice.getMenuName();
+ }
+
+ public List<String> getVrCommands() {
+ return _choice.getVrCommands();
+ }
+
+ public String toString() {
+ return _choice.getMenuName();
+ }
+ }
+
+ public class SdlChoiceSet {
+ private Integer _choiceSetID = null;
+ private List<SdlChoice> _choiceSet = null;
+
+ // Constructor
+ SdlChoiceSet(Integer choiceSetID, List<SdlChoice> choiceSet) {
+ _choiceSetID = choiceSetID;
+ _choiceSet = choiceSet;
+ }
+
+ public Integer getChoiceSetID() {
+ return _choiceSetID;
+ }
+
+ public List<SdlChoice> getChoiceSet() {
+ return _choiceSet;
+ }
+ }
+
+
+
+
+ public OnSdlChoiceChosen() {
+ super(FunctionID.ON_SDL_CHOICE_CHOSEN.toString());
+ }
+ public OnSdlChoiceChosen(Hashtable<String, Object> hash){
+ super(hash);
+ }
+ public SdlChoice getSdlChoice() {
+ return (SdlChoice) getParameters(KEY_SDL_CHOICE);
+ }
+ public void setSdlChoice(SdlChoice sdlChoice) {
+ setParameters(KEY_SDL_CHOICE, sdlChoice);
+ }
+ public TriggerSource getTriggerSource() {
+ return (TriggerSource) getObject(TriggerSource.class, KEY_TRIGGER_SOURCE);
+ }
+ public void setTriggerSource( TriggerSource triggerSource ) {
+ setParameters(KEY_TRIGGER_SOURCE, triggerSource);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnStreamRPC.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnStreamRPC.java
new file mode 100644
index 000000000..679596026
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnStreamRPC.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+public class OnStreamRPC extends RPCNotification {
+ public static final String KEY_FILENAME = "fileName";
+ public static final String KEY_BYTESCOMPLETE = "bytesComplete";
+ public static final String KEY_FILESIZE = "fileSize";
+
+ public OnStreamRPC() {
+ super(FunctionID.ON_STREAM_RPC.toString());
+ }
+
+ public void setFileName(String fileName) {
+ setParameters(KEY_FILENAME, fileName);
+ }
+ public String getFileName() {
+ return getString(KEY_FILENAME);
+ }
+
+ public void setBytesComplete(Long bytesComplete) {
+ setParameters(KEY_BYTESCOMPLETE, bytesComplete);
+ }
+ public Long getBytesComplete() {
+ return getLong(KEY_BYTESCOMPLETE);
+ }
+
+ public void setFileSize(Long fileSize) {
+ setParameters(KEY_FILESIZE, fileSize);
+ }
+ public Long getFileSize() {
+ return getLong(KEY_FILESIZE);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemCapabilityUpdated.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemCapabilityUpdated.java
new file mode 100644
index 000000000..37d34b420
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemCapabilityUpdated.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+
+/**
+ * A notification to inform the connected device that a specific system capability has changed.
+ */
+public class OnSystemCapabilityUpdated extends RPCNotification {
+
+ public static final String KEY_SYSTEM_CAPABILITY = "systemCapability";
+
+ // Constructors
+
+ public OnSystemCapabilityUpdated() {
+ super(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.toString());
+ }
+
+ public OnSystemCapabilityUpdated(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public OnSystemCapabilityUpdated(@NonNull SystemCapability serviceData) {
+ this();
+ setSystemCapability(serviceData);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param systemCapability - The system capability that has been updated
+ */
+ public void setSystemCapability(@NonNull SystemCapability systemCapability){
+ setParameters(KEY_SYSTEM_CAPABILITY, systemCapability);
+ }
+
+ /**
+ * @return systemCapability - The system capability that has been updated
+ */
+ public SystemCapability getSystemCapability(){
+ return (SystemCapability) getObject(SystemCapability.class, KEY_SYSTEM_CAPABILITY);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemRequest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemRequest.java
new file mode 100644
index 000000000..9654d8c2a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnSystemRequest.java
@@ -0,0 +1,361 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import com.smartdevicelink.marshal.JsonRPCMarshaller;
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.FileType;
+import com.smartdevicelink.proxy.rpc.enums.RequestType;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * An asynchronous request from the system for specific data from the device or the cloud or response to a request from the device or cloud. Binary data can be included in hybrid part of message for some requests (such as Authentication request responses)
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>requestType</td>
+ * <td>RequestType</td>
+ * <td>The type of system request.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2 </td>
+ * </tr>
+ * </tr>
+ * <tr>
+ * <td>requestSubType</td>
+ * <td>String</td>
+ * <td>This parameter is filled for supporting OEM proprietary data exchanges.</td>
+ * <td>N</td>
+ * <td>Max Length: 255</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>url</td>
+ * <td>Array of Strings</td>
+ * <td>Optional URL for HTTP requests.If blank, the binary data shall be forwarded to the app.If not blank, the binary data shall be forwarded to the url with a provided timeout in seconds.</td>
+ * <td>N</td>
+ * <td>maxlength: 1000; minsize:1; maxsize: 100</td>
+ * <td>SmartDeviceLink 2.3.2 </td>
+ * </tr>
+ * <tr>
+ * <td>timeout</td>
+ * <td>Integer</td>
+ * <td>Optional timeout for HTTP requests;Required if a URL is provided</td>
+ * <td>N</td>
+ * <td>minvalue:0; maxvalue: 2000000000</td>
+ * <td>SmartDeviceLink </td>
+ * </tr>
+ * <tr>
+ * <td>fileType</td>
+ * <td>FileType</td>
+ * <td>Optional file type (meant for HTTP file requests).</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2 </td>
+ * </tr>
+ * <tr>
+ * <td>offset</td>
+ * <td>Float</td>
+ * <td>Optional offset in bytes for resuming partial data chunks</td>
+ * <td>N</td>
+ * <td>minvalue:0; maxvalue:100000000000</td>
+ * <td>SmartDeviceLink 2.3.2 </td>
+ * </tr>
+ * <tr>
+ * <td>length</td>
+ * <td>Float</td>
+ * <td>Optional length in bytes for resuming partial data chunks</td>
+ * <td>N</td>
+ * <td>minvalue: 0; maxvalue:100000000000</td>
+ * <td>SmartDeviceLink 2.3.2 </td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.3.2
+ */
+public class OnSystemRequest extends RPCNotification {
+ public static final String KEY_URL_V1 = "URL";
+ public static final String KEY_URL = "url";
+ public static final String KEY_TIMEOUT_V1 = "Timeout";
+ public static final String KEY_TIMEOUT = "timeout";
+ public static final String KEY_HEADERS = "headers";
+ public static final String KEY_BODY = "body";
+ public static final String KEY_FILE_TYPE = "fileType";
+ public static final String KEY_REQUEST_TYPE = "requestType";
+ public static final String KEY_REQUEST_SUB_TYPE = "requestSubType";
+ public static final String KEY_DATA = "data";
+ public static final String KEY_OFFSET = "offset";
+ public static final String KEY_LENGTH = "length";
+
+ private String body;
+ private Headers headers;
+
+ /**
+ * Constructs a new OnSystemsRequest object
+ */
+ public OnSystemRequest() {
+ super(FunctionID.ON_SYSTEM_REQUEST.toString());
+ }
+
+ public OnSystemRequest(Hashtable<String, Object> hash) {
+ this(hash, (byte[]) hash.get(RPCStruct.KEY_BULK_DATA));
+ }
+
+ public OnSystemRequest(Hashtable<String, Object> hash, byte[] bulkData){
+ super(hash);
+ setBulkData(bulkData);
+ }
+
+ /**
+ * Constructs a new OnSystemsRequest object
+ */
+ public OnSystemRequest(@NonNull RequestType requestType) {
+ this();
+ setRequestType(requestType);
+ }
+
+ private void handleBulkData(byte[] bulkData){
+ if(bulkData == null){
+ return;
+ }
+
+ JSONObject httpJson;
+ String tempBody = null;
+ Headers tempHeaders = null;
+ if(RequestType.PROPRIETARY.equals(this.getRequestType())){
+ try{
+ JSONObject bulkJson = new JSONObject(new String(bulkData));
+
+ httpJson = bulkJson.getJSONObject("HTTPRequest");
+ tempBody = getBody(httpJson);
+ tempHeaders = getHeaders(httpJson);
+ }catch(JSONException e){
+ Log.e("OnSystemRequest", "HTTPRequest in bulk data was malformed.");
+ e.printStackTrace();
+ }catch(NullPointerException e){
+ Log.e("OnSystemRequest", "Invalid HTTPRequest object in bulk data.");
+ e.printStackTrace();
+ }
+ }else if(RequestType.HTTP.equals(this.getRequestType())){
+ tempHeaders = new Headers();
+ tempHeaders.setContentType("application/json");
+ tempHeaders.setConnectTimeout(7);
+ tempHeaders.setDoOutput(true);
+ tempHeaders.setDoInput(true);
+ tempHeaders.setUseCaches(false);
+ tempHeaders.setRequestMethod("POST");
+ tempHeaders.setReadTimeout(7);
+ tempHeaders.setInstanceFollowRedirects(false);
+ tempHeaders.setCharset("utf-8");
+ tempHeaders.setContentLength(bulkData.length);
+ }
+
+ this.body = tempBody;
+ this.headers = tempHeaders;
+ }
+
+ private String getBody(JSONObject httpJson){
+ String result = null;
+
+ try{
+ result = httpJson.getString("body");
+ }catch(JSONException e){
+ Log.e("OnSystemRequest", "\"body\" key doesn't exist in bulk data.");
+ e.printStackTrace();
+ }
+
+ return result;
+ }
+
+ private Headers getHeaders(JSONObject httpJson){
+ Headers result = null;
+
+ try{
+ JSONObject httpHeadersJson = httpJson.getJSONObject("headers");
+ Hashtable<String, Object> httpHeadersHash = JsonRPCMarshaller.deserializeJSONObject(httpHeadersJson);
+ result = new Headers(httpHeadersHash);
+ }catch(JSONException e){
+ Log.e("OnSystemRequest", "\"headers\" key doesn't exist in bulk data.");
+ e.printStackTrace();
+ }
+
+ return result;
+ }
+
+ @Deprecated
+ public void setBinData(byte[] aptData) {
+ setBulkData(aptData);
+ }
+
+ @Deprecated
+ public byte[] getBinData() {
+ return getBulkData();
+ }
+
+ @Override
+ public void setBulkData(byte[] bulkData){
+ super.setBulkData(bulkData);
+ handleBulkData(bulkData);
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public List<String> getLegacyData() {
+ return (List<String>) getObject(String.class, KEY_DATA);
+ }
+
+ public String getBody(){
+ return this.body;
+ }
+
+ public void setBody(String body) {
+ this.body = body;
+ }
+
+ public void setHeaders(Headers header) {
+ this.headers = header;
+ }
+
+ public Headers getHeader() {
+ return this.headers;
+ }
+
+ public RequestType getRequestType() {
+ return (RequestType) getObject(RequestType.class, KEY_REQUEST_TYPE);
+ }
+
+ public void setRequestType(@NonNull RequestType requestType) {
+ setParameters(KEY_REQUEST_TYPE, requestType);
+ }
+
+ public String getRequestSubType() {
+ return getString(KEY_REQUEST_SUB_TYPE);
+ }
+
+ public void setRequestSubType(String requestSubType) {
+ setParameters(KEY_REQUEST_SUB_TYPE, requestSubType);
+ }
+
+ public String getUrl() {
+ Object o = getParameters(KEY_URL);
+ if (o == null)
+ {
+ //try again for gen 1.1
+ o = getParameters(KEY_URL_V1);
+ }
+ if (o == null)
+ return null;
+
+ if (o instanceof String) {
+ return (String) o;
+ }
+ return null;
+ }
+
+ public void setUrl(String url) {
+ setParameters(KEY_URL, url);
+ }
+
+ public FileType getFileType() {
+ return (FileType) getObject(FileType.class, KEY_FILE_TYPE);
+ }
+
+ public void setFileType(FileType fileType) {
+ setParameters(KEY_FILE_TYPE, fileType);
+ }
+
+ /**
+ * @deprecated as of SmartDeviceLink 4.0
+ * @param offset
+ */
+ public void setOffset(Integer offset) {
+ if(offset == null){
+ setOffset((Long)null);
+ }else{
+ setOffset(offset.longValue());
+ }
+ }
+
+ public Long getOffset() {
+ final Object o = getParameters(KEY_OFFSET);
+
+ if (o == null){
+ return null;
+ }
+
+ if (o instanceof Integer) {
+ return ((Integer) o).longValue();
+ }else if(o instanceof Long){
+ return (Long) o;
+ }
+ return null;
+ }
+
+ public void setOffset(Long offset) {
+ setParameters(KEY_OFFSET, offset);
+ }
+
+ public Integer getTimeout() {
+ Object o = getParameters(KEY_TIMEOUT);
+
+ if (o == null){
+ o = getParameters(KEY_TIMEOUT_V1);
+ if (o == null) return null;
+ }
+
+ if (o instanceof Integer) {
+ return (Integer) o;
+ }
+ return null;
+ }
+
+ public void setTimeout(Integer timeout) {
+ setParameters(KEY_TIMEOUT, timeout);
+ }
+
+ public Long getLength() {
+ final Object o = getParameters(KEY_LENGTH);
+ if (o == null){
+ return null;
+ }
+
+ if (o instanceof Integer) {
+ return ((Integer) o).longValue();
+ }else if(o instanceof Long){
+ return (Long) o;
+ }
+ return null;
+ }
+
+ /**
+ * @deprecated as of SmartDeviceLink 4.0
+ * @param length
+ */
+ public void setLength(Integer length) {
+ if(length == null){
+ setLength((Long)null);
+ }else{
+ setLength(length.longValue());
+ }
+ }
+
+ public void setLength(Long length) {
+ setParameters(KEY_LENGTH, length);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTBTClientState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTBTClientState.java
new file mode 100644
index 000000000..fad694373
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTBTClientState.java
@@ -0,0 +1,80 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.TBTState;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Notifies the application of the current TBT client status on the module.</p>
+ *
+ * <p></p>
+ * <b>HMI Status Requirements:</b>
+ * <ul>
+ * HMILevel:
+ * <ul><li>Can be sent with FULL, LIMITED or BACKGROUND</li></ul>
+ * AudioStreamingState:
+ * <ul><li>Any</li></ul>
+ * SystemContext:
+ * <ul><li>Any</li></ul>
+ * </ul>
+ * <p></p>
+ * <b>Parameter List:</b>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver Available</th>
+ * </tr>
+ * <tr>
+ * <td>state</td>
+ * <td>{@linkplain TBTState}</td>
+ * <td>Current state of TBT client.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ *
+ */
+public class OnTBTClientState extends RPCNotification {
+ public static final String KEY_STATE = "state";
+ /**
+ *Constructs a newly allocated OnTBTClientState object
+ */
+ public OnTBTClientState() {
+ super(FunctionID.ON_TBT_CLIENT_STATE.toString());
+ }
+ /**
+ *<p>Constructs a newly allocated OnTBTClientState object indicated by the Hashtable parameter</p>
+ *@param hash The Hashtable to use
+ */
+ public OnTBTClientState(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ *Constructs a newly allocated OnTBTClientState object
+ * @param state current state of TBT client
+ */
+ public OnTBTClientState(@NonNull TBTState state) {
+ this();
+ setState(state);
+ }
+ /**
+ * <p>Called to get the current state of TBT client</p>
+ * @return {@linkplain TBTState} the current state of TBT client
+ */
+ public TBTState getState() {
+ return (TBTState) getObject(TBTState.class, KEY_STATE);
+ }
+ /**
+ * <p>Called to set the current state of TBT client</p>
+ * @param state current state of TBT client
+ */
+ public void setState( TBTState state ) {
+ setParameters(KEY_STATE, state);
+ }
+} // end-class
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTouchEvent.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTouchEvent.java
new file mode 100644
index 000000000..7504c9197
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnTouchEvent.java
@@ -0,0 +1,97 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.TouchType;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ *
+ * Notifies about touch events on the screen's prescribed area.
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>TouchType</td>
+ * <td>The type of touch event.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>event</td>
+ * <td>TouchEvent</td>
+ * <td>List of all individual touches involved in this event.</td>
+ * <td>Y</td>
+ * <td>minsize:1; maxsize:10</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ *
+ * <p><b>Note:</b></p>
+ * <p>SDL needs to be informed about every User`s touching the touch screen.</p>
+ *
+ */
+public class OnTouchEvent extends RPCNotification {
+ public static final String KEY_EVENT = "event";
+ public static final String KEY_TYPE = "type";
+ /**
+ * Constructs a new OnTouchEvent object
+ */
+
+ public OnTouchEvent() {
+ super(FunctionID.ON_TOUCH_EVENT.toString());
+ }
+ /**
+ * <p>
+ * Constructs a new OnTouchEvent object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public OnTouchEvent(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new OnTouchEvent object
+ */
+ public OnTouchEvent(@NonNull TouchType type, @NonNull List<TouchEvent> event) {
+ this();
+ setType(type);
+ setEvent(event);
+ }
+
+ public void setType(@NonNull TouchType type) {
+ setParameters(KEY_TYPE, type);
+ }
+
+ public TouchType getType() {
+ return (TouchType) getObject(TouchType.class, KEY_TYPE);
+ }
+
+ public void setEvent(@NonNull List<TouchEvent> event) {
+ setParameters(KEY_EVENT, event);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<TouchEvent> getEvent() {
+ return (List<TouchEvent>) getObject(TouchEvent.class, KEY_EVENT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java
new file mode 100644
index 000000000..7b97f9286
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java
@@ -0,0 +1,554 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+import com.smartdevicelink.proxy.rpc.enums.ComponentVolumeStatus;
+import com.smartdevicelink.proxy.rpc.enums.ElectronicParkBrakeStatus;
+import com.smartdevicelink.proxy.rpc.enums.PRNDL;
+import com.smartdevicelink.proxy.rpc.enums.TurnSignal;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus;
+import com.smartdevicelink.proxy.rpc.enums.WiperStatus;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ *Individual requested DID result and data.
+ *
+ *
+ * <p>Callback for the periodic and non periodic vehicle data read function.</p>
+ *
+ * <p> <b>Note:</b></p>
+ *
+ * Initially SDL sends SubscribeVehicleData for getting the periodic updates from HMI whenever each of subscribed data types changes. OnVehicleData is expected to bring such updated values to SDL
+ *
+ *
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>Gps</td>
+ * <td>Boolean</td>
+ * <td>GPS data. See {@linkplain GPSdata} for details</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>Speed</td>
+ * <td>Float</td>
+ * <td>The vehicle speed in kilometers per hour</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>rpm</td>
+ * <td>Integer</td>
+ * <td>The number of revolutions per minute of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel</td>
+ * <td>Float</td>
+ * <td>The fuel level in the tank (percentage)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel_State</td>
+ * <td>ComponentVolumeStatus</td>
+ * <td>The fuel level state (Ok/Low)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>instantFuelConsumption</td>
+ * <td>Float</td>
+ * <td>The instantaneous fuel consumption in microlitres</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>externalTemperature</td>
+ * <td>Float</td>
+ * <td>The external temperature in degrees celsius.</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>vin</td>
+ * <td>String</td>
+ * <td>Vehicle identification number.</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>prndl</td>
+ * <td>PRNDL</td>
+ * <td>Currently selected gear.</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>tirePressure</td>
+ * <td>TireStatus</td>
+ * <td>Tire pressure status</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>odometer</td>
+ * <td>Integer</td>
+ * <td>Odometer in km</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>beltStatus</td>
+ * <td>BeltStatus</td>
+ * <td>The status of the seat belts.</td>
+ * <td>N</td>
+ * <td>Subscribable </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>bodyInformation</td>
+ * <td>BodyInformation</td>
+ * <td>The body information including power modes.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>deviceStatus</td>
+ * <td>DeviceStatus</td>
+ * <td>The connected mobile device status including signal and battery strength.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>eCallInfo</td>
+ * <td>ECallInfo</td>
+ * <td>Emergency Call notification and confirmation data.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>airbagStatus</td>
+ * <td>AirBagStatus</td>
+ * <td>The status of the air bags.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>emergencyEvent</td>
+ * <td>EmergencyEvernt</td>
+ * <td>Information related to an emergency event (and if it occurred).</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>clusterModeStatus</td>
+ * <td>ClusterModeStatus</td>
+ * <td>The status modes of the instrument panel cluster.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>myKey</td>
+ * <td>MyKey</td>
+ * <td>Information related to the MyKey feature.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>driverBraking</td>
+ * <td>vehicleDataEventStatus</td>
+ * <td>The status of the brake pedal.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>wiperStatus</td>
+ * <td>WiperStatus</td>
+ * <td>The status of the wipers</td>
+ * <td>N</td>
+ * <td> </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>headLampStatus</td>
+ * <td>headLampStatus</td>
+ * <td>Status of the head lamps</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>engineTorque</td>
+ * <td>Float</td>
+ * <td>Torque value for engine (in Nm) on non-diesel variants</td>
+ * <td>N</td>
+ * <td>minvalue:-1000; maxvalue:2000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>engineOilLife</td>
+ * <td>Float</td>
+ * <td>The estimated percentage of remaining oil life of the engine</td>
+ * <td>N</td>
+ * <td>minvalue:0; maxvalue:100</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>accPedalPosition</td>
+ * <td>Float</td>
+ * <td>Accelerator pedal position (percentage depressed)</td>
+ * <td>N</td>
+ * <td>minvalue: 0; maxvalue:100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>steeringWheelAngle</td>
+ * <td>Float</td>
+ * <td>Current angle of the steering wheel (in deg)</td>
+ * <td>N</td>
+ * <td> minvalue: -2000; maxvalue:2000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>cloudAppVehicleID</td>
+ * <td>String</td>
+ * <td>ID for the vehicle when connecting to cloud applications</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.1 </td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ * @see SubscribeVehicleData
+ * @see UnsubscribeVehicleData
+ *
+ *
+ */
+public class OnVehicleData extends RPCNotification {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_VIN = "vin";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+
+ public OnVehicleData() {
+ super(FunctionID.ON_VEHICLE_DATA.toString());
+ }
+ public OnVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ public void setGps(GPSData gps) {
+ setParameters(KEY_GPS, gps);
+ }
+ @SuppressWarnings("unchecked")
+ public GPSData getGps() {
+ return (GPSData) getObject(GPSData.class, KEY_GPS);
+ }
+ public void setSpeed(Double speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+ public Double getSpeed() {
+ Object object = getParameters(KEY_SPEED);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setRpm(Integer rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+ public Integer getRpm() {
+ return getInteger(KEY_RPM);
+ }
+ public void setFuelLevel(Double fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+ public Double getFuelLevel() {
+ Object object = getParameters(KEY_FUEL_LEVEL);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ @Deprecated
+ public void setFuelLevel_State(ComponentVolumeStatus fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+ @Deprecated
+ public ComponentVolumeStatus getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+ public void setFuelLevelState(ComponentVolumeStatus fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+ public ComponentVolumeStatus getFuelLevelState() {
+ return (ComponentVolumeStatus) getObject(ComponentVolumeStatus.class, KEY_FUEL_LEVEL_STATE);
+ }
+ public void setInstantFuelConsumption(Double instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+ public Double getInstantFuelConsumption() {
+ Object object = getParameters(KEY_INSTANT_FUEL_CONSUMPTION);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setExternalTemperature(Double externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+ public Double getExternalTemperature() {
+ Object object = getParameters(KEY_EXTERNAL_TEMPERATURE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setVin(String vin) {
+ setParameters(KEY_VIN, vin);
+ }
+ public String getVin() {
+ return getString(KEY_VIN);
+ }
+ public void setPrndl(PRNDL prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+ public PRNDL getPrndl() {
+ return (PRNDL) getObject(PRNDL.class, KEY_PRNDL);
+ }
+ public void setTirePressure(TireStatus tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+ @SuppressWarnings("unchecked")
+ public TireStatus getTirePressure() {
+ return (TireStatus) getObject(TireStatus.class, KEY_TIRE_PRESSURE);
+ }
+ public void setOdometer(Integer odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+ public Integer getOdometer() {
+ return getInteger(KEY_ODOMETER);
+ }
+ public void setBeltStatus(BeltStatus beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public BeltStatus getBeltStatus() {
+ return (BeltStatus) getObject(BeltStatus.class, KEY_BELT_STATUS);
+ }
+ public void setBodyInformation(BodyInformation bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+ @SuppressWarnings("unchecked")
+ public BodyInformation getBodyInformation() {
+ return (BodyInformation) getObject(BodyInformation.class, KEY_BODY_INFORMATION);
+ }
+ public void setDeviceStatus(DeviceStatus deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public DeviceStatus getDeviceStatus() {
+ return (DeviceStatus) getObject(DeviceStatus.class, KEY_DEVICE_STATUS);
+ }
+ public void setDriverBraking(VehicleDataEventStatus driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+ public VehicleDataEventStatus getDriverBraking() {
+ return (VehicleDataEventStatus) getObject(VehicleDataEventStatus.class, KEY_DRIVER_BRAKING);
+ }
+ public void setWiperStatus(WiperStatus wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+ public WiperStatus getWiperStatus() {
+ return (WiperStatus) getObject(WiperStatus.class, KEY_WIPER_STATUS);
+ }
+ public void setHeadLampStatus(HeadLampStatus headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public HeadLampStatus getHeadLampStatus() {
+ return (HeadLampStatus) getObject(HeadLampStatus.class, KEY_HEAD_LAMP_STATUS);
+ }
+ public void setEngineTorque(Double engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+ public Double getEngineTorque() {
+ Object object = getParameters(KEY_ENGINE_TORQUE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setEngineOilLife(Float engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+ public Float getEngineOilLife() {
+ Object object = getParameters(KEY_ENGINE_OIL_LIFE);
+ return SdlDataTypeConverter.objectToFloat(object);
+ }
+ public void setAccPedalPosition(Double accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+ public Double getAccPedalPosition() {
+ Object object = getParameters(KEY_ACC_PEDAL_POSITION);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setSteeringWheelAngle(Double steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+ public Double getSteeringWheelAngle() {
+ Object object = getParameters(KEY_STEERING_WHEEL_ANGLE);
+ return SdlDataTypeConverter.objectToDouble(object);
+ }
+ public void setECallInfo(ECallInfo eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ @SuppressWarnings("unchecked")
+ public ECallInfo getECallInfo() {
+ return (ECallInfo) getObject(ECallInfo.class, KEY_E_CALL_INFO);
+ }
+ public void setAirbagStatus(AirbagStatus airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public AirbagStatus getAirbagStatus() {
+ return (AirbagStatus) getObject(AirbagStatus.class, KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(EmergencyEvent emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ @SuppressWarnings("unchecked")
+ public EmergencyEvent getEmergencyEvent() {
+ return (EmergencyEvent) getObject(EmergencyEvent.class, KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(ClusterModeStatus clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public ClusterModeStatus getClusterModeStatus() {
+ return (ClusterModeStatus) getObject(ClusterModeStatus.class, KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(MyKey myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ @SuppressWarnings("unchecked")
+ public MyKey getMyKey() {
+ return (MyKey) getObject(MyKey.class, KEY_MY_KEY);
+ }
+
+ /**
+ * Sets Fuel Range List. Fuel Range - The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ * @param fuelRange
+ */
+ public void setFuelRange(List<FuelRange> fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets Fuel Range List.
+ * @return List<FuelRange>
+ * Fuel Range - The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ */
+ @SuppressWarnings("unchecked")
+ public List<FuelRange> getFuelRange() {
+ return (List<FuelRange>) getObject(FuelRange.class, KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets turnSignal
+ * @param turnSignal
+ */
+ public void setTurnSignal(TurnSignal turnSignal) {
+ setParameters(KEY_TURN_SIGNAL, turnSignal);
+ }
+
+ /**
+ * Gets turnSignal
+ * @return TurnSignal
+ */
+ @SuppressWarnings("unchecked")
+ public TurnSignal getTurnSignal() {
+ return (TurnSignal) getObject(TurnSignal.class, KEY_TURN_SIGNAL);
+ }
+
+ /**
+ * Sets electronicParkBrakeStatus
+ * @param electronicParkBrakeStatus
+ */
+ public void setElectronicParkBrakeStatus(ElectronicParkBrakeStatus electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets electronicParkBrakeStatus
+ * @return ElectronicParkBrakeStatus
+ */
+ public ElectronicParkBrakeStatus getElectronicParkBrakeStatus(){
+ return (ElectronicParkBrakeStatus) getObject(ElectronicParkBrakeStatus.class, KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets a string value for the cloud app vehicle ID
+ * @param cloudAppVehicleID a string value
+ */
+ public void setCloudAppVehicleID(String cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a String value of the returned cloud app vehicle ID
+ * @return a String value.
+ */
+ public String getCloudAppVehicleID(){
+ return getString(KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnWayPointChange.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnWayPointChange.java
new file mode 100644
index 000000000..cb9130e1a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnWayPointChange.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class OnWayPointChange extends RPCNotification {
+ public static final String KEY_WAY_POINTS = "wayPoints";
+
+ public OnWayPointChange() {
+ super(FunctionID.ON_WAY_POINT_CHANGE.toString());
+ }
+
+ public OnWayPointChange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public OnWayPointChange(@NonNull List<LocationDetails> wayPoints) {
+ this();
+ setWayPoints(wayPoints);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<LocationDetails> getWayPoints() {
+ return (List<LocationDetails>) getObject(LocationDetails.class, KEY_WAY_POINTS);
+ }
+
+ public void setWayPoints(@NonNull List<LocationDetails> wayPoints) {
+ setParameters(KEY_WAY_POINTS, wayPoints);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ParameterPermissions.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ParameterPermissions.java
new file mode 100644
index 000000000..5fbb00b74
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ParameterPermissions.java
@@ -0,0 +1,108 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Defining sets of parameters, which are permitted or prohibited for a given RPC.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>allowed</td>
+ * <td>String</td>
+ * <td>A set of all parameters that are permitted for this given RPC.
+ * <ul>
+ * <li>Min size: 0</li>
+ * <li>Max size: 100</li>
+ * <li>Max length: 100</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>userDisallowed</td>
+ * <td>String</td>
+ * <td>A set of all parameters that are prohibated for this given RPC.
+ * <ul>
+ * <li>Min size: 0</li>
+ * <li>Max size: 100</li>
+ * <li>Max length: 100</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class ParameterPermissions extends RPCStruct {
+ public static final String KEY_ALLOWED = "allowed";
+ public static final String KEY_USER_DISALLOWED = "userDisallowed";
+
+ /**
+ * Constructs a newly allocated ParameterPermissions object
+ */
+ public ParameterPermissions() { }
+
+ /**
+ * Constructs a newly allocated ParameterPermissions object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public ParameterPermissions(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated ParameterPermissions object
+ * @param allowed parameter that is permitted for this given RPC
+ * @param userDisallowed parameter that is prohibited for this given RPC
+ */
+ public ParameterPermissions(@NonNull List<String> allowed, @NonNull List<String> userDisallowed) {
+ this();
+ setAllowed(allowed);
+ setUserDisallowed(userDisallowed);
+ }
+
+ /**
+ * get a set of all parameters that are permitted for this given RPC.
+ * @return a set of all parameters that are permitted for this given RPC.
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getAllowed() {
+ return (List<String>) getObject(String.class, KEY_ALLOWED);
+ }
+
+ /**
+ * set a set of all parameters that are permitted for this given RPC.
+ * @param allowed parameter that is permitted for this given RPC
+ */
+ public void setAllowed(@NonNull List<String> allowed) {
+ setValue(KEY_ALLOWED, allowed);
+ }
+
+ /**
+ * get a set of all parameters that are prohibited for this given RPC.
+ * @return a set of all parameters that are prohibited for this given RPC
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getUserDisallowed() {
+ return (List<String>) getObject(String.class, KEY_USER_DISALLOWED);
+ }
+
+ /**
+ * set a set of all parameters that are prohibited for this given RPC.
+ * @param userDisallowed paramter that is prohibited for this given RPC
+ */
+ public void setUserDisallowed(@NonNull List<String> userDisallowed) {
+ setValue(KEY_USER_DISALLOWED, userDisallowed);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteraction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteraction.java
new file mode 100644
index 000000000..37dd36684
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteraction.java
@@ -0,0 +1,101 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class PerformAppServiceInteraction extends RPCRequest {
+
+ public static final String KEY_SERVICE_URI = "serviceUri";
+ public static final String KEY_SERVICE_ID = "serviceID";
+ public static final String KEY_ORIGIN_APP = "originApp";
+ public static final String KEY_REQUEST_SERVICE_ACTIVE = "requestServiceActive";
+
+ // Constructors
+
+ public PerformAppServiceInteraction() {
+ super(FunctionID.PERFORM_APP_SERVICES_INTERACTION.toString());
+ }
+
+ public PerformAppServiceInteraction(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public PerformAppServiceInteraction(@NonNull String serviceUri, @NonNull String appServiceId, @NonNull String originApp) {
+ this();
+ setServiceUri(serviceUri);
+ setAppServiceId(appServiceId);
+ setOriginApp(originApp);
+ }
+
+ /**
+ * Fully qualified URI based on the URI prefix and URI scheme the app service provided. SDL
+ * makes no guarantee that this URI is correct.
+ * @param serviceUri -
+ */
+ public void setServiceUri(@NonNull String serviceUri){
+ setParameters(KEY_SERVICE_URI, serviceUri);
+ }
+
+ /**
+ * Fully qualified URI based on the URI prefix and URI scheme the app service provided. SDL
+ * makes no guarantee that this URI is correct.
+ * @return serviceUri
+ */
+ public String getServiceUri(){
+ return getString(KEY_SERVICE_URI);
+ }
+
+ /**
+ * The service ID that the app consumer wishes to send this URI.
+ * @param appServiceId -
+ */
+ public void setAppServiceId(@NonNull String appServiceId){
+ setParameters(KEY_SERVICE_ID, appServiceId);
+ }
+
+ /**
+ * The service ID that the app consumer wishes to send this URI.
+ * @return appServiceId
+ */
+ public String getAppServiceId(){
+ return getString(KEY_SERVICE_ID);
+ }
+
+ /**
+ * This string is the appID of the app requesting the app service provider take the specific action.
+ * @param originApp -
+ */
+ public void setOriginApp(@NonNull String originApp){
+ setParameters(KEY_ORIGIN_APP, originApp);
+ }
+
+ /**
+ * This string is the appID of the app requesting the app service provider take the specific action.
+ * @return originApp
+ */
+ public String getOriginApp(){
+ return getString(KEY_ORIGIN_APP);
+ }
+
+ /**
+ * This flag signals the requesting consumer would like this service to become the active primary
+ * service of the destination's type.
+ * @param requestServiceActive -
+ */
+ public void setRequestServiceActive(Boolean requestServiceActive){
+ setParameters(KEY_REQUEST_SERVICE_ACTIVE, requestServiceActive);
+ }
+
+ /**
+ * This string is the appID of the app requesting the app service provider take the specific action.
+ * @return requestServiceActive
+ */
+ public Boolean getRequestServiceActive(){
+ return getBoolean(KEY_REQUEST_SERVICE_ACTIVE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteractionResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteractionResponse.java
new file mode 100644
index 000000000..718c6526b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAppServiceInteractionResponse.java
@@ -0,0 +1,56 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class PerformAppServiceInteractionResponse extends RPCResponse {
+
+ public static final String KEY_SERVICE_SPECIFIC_RESULT = "serviceSpecificResult";
+
+ /**
+ * Constructs a new PerformAppServiceInteractionResponse object
+ */
+ public PerformAppServiceInteractionResponse() {
+ super(FunctionID.PERFORM_APP_SERVICES_INTERACTION.toString());
+ }
+
+ public PerformAppServiceInteractionResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PerformAppServiceInteractionResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public PerformAppServiceInteractionResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ // Setters / getters
+
+ /**
+ * The service can provide specific result strings to the consumer through this param. These
+ * results should be described in the URI schema set in the Service Manifest
+ * @param serviceSpecificResult -
+ */
+ public void setServiceSpecificResult(String serviceSpecificResult){
+ setParameters(KEY_SERVICE_SPECIFIC_RESULT, serviceSpecificResult);
+ }
+
+ /**
+ * The service can provide specific result strings to the consumer through this param. These
+ * results should be described in the URI schema set in the Service Manifest
+ * @return serviceSpecificResult
+ */
+ public String getServiceSpecificResult(){
+ return getString(KEY_SERVICE_SPECIFIC_RESULT);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThru.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThru.java
new file mode 100644
index 000000000..bbd0c32e3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThru.java
@@ -0,0 +1,326 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.AudioType;
+import com.smartdevicelink.proxy.rpc.enums.BitsPerSample;
+import com.smartdevicelink.proxy.rpc.enums.SamplingRate;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * This will open an audio pass thru session. By doing so the app can receive
+ * audio data through the vehicles microphone
+ *
+ * <p>Function Group: AudioPassThru</p>
+ *
+ * <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th> Version</th>
+ * </tr>
+ * <tr>
+ * <td>initialPrompt</td>
+ * <td>TTSChunk[]</td>
+ * <td>SDL will speak this prompt before opening the audio pass thru session. </td>
+ * <td>N</td>
+ * <td>This is an array of text chunks of type TTSChunk. The array must have at least one item If omitted, then no initial prompt is spoken: <p>Array Minsize: 1</p> Array Maxsize: 100</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>audioPassThruDisplayText1</td>
+ * <td>String</td>
+ * <td>First line of text displayed during audio capture.</td>
+ * <td>N</td>
+ * <td>Maxlength = 500</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>samplingRate</td>
+ * <td>SamplingRate</td>
+ * <td>This value shall is allowed to be 8 or 16 or 22 or 44 khz.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>maxDuration</td>
+ * <td>Integer</td>
+ * <td>The maximum duration of audio recording in milliseconds.</td>
+ * <td>Y</td>
+ * <td>Minvalue: 1; Maxvalue: 1000000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>bitsPerSample</td>
+ * <td>BitsPerSample</td>
+ * <td>Specifies the quality the audio is recorded - 8 bit or 16 bit.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>audioType</td>
+ * <td>AudioType</td>
+ * <td>Specifies the type of audio data being requested.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>muteAudio</td>
+ * <td>Boolean</td>
+ * <td>N</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ *
+ *
+ *
+ *
+ * </table>
+ * @since SmartDeviceLink 2.0
+ * @see EndAudioPassThru
+ */
+public class PerformAudioPassThru extends RPCRequest {
+ public static final String KEY_MAX_DURATION = "maxDuration";
+ public static final String KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_1 = "audioPassThruDisplayText1";
+ public static final String KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_2 = "audioPassThruDisplayText2";
+ public static final String KEY_MUTE_AUDIO = "muteAudio";
+ public static final String KEY_SAMPLING_RATE = "samplingRate";
+ public static final String KEY_AUDIO_TYPE = "audioType";
+ public static final String KEY_INITIAL_PROMPT = "initialPrompt";
+ public static final String KEY_BITS_PER_SAMPLE = "bitsPerSample";
+
+ /**
+ * Constructs a new PerformAudioPassThru object
+ */
+ public PerformAudioPassThru() {
+ super(FunctionID.PERFORM_AUDIO_PASS_THRU.toString());
+ }
+
+ /**
+ * <p>Constructs a new PerformAudioPassThru object indicated by the Hashtable
+ * parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public PerformAudioPassThru(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new PerformAudioPassThru object
+ * @param samplingRate a SamplingRate value representing a 8 or 16 or 22 or 24 khz
+ * @param maxDuration an Integer value representing the maximum duration of audio recording in millisecond <b>Notes: </b>Minvalue:1; Maxvalue:1000000
+ * @param bitsPerSample a BitsPerSample value representing 8 bit or 16 bit
+ * @param audioType an audioType
+ */
+ public PerformAudioPassThru(@NonNull SamplingRate samplingRate, @NonNull Integer maxDuration, @NonNull BitsPerSample bitsPerSample, @NonNull AudioType audioType) {
+ this();
+ setSamplingRate(samplingRate);
+ setMaxDuration(maxDuration);
+ setBitsPerSample(bitsPerSample);
+ setAudioType(audioType);
+ }
+
+ /**
+ * Sets initial prompt which will be spoken before opening the audio pass
+ * thru session by SDL
+ *
+ * @param initialPrompt
+ * a List<TTSChunk> value represents the initial prompt which
+ * will be spoken before opening the audio pass thru session by
+ * SDL
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>This is an array of text chunks of type TTSChunk</li>
+ * <li>The array must have at least one item</li>
+ * <li>If omitted, then no initial prompt is spoken</li>
+ * <li>Array Minsize: 1</li>
+ * <li>Array Maxsize: 100</li>
+ * </ul>
+ */
+ public void setInitialPrompt(List<TTSChunk> initialPrompt) {
+ setParameters(KEY_INITIAL_PROMPT, initialPrompt);
+ }
+
+ /**
+ * Gets a List value representing an initial prompt which will be spoken
+ * before opening the audio pass thru session by SDL
+ *
+ * @return List<TTSChunk> -a List value representing an initial prompt
+ * which will be spoken before opening the audio pass thru session
+ * by SDL
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getInitialPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_INITIAL_PROMPT);
+ }
+
+ /**
+ * Sets a line of text displayed during audio capture
+ *
+ * @param audioPassThruDisplayText1
+ * <p>a String value representing the line of text displayed during
+ * audio capture</p>
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setAudioPassThruDisplayText1(String audioPassThruDisplayText1) {
+ setParameters(KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_1, audioPassThruDisplayText1);
+ }
+
+ /**
+ * Gets a first line of text displayed during audio capture
+ *
+ * @return String -a String value representing a first line of text
+ * displayed during audio capture
+ */
+ public String getAudioPassThruDisplayText1() {
+ return getString(KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_1);
+ }
+
+ /**
+ * Sets a line of text displayed during audio capture
+ *
+ * @param audioPassThruDisplayText2
+ * <p>a String value representing the line of text displayed during
+ * audio capture</p>
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setAudioPassThruDisplayText2(String audioPassThruDisplayText2) {
+ setParameters(KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_2, audioPassThruDisplayText2);
+ }
+
+ /**
+ * Gets a second line of text displayed during audio capture
+ *
+ * @return String -a String value representing a first line of text
+ * displayed during audio capture
+ */
+ public String getAudioPassThruDisplayText2() {
+ return getString(KEY_AUDIO_PASS_THRU_DISPLAY_TEXT_2);
+ }
+
+ /**
+ * Sets a samplingRate
+ *
+ * @param samplingRate
+ * a SamplingRate value representing a 8 or 16 or 22 or 24 khz
+ */
+ public void setSamplingRate(@NonNull SamplingRate samplingRate) {
+ setParameters(KEY_SAMPLING_RATE, samplingRate);
+ }
+
+ /**
+ * Gets a samplingRate
+ *
+ * @return SamplingRate -a SamplingRate value
+ */
+ public SamplingRate getSamplingRate() {
+ return (SamplingRate) getObject(SamplingRate.class, KEY_SAMPLING_RATE);
+ }
+
+ /**
+ * Sets the maximum duration of audio recording in milliseconds
+ *
+ * @param maxDuration
+ * an Integer value representing the maximum duration of audio
+ * recording in millisecond
+ * <p></p>
+ * <b>Notes: </b>Minvalue:1; Maxvalue:1000000
+ */
+ public void setMaxDuration(@NonNull Integer maxDuration) {
+ setParameters(KEY_MAX_DURATION, maxDuration);
+ }
+
+ /**
+ * Gets a max duration of audio recording in milliseconds
+ *
+ * @return int -an int value representing the maximum duration of audio
+ * recording in milliseconds
+ */
+ public Integer getMaxDuration() {
+ return getInteger(KEY_MAX_DURATION);
+ }
+
+ /**
+ * Sets the quality the audio is recorded - 8 bit or 16 bit
+ *
+ * @param audioQuality
+ * a BitsPerSample value representing 8 bit or 16 bit
+ */
+ public void setBitsPerSample(@NonNull BitsPerSample audioQuality) {
+ setParameters(KEY_BITS_PER_SAMPLE, audioQuality);
+ }
+
+ /**
+ * Gets a BitsPerSample value, 8 bit or 16 bit
+ *
+ * @return BitsPerSample -a BitsPerSample value
+ */
+ public BitsPerSample getBitsPerSample() {
+ return (BitsPerSample) getObject(BitsPerSample.class, KEY_BITS_PER_SAMPLE);
+ }
+
+ /**
+ * Sets an audioType
+ *
+ * @param audioType
+ * an audioType
+ */
+ public void setAudioType(@NonNull AudioType audioType) {
+ setParameters(KEY_AUDIO_TYPE, audioType);
+ }
+
+ /**
+ * Gets a type of audio data
+ *
+ * @return AudioType -an AudioType
+ */
+ public AudioType getAudioType() {
+ return (AudioType) getObject(AudioType.class, KEY_AUDIO_TYPE);
+ }
+
+ /**
+ *<p> Gets a Boolean value representing if the current audio source should be
+ * muted during the APT session</p>
+ *
+ *
+ * @return Boolean -a Boolean value representing if the current audio source
+ * should be muted during the APT session
+ */
+ public Boolean getMuteAudio() {
+ return getBoolean(KEY_MUTE_AUDIO);
+ }
+
+ /**
+ * <p>Sets a muteAudio value representing if the current audio source should be
+ * muted during the APT session
+ * If not, the audio source will play without interruption. If omitted, the
+ * value is set to true</p>
+ *
+ *
+ * @param muteAudio
+ * a Boolean value representing if the current audio source
+ * should be muted during the APT session
+ */
+ public void setMuteAudio(Boolean muteAudio) {
+ setParameters(KEY_MUTE_AUDIO, muteAudio);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThruResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThruResponse.java
new file mode 100644
index 000000000..f68a412f0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformAudioPassThruResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Perform Audio Pass Thru Response is sent, when PerformAudioPassThru has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class PerformAudioPassThruResponse extends RPCResponse {
+
+ /**
+ * Constructs a new PerformAudioPassThruResponse object
+ */
+ public PerformAudioPassThruResponse() {
+ super(FunctionID.PERFORM_AUDIO_PASS_THRU.toString());
+ }
+
+ /**
+ * <p>Constructs a new PerformAudioPassThruResponse object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public PerformAudioPassThruResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new PerformAudioPassThruResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public PerformAudioPassThruResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteraction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteraction.java
new file mode 100644
index 000000000..9067edb98
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteraction.java
@@ -0,0 +1,367 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.InteractionMode;
+import com.smartdevicelink.proxy.rpc.enums.LayoutMode;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Performs an application-initiated interaction in which the user can select a
+ * {@linkplain Choice} from among the specified Choice Sets. For instance, an
+ * application may use a PerformInteraction to ask a user to say the name of a
+ * song to play. The user's response is only valid if it appears in the
+ * specified Choice Sets and is recognized by SDL
+ * <p></p>
+ * <p>Function Group: Base</p>
+ *
+ * <p><b>HMILevel needs to be FULL</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>initialText</td>
+ * <td>String</td>
+ * <td>Displayed when the interaction begins. This text may be overlaid by the "Listening" prompt during the interaction. Text is displayed on first line of multiline display, and is centered. If text does not fit on line, it will be truncated</td>
+ * <td>Y</td>
+ * <td>maxlength:500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>initialPrompt</td>
+ * <td>TTSChunk</td>
+ * <td>An array of one or more TTSChunks that, taken together, specify what is to be spoken to the user at the start of an interaction.</td>
+ * <td>Y</td>
+ * <td>minsize:1; maxsize:100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>interactionMode</td>
+ * <td>InteractionMode</td>
+ * <td>Indicates how user selects interaction choice. User can choose either by voice (VR_ONLY), by visual selection from the menu (MANUAL_ONLY), or by either mode (BOTH). </td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>interactionChoiceSetIDList</td>
+ * <td>Integer</td>
+ * <td>Array of one or more Choice Set IDs. User can select any choice from any of the specified Choice Sets.</td>
+ * <td>Y</td>
+ * <td>minsize:0; maxsize:100; minvalue:0; maxvalue:2000000000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>helpPrompt</td>
+ * <td>TTSChunk</td>
+ * <td>An array of TTSChunks which, taken together, specify the help phrase to be spoken when the user says "help" during the VR session. If this parameter is omitted, the help prompt will be constructed by SDL from the first vrCommand of each choice of all the Choice Sets specified in the interactionChoiceSetIDList parameter. </td>
+ * <td>N</td>
+ * <td>minsize:1; maxsize:100; The helpPrompt specified in SetGlobalProperties is not used by PerformInteraction.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>timeoutPrompt</td>
+ * <td>TTSChunk</td>
+ * <td>An array of TTSChunks which, taken together, specify the phrase to be spoken when the listen times out during the VR session. If this parameter is omitted, the timeout prompt will be the same as the help prompt (see helpPrompt parameter). </td>
+ * <td>N</td>
+ * <td>The timeoutPrompt specified in SetGlobalProperties is not used by PerformInteraction. minsize:1;maxsize:100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>timeout</td>
+ * <td>Integer</td>
+ * <td>The amount of time, in milliseconds, SDL will wait for the user to make a choice (VR or Menu). If this time elapses without the user making a choice, the timeoutPrompt will be spoken. After this timeout value has been reached, the interaction will stop and a subsequent interaction will take place after SDL speaks the timeout prompt. If that times out as well, the interaction will end completely. If omitted, the default is 10000ms.</td>
+ * <td>N</td>
+ * <td>minvalue:5000; maxvalue:100000; defvalue:10000</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrHelp</td>
+ * <td>VrHelpItem</td>
+ * <td>Ability to send suggested VR Help Items to display on-screen during Perform Interaction If omitted on supported displays, the default SDL generated list of suggested choices will be displayed.</td>
+ * <td>N</td>
+ * <td>Min = 1;Max = 100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>interactionLayout</td>
+ * <td>LayoutMode</td>
+ * <td>See {@linkplain LayoutMode}</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0</td>
+ * </tr>
+ * </table>
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ * @see CreateInteractionChoiceSet
+ * @see DeleteInteractionChoiceSet
+ */
+public class PerformInteraction extends RPCRequest {
+ public static final String KEY_INITIAL_TEXT = "initialText";
+ public static final String KEY_INTERACTION_MODE = "interactionMode";
+ public static final String KEY_INTERACTION_CHOICE_SET_ID_LIST = "interactionChoiceSetIDList";
+ public static final String KEY_INTERACTION_LAYOUT = "interactionLayout";
+ public static final String KEY_INITIAL_PROMPT = "initialPrompt";
+ public static final String KEY_HELP_PROMPT = "helpPrompt";
+ public static final String KEY_TIMEOUT_PROMPT = "timeoutPrompt";
+ public static final String KEY_TIMEOUT = "timeout";
+ public static final String KEY_VR_HELP = "vrHelp";
+ /**
+ * Constructs a new PerformInteraction object
+ */
+ public PerformInteraction() {
+ super(FunctionID.PERFORM_INTERACTION.toString());
+ }
+ /**
+ * Constructs a new PerformInteraction object indicated by the Hashtable
+ * parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public PerformInteraction(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PerformInteraction object
+ * @param initialText a String value that Displayed when the interaction begins
+ * @param interactionMode indicate how user selects interaction choice (VR_ONLY, MANUAL_ONLY or BOTH)
+ * @param interactionChoiceSetIDList a List<Integer> representing an Array of one or more Choice Set IDs. User can select any choice from any of the specified
+ * Choice Sets <b>Notes: </b>Min Value: 0; Max Vlaue: 2000000000
+ */
+ public PerformInteraction(@NonNull String initialText, @NonNull InteractionMode interactionMode, @NonNull List<Integer> interactionChoiceSetIDList) {
+ this();
+ setInitialText(initialText);
+ setInteractionMode(interactionMode);
+ setInteractionChoiceSetIDList(interactionChoiceSetIDList);
+ }
+ /**
+ * Gets the Text that Displayed when the interaction begins. This text may
+ * be overlaid by the "Listening" prompt during the interaction. Text is
+ * displayed on first line of multiline display, and is centered. If text
+ * does not fit on line, it will be truncated
+ *
+ * @return String -the text displayed when the interaction begins
+ */
+ public String getInitialText() {
+ return getString(KEY_INITIAL_TEXT);
+ }
+ /**
+ * Sets the Text that Displayed when the interaction begins. This text may
+ * be overlaid by the "Listening" prompt during the interaction. Text is
+ * displayed on first line of multiline display, and is centered. If text
+ * does not fit on line, it will be truncated
+ *
+ * @param initialText
+ * a String value that Displayed when the interaction begins
+ */
+ public void setInitialText(@NonNull String initialText) {
+ setParameters(KEY_INITIAL_TEXT, initialText);
+ }
+ /**
+ * Gets an An array of one or more TTSChunks that, taken together, specify
+ * what is to be spoken to the user at the start of an interaction
+ *
+ * @return List<TTSChunk> -a List<TTSChunk> value, specify what is to be
+ * spoken to the user at the start of an interaction
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getInitialPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_INITIAL_PROMPT);
+ }
+ /**
+ * Sets An array of one or more TTSChunks that, taken together, specify what
+ * is to be spoken to the user at the start of an interaction
+ *
+ * @param initialPrompt
+ * a List<TTSChunk> value, specify what is to be spoken to the
+ * user at the start of an interaction
+ */
+ public void setInitialPrompt(List<TTSChunk> initialPrompt) {
+ setParameters(KEY_INITIAL_PROMPT, initialPrompt);
+ }
+ /**
+ * Gets the Indicates mode that indicate how user selects interaction
+ * choice. User can choose either by voice (VR_ONLY), by visual selection
+ * from the menu (MANUAL_ONLY), or by either mode (BOTH)
+ *
+ * @return InteractionMode -indicate how user selects interaction choice
+ * (VR_ONLY, MANUAL_ONLY or BOTH)
+ */
+ public InteractionMode getInteractionMode() {
+ return (InteractionMode) getObject(InteractionMode.class, KEY_INTERACTION_MODE);
+ }
+ /**
+ * Sets the Indicates mode that indicate how user selects interaction
+ * choice. User can choose either by voice (VR_ONLY), by visual selection
+ * from the menu (MANUAL_ONLY), or by either mode (BOTH)
+ *
+ * @param interactionMode
+ * indicate how user selects interaction choice (VR_ONLY,
+ * MANUAL_ONLY or BOTH)
+ */
+ public void setInteractionMode(@NonNull InteractionMode interactionMode) {
+ setParameters(KEY_INTERACTION_MODE, interactionMode);
+ }
+ /**
+ * Gets a List<Integer> value representing an Array of one or more Choice
+ * Set IDs
+ *
+ * @return List<Integer> -a List<Integer> value representing an Array of
+ * one or more Choice Set IDs. User can select any choice from any
+ * of the specified Choice Sets
+ */
+ @SuppressWarnings("unchecked")
+ public List<Integer> getInteractionChoiceSetIDList() {
+ return (List<Integer>) getObject(Integer.class, KEY_INTERACTION_CHOICE_SET_ID_LIST);
+ }
+ /**
+ * Sets a List<Integer> representing an Array of one or more Choice Set
+ * IDs. User can select any choice from any of the specified Choice Sets
+ *
+ * @param interactionChoiceSetIDList
+ * -a List<Integer> representing an Array of one or more Choice
+ * Set IDs. User can select any choice from any of the specified
+ * Choice Sets
+ * <p></p>
+ * <b>Notes: </b>Min Value: 0; Max Vlaue: 2000000000
+ */
+ public void setInteractionChoiceSetIDList(@NonNull List<Integer> interactionChoiceSetIDList) {
+ setParameters(KEY_INTERACTION_CHOICE_SET_ID_LIST, interactionChoiceSetIDList);
+ }
+ /**
+ * Gets a List<TTSChunk> which taken together, specify the help phrase to
+ * be spoken when the user says "help" during the VR session
+ *
+ * @return List<TTSChunk> -a List<TTSChunk> which taken together,
+ * specify the help phrase to be spoken when the user says "help"
+ * during the VR session
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getHelpPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_HELP_PROMPT);
+ }
+ /**
+ * Sets An array of TTSChunks which, taken together, specify the help phrase
+ * to be spoken when the user says "help" during the VR session
+ * <p></p>
+ * If this parameter is omitted, the help prompt will be constructed by SDL
+ * from the first vrCommand of each choice of all the Choice Sets specified
+ * in the interactionChoiceSetIDList parameter
+ * <P></p>
+ * <b>Notes: </b>The helpPrompt specified in
+ * {@linkplain SetGlobalProperties} is not used by PerformInteraction
+ *
+ * @param helpPrompt
+ * a List<TTSChunk> which taken together, specify the help
+ * phrase to be spoken when the user says "help" during the VR
+ * session
+ */
+ public void setHelpPrompt(List<TTSChunk> helpPrompt) {
+ setParameters(KEY_HELP_PROMPT, helpPrompt);
+ }
+ /**
+ * Gets An array of TTSChunks which, taken together, specify the phrase to
+ * be spoken when the listen times out during the VR session
+ *
+ * @return List<TTSChunk> -a List<TTSChunk> specify the phrase to be
+ * spoken when the listen times out during the VR session
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTimeoutPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TIMEOUT_PROMPT);
+ }
+ /**
+ * Sets An array of TTSChunks which, taken together, specify the phrase to
+ * be spoken when the listen times out during the VR session
+ * <p></p>
+ * <b>Notes: </b>The timeoutPrompt specified in
+ * {@linkplain SetGlobalProperties} is not used by PerformInteraction
+ *
+ * @param timeoutPrompt
+ * a List<TTSChunk> specify the phrase to be spoken when the
+ * listen times out during the VR session
+ */
+ public void setTimeoutPrompt(List<TTSChunk> timeoutPrompt) {
+ setParameters(KEY_TIMEOUT_PROMPT, timeoutPrompt);
+ }
+ /**
+ * Gets a Integer value representing the amount of time, in milliseconds,
+ * SDL will wait for the user to make a choice (VR or Menu)
+ *
+ * @return Integer -a Integer representing the amount of time, in
+ * milliseconds, SDL will wait for the user to make a choice (VR or
+ * Menu)
+ */
+ public Integer getTimeout() {
+ return getInteger(KEY_TIMEOUT);
+ }
+ /**
+ * Sets the amount of time, in milliseconds, SDL will wait for the user to
+ * make a choice (VR or Menu). If this time elapses without the user making
+ * a choice, the timeoutPrompt will be spoken. After this timeout value has
+ * been reached, the interaction will stop and a subsequent interaction will
+ * take place after SDL speaks the timeout prompt. If that times out as
+ * well, the interaction will end completely. If omitted, the default is
+ * 10000ms
+ *
+ * @param timeout
+ * an Integer value representing the amount of time, in
+ * milliseconds, SDL will wait for the user to make a choice (VR
+ * or Menu)
+ * <p></p>
+ * <b>Notes: </b>Min Value: 5000; Max Value: 100000
+ */
+ public void setTimeout(Integer timeout) {
+ setParameters(KEY_TIMEOUT, timeout);
+ }
+
+ /**
+ * Gets a Voice recognition Help, which is a suggested VR Help Items to
+ * display on-screen during Perform Interaction
+ *
+ * @return List<VrHelpItem> -a List value representing a suggested VR
+ * Help Items to display on-screen during Perform Interaction
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<VrHelpItem> getVrHelp() {
+ return (List<VrHelpItem>) getObject(VrHelpItem.class, KEY_VR_HELP);
+ }
+
+ /**
+ *
+ * @param vrHelp
+ * a List representing a suggested VR Help Items to display
+ * on-screen during Perform Interaction
+ * If omitted on supported displays, the default SDL generated
+ * list of suggested choices will be displayed
+ * <p></p>
+ * <b>Notes: </b>Min=1; Max=100
+ * @since SmartDeviceLink 2.0
+ */
+ public void setVrHelp(List<VrHelpItem> vrHelp) {
+ setParameters(KEY_VR_HELP, vrHelp);
+ }
+
+ public LayoutMode getInteractionLayout() {
+ return (LayoutMode) getObject(LayoutMode.class, KEY_INTERACTION_LAYOUT);
+ }
+
+ public void setInteractionLayout( LayoutMode interactionLayout ) {
+ setParameters(KEY_INTERACTION_LAYOUT, interactionLayout);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteractionResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteractionResponse.java
new file mode 100644
index 000000000..5bd4afe8c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PerformInteractionResponse.java
@@ -0,0 +1,86 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.proxy.rpc.enums.TriggerSource;
+
+import java.util.Hashtable;
+
+/**
+ * PerformInteraction Response is sent, when PerformInteraction has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class PerformInteractionResponse extends RPCResponse {
+ public static final String KEY_MANUAL_TEXT_ENTRY = "manualTextEntry";
+ public static final String KEY_TRIGGER_SOURCE = "triggerSource";
+ public static final String KEY_CHOICE_ID = "choiceID";
+
+ /**
+ * Constructs a new PerformInteractionResponse object
+ */
+ public PerformInteractionResponse() {
+ super(FunctionID.PERFORM_INTERACTION.toString());
+ }
+
+ /**
+ * Constructs a new PerformInteractionResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public PerformInteractionResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PerformInteractionResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public PerformInteractionResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ /**
+ * Gets the application-scoped identifier that uniquely identifies this choice.
+ * @return choiceID Min: 0 Max: 65535
+ */
+ public Integer getChoiceID() {
+ return getInteger( KEY_CHOICE_ID );
+ }
+ /**
+ * Sets the application-scoped identifier that uniquely identifies this choice.
+ * @param choiceID Min: 0 Max: 65535
+ */
+ public void setChoiceID( Integer choiceID ) {
+ setParameters(KEY_CHOICE_ID, choiceID);
+ }
+ /**
+ * <p>Returns a <I>TriggerSource</I> object which will be shown in the HMI</p>
+ * @return TriggerSource a TriggerSource object
+ */
+ public TriggerSource getTriggerSource() {
+ return (TriggerSource) getObject(TriggerSource.class, KEY_TRIGGER_SOURCE);
+ }
+ /**
+ * <p>Sets TriggerSource
+ * Indicates whether command was selected via VR or via a menu selection (using the OK button).</p>
+ * @param triggerSource a TriggerSource object
+ */
+ public void setTriggerSource( TriggerSource triggerSource ) {
+ setParameters(KEY_TRIGGER_SOURCE, triggerSource);
+ }
+
+ public void setManualTextEntry(String manualTextEntry) {
+ setParameters(KEY_MANUAL_TEXT_ENTRY, manualTextEntry);
+ }
+ public String getManualTextEntry() {
+ return getString(KEY_MANUAL_TEXT_ENTRY);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PermissionItem.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PermissionItem.java
new file mode 100644
index 000000000..24695a872
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PermissionItem.java
@@ -0,0 +1,97 @@
+package com.smartdevicelink.proxy.rpc;
+
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ * Change in permissions for a given set of RPCs
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>rpcName</td>
+ * <td>String</td>
+ * <td>Name of the individual RPC in the policy table.</td>
+ * <td></td>
+ * <td>maxlength:100</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>hmiPermissions</td>
+ * <td>HMIPermissions</td>
+ * <td>Sets of parameters, which are permitted or prohibited for the given RPC.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>parameterPermissions</td>
+ * <td>ParameterPermissions</td>
+ * <td>Sets of parameters, which are permitted or prohibited for the given RPC.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class PermissionItem extends RPCStruct {
+ public static final String KEY_RPC_NAME = "rpcName";
+ public static final String KEY_HMI_PERMISSIONS = "hmiPermissions";
+ public static final String KEY_PARAMETER_PERMISSIONS = "parameterPermissions";
+ /**
+ * Constructs a new PermissionItem object
+ */
+ public PermissionItem(@NonNull String rpcName, @NonNull HMIPermissions hmiPermissions, @NonNull ParameterPermissions parameterPermissions) {
+ this();
+ setRpcName(rpcName);
+ setHMIPermissions(hmiPermissions);
+ setParameterPermissions(parameterPermissions);
+ }
+ /**
+ * Constructs a new PermissionItem object indicated by the Hashtable
+ * parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public PermissionItem(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PermissionItem object
+ */
+ public PermissionItem() { }
+ public String getRpcName() {
+ return getString(KEY_RPC_NAME);
+ }
+ public void setRpcName(@NonNull String rpcName) {
+ setValue(KEY_RPC_NAME, rpcName);
+ }
+ @SuppressWarnings("unchecked")
+ public HMIPermissions getHMIPermissions() {
+ return (HMIPermissions) getObject(HMIPermissions.class, KEY_HMI_PERMISSIONS);
+ }
+ public void setHMIPermissions(@NonNull HMIPermissions hmiPermissions) {
+ setValue(KEY_HMI_PERMISSIONS, hmiPermissions);
+ }
+ @SuppressWarnings("unchecked")
+ public ParameterPermissions getParameterPermissions() {
+ return (ParameterPermissions) getObject(ParameterPermissions.class, KEY_PARAMETER_PERMISSIONS);
+ }
+ public void setParameterPermissions(@NonNull ParameterPermissions parameterPermissions) {
+ setValue(KEY_PARAMETER_PERMISSIONS, parameterPermissions);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PhoneCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PhoneCapability.java
new file mode 100644
index 000000000..c317e0eb9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PhoneCapability.java
@@ -0,0 +1,27 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Extended capabilities of the module's phone feature
+ */
+
+public class PhoneCapability extends RPCStruct {
+ public static final String KEY_DIALNUMBER_ENABLED = "dialNumberEnabled";
+
+ public PhoneCapability(){}
+
+ public PhoneCapability(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public Boolean getDialNumberEnabled(){
+ return getBoolean(KEY_DIALNUMBER_ENABLED);
+ }
+
+ public void setDialNumberEnabled(Boolean dialNumberEnabled){
+ setValue(KEY_DIALNUMBER_ENABLED, dialNumberEnabled);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PresetBankCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PresetBankCapabilities.java
new file mode 100644
index 000000000..79d7c9546
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PresetBankCapabilities.java
@@ -0,0 +1,77 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Contains information about on-screen preset capabilities.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>onScreenPresetsAvailable</td>
+ * <td>Boolean</td>
+ * <td>Defines, if Onscreen custom presets are available.
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class PresetBankCapabilities extends RPCStruct {
+ public static final String KEY_ON_SCREEN_PRESETS_AVAILABLE = "OnScreenPresetsAvailable";
+
+ /**
+ * Constructs a newly allocated PresetBankCapabilities object
+ */
+ public PresetBankCapabilities() { }
+
+ /**
+ * Constructs a newly allocated PresetBankCapabilities object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public PresetBankCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated PresetBankCapabilities object
+ * @param onScreenPresetsAvailable if Onscreen custom presets are available.
+ */
+ public PresetBankCapabilities(@NonNull Boolean onScreenPresetsAvailable) {
+ this();
+ setOnScreenPresetsAvailable(onScreenPresetsAvailable);
+ }
+
+ /**
+ * set if Onscreen custom presets are available.
+ * @param onScreenPresetsAvailable if Onscreen custom presets are available.
+ */
+ public void setOnScreenPresetsAvailable(@NonNull Boolean onScreenPresetsAvailable) {
+ setValue(KEY_ON_SCREEN_PRESETS_AVAILABLE, onScreenPresetsAvailable);
+ }
+
+ /**
+ * Defines, if Onscreen custom presets are available.
+ * @return if Onscreen custom presets are available
+ */
+ public Boolean onScreenPresetsAvailable() {
+ return getBoolean(KEY_ON_SCREEN_PRESETS_AVAILABLE);
+ }
+
+ /**
+ * Defines, if Onscreen custom presets are available.
+ * @return if Onscreen custom presets are available
+ */
+ public Boolean getOnScreenPresetsAvailable() {
+ return getBoolean(KEY_ON_SCREEN_PRESETS_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppService.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppService.java
new file mode 100644
index 000000000..ae11f06c6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppService.java
@@ -0,0 +1,60 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Registers a service offered by this app on the module
+ */
+public class PublishAppService extends RPCRequest {
+
+ public static final String KEY_APP_SERVICE_MANIFEST = "appServiceManifest";
+
+ // Constructors
+ /**
+ * Constructs a new PublishAppService object
+ */
+ public PublishAppService() {
+ super(FunctionID.PUBLISH_APP_SERVICE.toString());
+ }
+
+ /**
+ * Constructs a new PublishAppService object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public PublishAppService(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new PublishAppService object
+ * @param appServiceManifest - The appServiceManifest
+ */
+ public PublishAppService(@NonNull AppServiceManifest appServiceManifest) {
+ this();
+ setServiceManifest(appServiceManifest);
+ }
+
+ // Getters / Setters
+
+ /**
+ * The manifest of the service that wishes to be published.
+ * @param serviceManifest - the App Service Manifest
+ */
+ public void setServiceManifest(@NonNull AppServiceManifest serviceManifest){
+ setParameters(KEY_APP_SERVICE_MANIFEST, serviceManifest);
+ }
+
+ /**
+ * The manifest of the service that wishes to be published.
+ * @return serviceManifest - the App Service Manifest
+ */
+ public AppServiceManifest getServiceManifest(){
+ return (AppServiceManifest) getObject(AppServiceManifest.class,KEY_APP_SERVICE_MANIFEST);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppServiceResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppServiceResponse.java
new file mode 100644
index 000000000..753ad30a0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PublishAppServiceResponse.java
@@ -0,0 +1,54 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class PublishAppServiceResponse extends RPCResponse {
+
+ public static final String KEY_APP_SERVICE_RECORD = "appServiceRecord";
+ /**
+ * Constructs a new PublishAppServiceResponse object
+ */
+ public PublishAppServiceResponse() {
+ super(FunctionID.PUBLISH_APP_SERVICE.toString());
+ }
+
+ public PublishAppServiceResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new PublishAppServiceResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public PublishAppServiceResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ // Custom Getters / Setters
+
+ /**
+ * If the request was successful, this object will be the current status of the service record
+ * for the published service. This will include the Core supplied service ID.
+ * @param appServiceRecord - the App Service Record
+ */
+ public void setServiceRecord(AppServiceRecord appServiceRecord){
+ setParameters(KEY_APP_SERVICE_RECORD, appServiceRecord);
+ }
+
+ /**
+ * If the request was successful, this object will be the current status of the service record
+ * for the published service. This will include the Core supplied service ID.
+ * @return appServiceRecord - the App Service Record
+ */
+ public AppServiceRecord getServiceRecord(){
+ return (AppServiceRecord) getObject(AppServiceRecord.class,KEY_APP_SERVICE_RECORD);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFile.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFile.java
new file mode 100644
index 000000000..2d9010600
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFile.java
@@ -0,0 +1,367 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.FileType;
+import com.smartdevicelink.proxy.rpc.listeners.OnPutFileUpdateListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener;
+
+import java.util.Hashtable;
+import java.util.zip.CRC32;
+
+/**
+ * Used to push a binary data onto the SDL module from a mobile device, such as
+ * icons and album art.
+ *
+ * <p><b> Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>FileName</td>
+ * <td>String</td>
+ * <td>File reference name.</td>
+ * <td>Y</td>
+ * <td>Maxlength=500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>fileType</td>
+ * <td>FileType</td>
+ * <td>Selected file type.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>persistentFile</td>
+ * <td>Boolean</td>
+ * <td>Indicates if the file is meant to persist between sessions / ignition cycles. If set to TRUE,then the system will aim to persist this file through session / cycles. While files with this designation will have priority over others,they are subject to deletion by the system at any time.In the event of automatic deletion by the system, the app will receive a rejection and have to resend the file. If omitted, the value will be set to false.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>systemFile</td>
+ * <td>Boolean</td>
+ * <td>Indicates if the file is meant to be passed thru core to elsewhere on the system. If set to TRUE, then the system will instead pass the data thru as it arrives to a predetermined area outside of core. If omitted, the value will be set to false.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>offset</td>
+ * <td>Float</td>
+ * <td>Optional offset in bytes for resuming partial data chunks</td>
+ * <td>N</td>
+ * <td>Minvalue=0; Maxvalue=100000000000</td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>length</td>
+ * <td>Float</td>
+ * <td>Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded</td>
+ * <td>N</td>
+ * <td>Minvalue=0; Maxvalue=100000000000</td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>crc</td>
+ * <td>Long</td>
+ * <td>Additional CRC32 checksum to protect data integrity up to 512 Mbits .</td>
+ * <td>N</td>
+ * <td>minvalue="0" maxvalue="4294967295"</td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * </table>
+ * <p> <b>Note: </b></p>
+ * When using PutFiles you may want to check for memory
+ *
+ * <p><b>Response</b> </p>
+ * Response is sent, when the file data was copied (success case). Or when an error occurred. Not supported on First generation SDL modules.
+ *
+ * <p><b> Non-default Result Codes:</b></p>
+ * <p> SUCCESS</p>
+ * <p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ *
+ * <p><table border="1" rules="all"></p>
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>spaceAvailable</td>
+ * <td>Integer</td>
+ * <td>Provides the total local space available on SDL for the registered app.</td>
+ * <td></td>
+ * <td>Minvalue=0; Maxvalue=2000000000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * </table>
+ * @since SmartDeviceLink 2.0
+ * @see DeleteFile
+ * @see ListFiles
+ */
+public class PutFile extends RPCRequest {
+ public static final String KEY_PERSISTENT_FILE = "persistentFile";
+ public static final String KEY_SYSTEM_FILE = "systemFile";
+ public static final String KEY_FILE_TYPE = "fileType";
+ public static final String KEY_SDL_FILE_NAME = "syncFileName";
+ public static final String KEY_OFFSET = "offset";
+ public static final String KEY_LENGTH = "length";
+ public static final String KEY_CRC = "crc";
+
+ /**
+ * Constructs a new PutFile object
+ */
+ public PutFile() {
+ super(FunctionID.PUT_FILE.toString());
+ }
+
+ /**
+ * Constructs a new PutFile object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public PutFile(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new PutFile object
+ * @param syncFileName a String value representing a file reference name
+ * <b>Notes: </b>Maxlength=500, however the max file name length may vary based on remote filesystem limitations
+ * @param fileType a FileType value representing a selected file type
+ */
+ public PutFile(@NonNull String syncFileName, @NonNull FileType fileType) {
+ this();
+ setSdlFileName(syncFileName);
+ setFileType(fileType);
+ }
+
+ /**
+ * Sets a file reference name
+ *
+ * @param sdlFileName
+ * a String value representing a file reference name
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500, however the max file name length may vary based on remote filesystem limitations
+ */
+ public void setSdlFileName(@NonNull String sdlFileName) {
+ setParameters(KEY_SDL_FILE_NAME, sdlFileName);
+ }
+
+ /**
+ * Gets a file reference name
+ *
+ * @return String - a String value representing a file reference name
+ */
+ public String getSdlFileName() {
+ return getString(KEY_SDL_FILE_NAME);
+ }
+
+ /**
+ * Sets file type
+ *
+ * @param fileType
+ * a FileType value representing a selected file type
+ */
+ public void setFileType(@NonNull FileType fileType) {
+ setParameters(KEY_FILE_TYPE, fileType);
+ }
+
+ /**
+ * Gets a file type
+ *
+ * @return FileType -a FileType value representing a selected file type
+ */
+ public FileType getFileType() {
+ return (FileType) getObject(FileType.class, KEY_FILE_TYPE);
+ }
+
+ /**
+ * Sets a value to indicates if the file is meant to persist between
+ * sessions / ignition cycles. If set to TRUE, then the system will aim to
+ * persist this file through session / cycles. While files with this
+ * designation will have priority over others, they are subject to deletion
+ * by the system at any time. In the event of automatic deletion by the
+ * system, the app will receive a rejection and have to resend the file. If
+ * omitted, the value will be set to false
+ * <p></p>
+ *
+ * @param persistentFile
+ * a Boolean value
+ */
+ public void setPersistentFile(Boolean persistentFile) {
+ setParameters(KEY_PERSISTENT_FILE, persistentFile);
+ }
+
+ /**
+ * Gets a value to Indicates if the file is meant to persist between
+ * sessions / ignition cycles
+ *
+ * @return Boolean -a Boolean value to indicates if the file is meant to
+ * persist between sessions / ignition cycles
+ */
+ public Boolean getPersistentFile() {
+ return getBoolean(KEY_PERSISTENT_FILE);
+ }
+ public void setFileData(byte[] fileData) {
+ setBulkData(fileData);
+ }
+ public byte[] getFileData() {
+ return getBulkData();
+ }
+
+ /**
+ * @deprecated as of SmartDeviceLink 4.0
+ * @param offset
+ */
+ public void setOffset(Integer offset) {
+ if(offset == null){
+ setOffset((Long)null);
+ }else{
+ setOffset(offset.longValue());
+ }
+ }
+
+ public void setOffset(Long offset) {
+ setParameters(KEY_OFFSET, offset);
+ }
+
+ public Long getOffset() {
+ final Object o = getParameters(KEY_OFFSET);
+ if (o == null){
+ return null;
+ }
+ if (o instanceof Integer) {
+ return ((Integer) o).longValue();
+ }else if(o instanceof Long){
+ return (Long) o;
+ }
+
+
+ return null;
+ }
+
+ /**
+ * @deprecated as of SmartDeviceLink 4.0
+ * @param length
+ */
+ public void setLength(Integer length) {
+ if(length == null){
+ setLength((Long)null);
+ }else{
+ setLength(length.longValue());
+ }
+ }
+
+ public void setLength(Long length) {
+ setParameters(KEY_LENGTH, length);
+ }
+
+ public Long getLength() {
+ final Object o = getParameters(KEY_LENGTH);
+ if (o == null){
+ return null;
+ }
+ if (o instanceof Integer) {
+ return ((Integer) o).longValue();
+ }else if(o instanceof Long){
+ return (Long) o;
+ }
+
+ return null;
+ }
+
+ public void setSystemFile(Boolean systemFile) {
+ setParameters(KEY_SYSTEM_FILE, systemFile);
+ }
+
+ public Boolean getSystemFile() {
+ final Object o = getParameters(KEY_SYSTEM_FILE);
+ if (o instanceof Boolean) {
+ return (Boolean) o;
+ }
+ else
+ return null;
+ }
+
+ /**
+ * This takes the file data as an array of bytes and calculates the
+ * CRC32 for it.
+ * @param fileData - the file as a byte array
+ */
+ public void setCRC(byte[] fileData) {
+ if (fileData != null) {
+ CRC32 crc = new CRC32();
+ crc.update(fileData);
+ parameters.put(KEY_CRC, crc.getValue());
+ } else {
+ parameters.remove(KEY_CRC);
+ }
+ }
+
+ /**
+ * This assumes you have created your own CRC32 and are setting it with the file
+ * <STRONG>Please avoid using your own calculations for this, and use the method
+ * included in java.util</STRONG>
+ * @param crc - the CRC32 of the file being set
+ */
+ public void setCRC(Long crc) {
+ if (crc != null) {
+ parameters.put(KEY_CRC, crc);
+ } else {
+ parameters.remove(KEY_CRC);
+ }
+ }
+
+ /**
+ * This returns the CRC, if it has been set, for the file object
+ * @return - a CRC32 Long
+ */
+ public Long getCRC() {
+ final Object o = parameters.get(KEY_CRC);
+ if (o == null){
+ return null;
+ }
+ if (o instanceof Integer) {
+ return ((Integer) o).longValue();
+ }else if(o instanceof Long){
+ return (Long) o;
+ }
+ return null;
+ }
+
+ @Override
+ public final void setOnRPCResponseListener(OnRPCResponseListener listener) {
+ super.setOnRPCResponseListener(listener);
+ }
+
+ public void setOnPutFileUpdateListener(OnPutFileUpdateListener listener) {
+ super.setOnRPCResponseListener(listener); //We can use the same method because it get stored as a parent class
+ }
+
+ public OnPutFileUpdateListener getOnPutFileUpdateListener() {
+ return (OnPutFileUpdateListener)getOnRPCResponseListener();
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFileResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFileResponse.java
new file mode 100644
index 000000000..f8d4a3bca
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/PutFileResponse.java
@@ -0,0 +1,92 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.util.Version;
+
+import java.util.Hashtable;
+
+/**
+ * Put File Response is sent, when PutFile has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class PutFileResponse extends RPCResponse {
+ public static final String KEY_SPACE_AVAILABLE = "spaceAvailable";
+ private static final Integer MAX_VALUE = 2000000000;
+
+ /**
+ * Constructs a new PutFileResponse object
+ */
+ public PutFileResponse() {
+ super(FunctionID.PUT_FILE.toString());
+ }
+
+ /**
+ * Constructs a new PutFileResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public PutFileResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * @deprecated use {@link PutFileResponse#PutFileResponse(Boolean, Result)} <br>
+ *
+ * Constructs a new PutFileResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ * @param spaceAvailable the spaceAvailable on the head unit
+ */
+ @Deprecated
+ public PutFileResponse(@NonNull Boolean success, @NonNull Result resultCode, @NonNull Integer spaceAvailable) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ setSpaceAvailable(spaceAvailable);
+ }
+
+ /**
+ * Constructs a new PutFileResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public PutFileResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ /**
+ * SpaceAvailable became optional as of RPC Spec 5.0. If a system that expected the value to
+ * always have a value connects to such a system, it could return null. Check to see if there
+ * is a value, and if not, set it to MAX_VALUE as defined by the RPC Spec
+ *
+ * @param rpcVersion the rpc spec version that has been negotiated. If value is null the
+ * the max value of RPC spec version this library supports should be used.
+ * @param formatParams if true, the format method will be called on subsequent params
+ */
+ @Override
+ public void format(Version rpcVersion, boolean formatParams){
+ if (rpcVersion == null || rpcVersion.getMajor() >= 5){
+ if (getSpaceAvailable() == null){
+ setSpaceAvailable(MAX_VALUE);
+ }
+ }
+ super.format(rpcVersion, formatParams);
+ }
+
+ public void setSpaceAvailable(Integer spaceAvailable) {
+ setParameters(KEY_SPACE_AVAILABLE, spaceAvailable);
+ }
+
+ public Integer getSpaceAvailable() {
+ return getInteger(KEY_SPACE_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RGBColor.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RGBColor.java
new file mode 100644
index 000000000..81d43161d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RGBColor.java
@@ -0,0 +1,141 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import java.util.Hashtable;
+
+/**
+ * A color class that stores RGB values
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>red</td>
+ * <td>Integer</td>
+ * <td>Y</td>
+ * <td><ul><li>minvalue="0"</li><li>maxvalue="255"</li></ul></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>green</td>
+ * <td>Integer</td>
+ * <td>Y</td>
+ * <td><ul><li>minvalue="0"</li><li>maxvalue="255"</li></ul></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>blue</td>
+ * <td>Integer</td>
+ * <td>Y</td>
+ * <td><ul><li>minvalue="0"</li><li>maxvalue="255"</li></ul></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 5.0
+ */
+public class RGBColor extends RPCStruct{
+ public static final String KEY_RED = "red";
+ public static final String KEY_GREEN = "green";
+ public static final String KEY_BLUE = "blue";
+ private static final Integer MIN_VALUE = 0, MAX_VALUE = 255;
+
+ /**
+ * Constructs a new RGBColor object
+ */
+ public RGBColor(){
+ this(MIN_VALUE, MIN_VALUE, MIN_VALUE);
+ }
+
+ /**
+ * Constructs a new RGBColor object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public RGBColor(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new RGB object
+ * @param red red value - min: 0; max: 255
+ * @param green green value - min: 0; max: 255
+ * @param blue blue value - min: 0; max: 255
+ */
+ public RGBColor(Integer red, Integer green, Integer blue) {
+ Hashtable<String, Object> hash = new Hashtable<>();
+ if (red != null && red >= MIN_VALUE && red <= MAX_VALUE) {
+ hash.put(KEY_RED, red);
+ } else {
+ hash.put(KEY_RED, MIN_VALUE);
+ }
+ if (green != null && green >= MIN_VALUE && green <= MAX_VALUE) {
+ hash.put(KEY_GREEN, green);
+ } else {
+ hash.put(KEY_GREEN, MIN_VALUE);
+ }
+ if (blue != null && blue >= MIN_VALUE && blue <= MAX_VALUE) {
+ hash.put(KEY_BLUE, blue);
+ } else {
+ hash.put(KEY_BLUE, MIN_VALUE);
+ }
+ this.store = hash;
+ }
+
+ /**
+ * Sets the red value of the color object
+ * @param color red value - min: 0; max: 255
+ */
+ public void setRed(Integer color) {
+ if (color != null && color >= MIN_VALUE && color <= MAX_VALUE) {
+ setValue(KEY_RED, color);
+ }
+ }
+
+ /**
+ * Gets the red value of the color
+ * @return red value
+ */
+ public Integer getRed() {
+ return getInteger(KEY_RED);
+ }
+
+ /**
+ * Sets the green value of the color object
+ * @param color green value - min: 0; max: 255
+ */
+ public void setGreen(Integer color) {
+ if (color != null && color >= MIN_VALUE && color <= MAX_VALUE) {
+ setValue(KEY_GREEN, color);
+ }
+ }
+
+ /**
+ * Gets the green value of the color
+ * @return green value
+ */
+ public Integer getGreen() {
+ return getInteger(KEY_GREEN);
+ }
+
+ /**
+ * Sets the blue value of the color object
+ * @param color blue value - min: 0; max: 255
+ */
+ public void setBlue(Integer color) {
+ if (color != null && color >= MIN_VALUE && color <= MAX_VALUE) {
+ setValue(KEY_BLUE, color);
+ }
+ }
+
+ /**
+ * Gets the green value of the color
+ * @return green value
+ */
+ public Integer getBlue() {
+ return getInteger(KEY_BLUE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlCapabilities.java
new file mode 100644
index 000000000..ac46368d8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlCapabilities.java
@@ -0,0 +1,311 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import java.util.Hashtable;
+
+/**
+ * Contains information about a radio control module's capabilities.
+ */
+public class RadioControlCapabilities extends RPCStruct{
+ public static final String KEY_MODULE_NAME= "moduleName";
+ public static final String KEY_RADIO_ENABLE_AVAILABLE= "radioEnableAvailable";
+ public static final String KEY_RADIO_BAND_AVAILABLE= "radioBandAvailable";
+ public static final String KEY_RADIO_FREQUENCY_AVAILABLE= "radioFrequencyAvailable";
+ public static final String KEY_HD_CHANNEL_AVAILABLE= "hdChannelAvailable";
+ public static final String KEY_RDS_DATA_AVAILABLE= "rdsDataAvailable";
+ public static final String KEY_AVAILABLE_HDS_AVAILABLE= "availableHDsAvailable";
+ public static final String KEY_STATE_AVAILABLE= "stateAvailable";
+ public static final String KEY_SIGNAL_STRENGTH_AVAILABLE= "signalStrengthAvailable";
+ public static final String KEY_SIGNAL_CHANGE_THRESHOLD_AVAILABLE= "signalChangeThresholdAvailable";
+ public static final String KEY_HD_RADIO_ENABLE_AVAILABLE = "hdRadioEnableAvailable";
+ public static final String KEY_SIRIUS_XM_RADIO_AVAILABLE = "siriusxmRadioAvailable";
+ public static final String KEY_SIS_DATA_AVAILABLE = "sisDataAvailable";
+
+ public RadioControlCapabilities() {
+ }
+
+ public RadioControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new RadioControlCapabilities object
+ * @param moduleName
+ * The short friendly name of the climate control module.
+ * It should not be used to identify a module by mobile application.
+ */
+ public RadioControlCapabilities(@NonNull String moduleName) {
+ this();
+ setModuleName(moduleName);
+ }
+ /**
+ * Sets the moduleName portion of the RadioControlCapabilities class
+ *
+ * @param moduleName
+ * The short friendly name of the climate control module.
+ * It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Gets the moduleName portion of the RadioControlCapabilities class
+ *
+ * @return String - Short friendly name of the climate control module.
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Sets the radioEnableAvailable portion of the RadioControlCapabilities class
+ *
+ * @param radioEnableAvailable
+ * Availability of the control of enable/disable radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setRadioEnableAvailable(Boolean radioEnableAvailable) {
+ setValue(KEY_RADIO_ENABLE_AVAILABLE, radioEnableAvailable);
+ }
+
+ /**
+ * Gets the radioEnableAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getRadioEnableAvailable() {
+ return getBoolean(KEY_RADIO_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the radioBandAvailable portion of the RadioControlCapabilities class
+ *
+ * @param radioBandAvailable
+ * Availability of the control of radio band.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setRadioBandAvailable(Boolean radioBandAvailable) {
+ setValue(KEY_RADIO_BAND_AVAILABLE, radioBandAvailable);
+ }
+
+ /**
+ * Gets the radioBandAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of radio band.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getRadioBandAvailable() {
+ return getBoolean(KEY_RADIO_BAND_AVAILABLE);
+ }
+
+ /**
+ * Sets the radioFrequencyAvailable portion of the RadioControlCapabilities class
+ *
+ * @param radioFrequencyAvailable
+ * Availability of the control of radio frequency.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setRadioFrequencyAvailable(Boolean radioFrequencyAvailable) {
+ setValue(KEY_RADIO_FREQUENCY_AVAILABLE, radioFrequencyAvailable);
+ }
+
+ /**
+ * Gets the radioFrequencyAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of radio frequency.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getRadioFrequencyAvailable() {
+ return getBoolean(KEY_RADIO_FREQUENCY_AVAILABLE);
+ }
+
+ /**
+ * Sets the hdChannelAvailable portion of the RadioControlCapabilities class
+ *
+ * @param hdChannelAvailable
+ * Availability of the control of HD radio channel.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHdChannelAvailable(Boolean hdChannelAvailable) {
+ setValue(KEY_HD_CHANNEL_AVAILABLE, hdChannelAvailable);
+ }
+
+ /**
+ * Gets the hdChannelAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of HD radio channel.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHdChannelAvailable() {
+ return getBoolean(KEY_HD_CHANNEL_AVAILABLE);
+ }
+
+ /**
+ * Sets the rdsDataAvailable portion of the RadioControlCapabilities class
+ *
+ * @param rdsDataAvailable
+ * Availability of the getting Radio Data System (RDS) data.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setRdsDataAvailable(Boolean rdsDataAvailable) {
+ setValue(KEY_RDS_DATA_AVAILABLE, rdsDataAvailable);
+ }
+
+ /**
+ * Gets the rdsDataAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting Radio Data System (RDS) data.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getRdsDataAvailable() {
+ return getBoolean(KEY_RDS_DATA_AVAILABLE);
+ }
+
+ /**
+ * Sets the availableHDsAvailable portion of the RadioControlCapabilities class
+ *
+ * @param availableHDsAvailable
+ * Availability of the getting the number of available HD channels.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setAvailableHDsAvailable(Boolean availableHDsAvailable) {
+ setValue(KEY_AVAILABLE_HDS_AVAILABLE, availableHDsAvailable);
+ }
+
+ /**
+ * Gets the availableHDsAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting the number of available HD channels.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getAvailableHDsAvailable() {
+ return getBoolean(KEY_AVAILABLE_HDS_AVAILABLE);
+ }
+
+ /**
+ * Sets the stateAvailable portion of the RadioControlCapabilities class
+ *
+ * @param stateAvailable
+ * Availability of the getting the Radio state.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setStateAvailable(Boolean stateAvailable) {
+ setValue(KEY_STATE_AVAILABLE, stateAvailable);
+ }
+
+ /**
+ * Gets the stateAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting the Radio state.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getStateAvailable() {
+ return getBoolean(KEY_STATE_AVAILABLE);
+ }
+
+ /**
+ * Sets the signalStrengthAvailable portion of the RadioControlCapabilities class
+ *
+ * @param signalStrengthAvailable
+ * Availability of the getting the signal strength.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setSignalStrengthAvailable(Boolean signalStrengthAvailable) {
+ setValue(KEY_SIGNAL_STRENGTH_AVAILABLE, signalStrengthAvailable);
+ }
+
+ /**
+ * Gets the signalStrengthAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting the signal strength.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getSignalStrengthAvailable() {
+ return getBoolean(KEY_SIGNAL_STRENGTH_AVAILABLE);
+ }
+
+ /**
+ * Sets the signalChangeThresholdAvailable portion of the RadioControlCapabilities class
+ *
+ * @param signalChangeThresholdAvailable
+ * Availability of the getting the signal Change Threshold.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setSignalChangeThresholdAvailable(Boolean signalChangeThresholdAvailable) {
+ setValue(KEY_SIGNAL_CHANGE_THRESHOLD_AVAILABLE, signalChangeThresholdAvailable);
+ }
+
+ /**
+ * Gets the signalChangeThresholdAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting the signal Change Threshold.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getSignalChangeThresholdAvailable() {
+ return getBoolean(KEY_SIGNAL_CHANGE_THRESHOLD_AVAILABLE);
+ }
+
+ /**
+ * Sets the hdRadioEnableAvailable portion of the RadioControlCapabilities class
+ *
+ * @param hdRadioEnableAvailable Availability of the control of enable/disable HD radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setHdRadioEnableAvailable(Boolean hdRadioEnableAvailable) {
+ setValue(KEY_HD_RADIO_ENABLE_AVAILABLE, hdRadioEnableAvailable);
+ }
+
+ /**
+ * Gets the hdRadioEnableAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the control of enable/disable HD radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getHdRadioEnableAvailable() {
+ return getBoolean(KEY_HD_RADIO_ENABLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the siriusxmRadioAvailable portion of the RadioControlCapabilities class
+ *
+ * @param siriusxmRadioAvailable Availability of sirius XM radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setSiriusXMRadioAvailable(Boolean siriusxmRadioAvailable) {
+ setValue(KEY_SIRIUS_XM_RADIO_AVAILABLE, siriusxmRadioAvailable);
+ }
+
+ /**
+ * Gets the siriusxmRadioAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of sirius XM radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getSiriusXMRadioAvailable() {
+ return getBoolean(KEY_SIRIUS_XM_RADIO_AVAILABLE);
+ }
+
+ /**
+ * Sets the sisDataAvailable portion of the RadioControlCapabilities class
+ *
+ * @param sisDataAvailable Availability of the getting HD radio Station Information Service (SIS) data.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public void setSisDataAvailable(Boolean sisDataAvailable) {
+ setValue(KEY_SIS_DATA_AVAILABLE, sisDataAvailable);
+ }
+
+ /**
+ * Gets the sisDataAvailable portion of the RadioControlCapabilities class
+ *
+ * @return Boolean - Availability of the getting HD radio Station Information Service (SIS) data.
+ * True: Available, False: Not Available, Not present: Not Available.
+ */
+ public Boolean getSisDataAvailable() {
+ return getBoolean(KEY_SIS_DATA_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlData.java
new file mode 100644
index 000000000..fcedfdb0f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RadioControlData.java
@@ -0,0 +1,261 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.RadioBand;
+import com.smartdevicelink.proxy.rpc.enums.RadioState;
+import java.util.Hashtable;
+
+/**
+ * Include information (both read-only and changeable data) about a
+ * remote control radio module.
+ */
+public class RadioControlData extends RPCStruct{
+ public static final String KEY_FREQUENCY_INTEGER= "frequencyInteger";
+ public static final String KEY_FREQUENCY_FRACTION= "frequencyFraction";
+ public static final String KEY_BAND= "band";
+ public static final String KEY_RDS_DATA= "rdsData";
+ public static final String KEY_AVAILABLE_HDS= "availableHDs";
+ public static final String KEY_HD_CHANNEL= "hdChannel";
+ public static final String KEY_SIGNAL_STRENGTH= "signalStrength";
+ public static final String KEY_SIGNAL_CHANGE_THRESHOLD= "signalChangeThreshold";
+ public static final String KEY_RADIO_ENABLE= "radioEnable";
+ public static final String KEY_STATE= "state";
+ public static final String KEY_HD_RADIO_ENABLE = "hdRadioEnable";
+ public static final String KEY_SIS_DATA = "sisData";
+
+ public RadioControlData() {
+ }
+
+ public RadioControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the frequencyInteger portion of the RadioControlData class
+ *
+ * @param frequencyInteger
+ * The integer part of the frequency i.e. for 101.7 this value should be 101
+ */
+ public void setFrequencyInteger(Integer frequencyInteger) {
+ setValue(KEY_FREQUENCY_INTEGER, frequencyInteger);
+ }
+
+ /**
+ * Gets the frequencyInteger portion of the RadioControlData class
+ *
+ * @return Integer - The integer part of the frequency i.e. for 101.7 this value should be 101.
+ */
+ public Integer getFrequencyInteger() {
+ return getInteger(KEY_FREQUENCY_INTEGER);
+ }
+
+ /**
+ * Sets the frequencyFraction portion of the RadioControlData class
+ *
+ * @param frequencyFraction
+ * The fractional part of the frequency i.e. for 101.7 is 7.
+ */
+ public void setFrequencyFraction(Integer frequencyFraction) {
+ setValue(KEY_FREQUENCY_FRACTION, frequencyFraction);
+ }
+
+ /**
+ * Gets the frequencyFraction portion of the RadioControlData class
+ *
+ * @return Integer - The fractional part of the frequency i.e. for 101.7 is 7.
+ */
+ public Integer getFrequencyFraction() {
+ return getInteger(KEY_FREQUENCY_FRACTION);
+ }
+
+ /**
+ * Sets the band portion of the RadioControlData class
+ *
+ * @param band
+ * The radio band (AM|FM|XM) of the radio tuner.
+ */
+ public void setBand(RadioBand band) {
+ setValue(KEY_BAND, band);
+ }
+
+ /**
+ * Gets the band portion of the RadioControlData class
+ *
+ * @return RadioBand - The radio band (AM|FM|XM) of the radio tuner.
+ */
+ public RadioBand getBand() {
+ return (RadioBand) getObject(RadioBand.class, KEY_BAND);
+ }
+
+ /**
+ * Sets the rdsData portion of the RadioControlData class
+ *
+ * @param rdsData
+ * Read only parameter. See RdsData data type for details.
+ */
+ public void setRdsData(RdsData rdsData) {
+ setValue(KEY_RDS_DATA, rdsData);
+ }
+
+ /**
+ * Gets the rdsData portion of the RadioControlData class
+ *
+ * @return RdsData - Read only parameter. See RdsData data type for details.
+ */
+ public RdsData getRdsData() {
+ return (RdsData) getObject(RdsData.class, KEY_RDS_DATA);
+ }
+
+ /**
+ * Sets the availableHDs portion of the RadioControlData class
+ *
+ * @param availableHDs
+ * Number of HD sub-channels if available.
+ */
+ public void setAvailableHDs(Integer availableHDs) {
+ setValue(KEY_AVAILABLE_HDS, availableHDs);
+ }
+
+ /**
+ * Gets the availableHDs portion of the RadioControlData class
+ *
+ * @return Integer - Number of HD sub-channels if available.
+ */
+ public Integer getAvailableHDs() {
+ return getInteger(KEY_AVAILABLE_HDS);
+ }
+
+ /**
+ * Sets the hdChannel portion of the RadioControlData class
+ *
+ * @param hdChannel
+ * Current HD sub-channel if available.
+ */
+ public void setHdChannel(Integer hdChannel) {
+ setValue(KEY_HD_CHANNEL, hdChannel);
+ }
+
+ /**
+ * Gets the hdChannel portion of the RadioControlData class
+ *
+ * @return Integer - Current HD sub-channel if available.
+ */
+ public Integer getHdChannel() {
+ return getInteger(KEY_HD_CHANNEL);
+ }
+
+ /**
+ * Sets the signalStrength portion of the RadioControlData class
+ *
+ * @param signalStrength
+ * Read only parameter. Indicates the strength of receiving radio signal in current frequency.
+ */
+ public void setSignalStrength(Integer signalStrength) {
+ setValue(KEY_SIGNAL_STRENGTH, signalStrength);
+ }
+
+ /**
+ * Gets the signalStrength portion of the RadioControlData class
+ *
+ * @return Integer - Read only parameter. Indicates the strength of receiving radio signal in current frequency.
+ */
+ public Integer getSignalStrength() {
+ return getInteger(KEY_SIGNAL_STRENGTH);
+ }
+
+ /**
+ * Sets the signalChangeThreshold portion of the RadioControlData class
+ *
+ * @param signalChangeThreshold
+ * If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency.
+ */
+ public void setSignalChangeThreshold(Integer signalChangeThreshold) {
+ setValue(KEY_SIGNAL_CHANGE_THRESHOLD, signalChangeThreshold);
+ }
+
+ /**
+ * Gets the signalChangeThreshold portion of the RadioControlData class
+ *
+ * @return Integer - If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency.
+ */
+ public Integer getSignalChangeThreshold() {
+ return getInteger(KEY_SIGNAL_CHANGE_THRESHOLD);
+ }
+
+ /**
+ * Sets the radioEnable portion of the RadioControlData class
+ * <br><b>Note: </b> If this is set to false, no other data will be included.
+ * <br><b>Note: </b> This setting is normally a <b>READ-ONLY</b> setting.
+ *
+ * @param radioEnable
+ * True if the radio is on, false is the radio is off.
+ */
+ public void setRadioEnable(Boolean radioEnable) {
+ setValue(KEY_RADIO_ENABLE, radioEnable);
+ }
+
+ /**
+ * Gets the radioEnable portion of the RadioControlData class
+ * <br><b>Note: </b> If this is set to false, no other data will be included.
+ *
+ * @return Boolean - True if the radio is on, false is the radio is off.
+ */
+ public Boolean getRadioEnable() {
+ return getBoolean(KEY_RADIO_ENABLE);
+ }
+
+ /**
+ * Sets the state portion of the RadioControlData class
+ *
+ * @param state
+ * Read only parameter. See RadioState data type for details.
+ */
+ public void setState(RadioState state) {
+ setValue(KEY_STATE, state);
+ }
+
+ /**
+ * Gets the state portion of the RadioControlData class
+ *
+ * @return RadioState - Read only parameter. See RadioState data type for details.
+ */
+ public RadioState getState() {
+ return (RadioState) getObject(RadioState.class, KEY_STATE);
+ }
+
+ /**
+ * Sets the hdRadioEnable portion of the RadioControlData class
+ *
+ * @param hdRadioEnable True if the hd radio is on, false if the radio is off.
+ */
+ public void setHdRadioEnable(Boolean hdRadioEnable) {
+ setValue(KEY_HD_RADIO_ENABLE, hdRadioEnable);
+ }
+
+ /**
+ * Gets the hdRadioEnable portion of the RadioControlData class
+ *
+ * @return Boolean - True if the hd radio is on, false if the radio is off.
+ */
+ public Boolean getHdRadioEnable() {
+ return getBoolean(KEY_HD_RADIO_ENABLE);
+ }
+
+ /**
+ * Sets the sisData portion of the RadioControlData class
+ *
+ * @param sisData 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.
+ */
+ public void setSisData(SisData sisData) {
+ setValue(KEY_SIS_DATA, sisData);
+ }
+
+ /**
+ * Gets the sisData portion of the RadioControlData class
+ *
+ * @return SisData - 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.
+ */
+ public SisData getSisData() {
+ return (SisData) getObject(SisData.class, KEY_SIS_DATA);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RdsData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RdsData.java
new file mode 100644
index 000000000..2ed934865
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RdsData.java
@@ -0,0 +1,180 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Include the data defined in Radio Data System, which is a communications protocol standard
+ * for embedding small amounts of digital information in conventional FM radio broadcasts.
+ */
+public class RdsData extends RPCStruct{
+ public static final String KEY_PS= "PS";
+ public static final String KEY_RT= "RT";
+ public static final String KEY_CT= "CT";
+ public static final String KEY_PI= "PI";
+ public static final String KEY_PTY= "PTY";
+ public static final String KEY_TP= "TP";
+ public static final String KEY_TA= "TA";
+ public static final String KEY_REG= "REG";
+
+ public RdsData() {
+ }
+
+ public RdsData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the programService portion of the RdsData class
+ *
+ * @param programService
+ * Program Service Name.
+ */
+ public void setProgramService(String programService) {
+ setValue(KEY_PS, programService);
+ }
+
+ /**
+ * Gets the programService portion of the RdsData class
+ *
+ * @return String - Program Service Name.
+ */
+ public String getProgramService() {
+ return getString(KEY_PS);
+ }
+
+ /**
+ * Sets the radioText portion of the RdsData class
+ *
+ * @param radioText
+ * Radio Text.
+ */
+ public void setRadioText(String radioText) {
+ setValue(KEY_RT, radioText);
+ }
+
+ /**
+ * Gets the radioText portion of the RdsData class
+ *
+ * @return String - Radio Text.
+ */
+ public String getRadioText() {
+ return getString(KEY_RT);
+ }
+
+ /**
+ * Sets the clockText portion of the RdsData class
+ *
+ * @param clockText
+ * The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD.
+ */
+ public void setClockText(String clockText) {
+ setValue(KEY_CT, clockText);
+ }
+
+ /**
+ * Gets the clockText portion of the RdsData class
+ *
+ * @return String - The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD.
+ */
+ public String getClockText() {
+ return getString(KEY_CT);
+ }
+
+ /**
+ * Sets the programIdentification portion of the RdsData class
+ *
+ * @param programIdentification
+ * Program Identification - the call sign for the radio station.
+ */
+ public void setProgramIdentification(String programIdentification) {
+ setValue(KEY_PI, programIdentification);
+ }
+
+ /**
+ * Gets the programIdentification portion of the RdsData class
+ *
+ * @return String - Program Identification - the call sign for the radio station.
+ */
+ public String getProgramIdentification() {
+ return getString(KEY_PI);
+ }
+
+ /**
+ * Sets the region portion of the RdsData class
+ *
+ * @param region
+ * Region.
+ */
+ public void setRegion(String region) {
+ setValue(KEY_REG, region);
+ }
+
+ /**
+ * Gets the region portion of the RdsData class
+ *
+ * @return String - Region.
+ */
+ public String getRegion() {
+ return getString(KEY_REG);
+ }
+
+ /**
+ * Sets the trafficProgram portion of the RdsData class
+ *
+ * @param trafficProgram
+ * Traffic Program Identification - Identifies a station that offers traffic.
+ */
+ public void setTrafficProgram(Boolean trafficProgram) {
+ setValue(KEY_TP, trafficProgram);
+ }
+
+ /**
+ * Gets the trafficProgram portion of the RdsData class
+ *
+ * @return Boolean - Traffic Program Identification - Identifies a station that offers traffic.
+ */
+ public Boolean getTrafficProgram() {
+ return getBoolean(KEY_TP);
+ }
+
+ /**
+ * Sets the trafficAnnouncement portion of the RdsData class
+ *
+ * @param trafficAnnouncement
+ * Traffic Announcement Identification - Indicates an ongoing traffic announcement.
+ */
+ public void setTrafficAnnouncement(Boolean trafficAnnouncement) {
+ setValue(KEY_TA, trafficAnnouncement);
+ }
+
+ /**
+ * Gets the trafficAnnouncement portion of the RdsData class
+ *
+ * @return Boolean - Traffic Announcement Identification - Indicates an ongoing traffic announcement.
+ */
+ public Boolean getTrafficAnnouncement() {
+ return getBoolean(KEY_TA);
+ }
+
+ /**
+ * Sets the programType portion of the RdsData class
+ *
+ * @param programType
+ * The program type - The region should be used to differentiate between EU and North America program types.
+ */
+ public void setProgramType(Integer programType) {
+ setValue(KEY_PTY, programType);
+ }
+
+ /**
+ * Gets the programType portion of the RdsData class
+ *
+ * @return Integer - The program type.
+ * The region should be used to differentiate between EU and North America program types.
+ */
+ public Integer getProgramType() {
+ return getInteger(KEY_PTY);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDID.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDID.java
new file mode 100644
index 000000000..7d62cf019
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDID.java
@@ -0,0 +1,158 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * <p>Non periodic vehicle data read request. This is an RPC to get diagnostics
+ * data from certain vehicle modules. DIDs of a certain module might differ from
+ * vehicle type to vehicle type</p>
+ *
+ * <p>Function Group: ProprietaryData</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>ecuName</td>
+ * <td>Integer</td>
+ * <td>Name of ECU.</td>
+ * <td>Y</td>
+ * <td>Minvalue: 0; Maxvalue: 65535</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>didLocation</td>
+ * <td>Integer</td>
+ * <td>Get raw data from vehicle data DID location(s).</td>
+ * <td>Y</td>
+ * <td>Minvalue: 0; Maxvalue: 65535</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <td>appID</td>
+ * <td>Integer</td>
+ * <td>ID of the application that requested this RPC.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p><b>Response</b></p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p> DISALLOWED</p>
+ * <p>USER_DISALLOWED </p>
+ * <p>TRUNCATED_DATA</p>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ReadDID extends RPCRequest {
+ public static final String KEY_ECU_NAME = "ecuName";
+ public static final String KEY_DID_LOCATION = "didLocation";
+
+ /**
+ * Constructs a new ReadDID object
+ */
+ public ReadDID() {
+ super(FunctionID.READ_DID.toString());
+ }
+
+ /**
+ * Constructs a new ReadDID object indicated by the Hashtable parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public ReadDID(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ReadDID object
+ * @param ecuName an Integer value representing the ID of the vehicle module
+ * <b>Notes: </b>Minvalue:0; Maxvalue:65535
+ * @param didLocation a List<Integer> value representing raw data from vehicle data DID location(s) <br>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Minvalue:0; Maxvalue:65535</li>
+ * <li>ArrayMin:0; ArrayMax:1000</li>
+ * </ul>
+ */
+ public ReadDID(@NonNull Integer ecuName, @NonNull List<Integer> didLocation) {
+ this();
+ setEcuName(ecuName);
+ setDidLocation(didLocation);
+ }
+
+ /**
+ * Sets an ID of the vehicle module
+ *
+ * @param ecuName
+ * an Integer value representing the ID of the vehicle module
+ * <p></p>
+ * <b>Notes: </b>Minvalue:0; Maxvalue:65535
+ */
+ public void setEcuName(@NonNull Integer ecuName) {
+ setParameters(KEY_ECU_NAME, ecuName);
+ }
+
+ /**
+ * Gets the ID of the vehicle module
+ *
+ * @return Integer -an Integer value representing the ID of the vehicle
+ * module
+ */
+ public Integer getEcuName() {
+ return getInteger(KEY_ECU_NAME);
+ }
+
+ /**
+ * Sets raw data from vehicle data DID location(s)
+ *
+ * @param didLocation
+ * a List<Integer> value representing raw data from vehicle
+ * data DID location(s)
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Minvalue:0; Maxvalue:65535</li>
+ * <li>ArrayMin:0; ArrayMax:1000</li>
+ * </ul>
+ */
+ public void setDidLocation(@NonNull List<Integer> didLocation) {
+ setParameters(KEY_DID_LOCATION, didLocation);
+ }
+
+ /**
+ * Gets raw data from vehicle data DID location(s)
+ *
+ * @return List<Integer> -a List<Integer> value representing raw data
+ * from vehicle data DID location(s)
+ */
+ @SuppressWarnings("unchecked")
+ public List<Integer> getDidLocation() {
+ return (List<Integer>) getObject(Integer.class, KEY_DID_LOCATION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDIDResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDIDResponse.java
new file mode 100644
index 000000000..3cf835906
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ReadDIDResponse.java
@@ -0,0 +1,43 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Read DID Response is sent, when ReadDID has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ReadDIDResponse extends RPCResponse {
+ public static final String KEY_DID_RESULT = "didResult";
+
+ public ReadDIDResponse() {
+ super(FunctionID.READ_DID.toString());
+ }
+ public ReadDIDResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ReadDIDResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ReadDIDResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ public void setDidResult(List<DIDResult> didResult) {
+ setParameters(KEY_DID_RESULT, didResult);
+ }
+ @SuppressWarnings("unchecked")
+ public List<DIDResult> getDidResult() {
+ return (List<DIDResult>) getObject(DIDResult.class, KEY_DID_RESULT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Rectangle.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Rectangle.java
new file mode 100644
index 000000000..d2545b5e5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Rectangle.java
@@ -0,0 +1,119 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/*
+ * Copyright (c) 2017 Livio, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Livio Inc. nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Defines Rectangle for each user control object for video streaming application
+ * @since SmartDeviceLink 4.5.0
+ */
+
+public class Rectangle extends RPCStruct {
+ public static final String KEY_X = "x";
+ public static final String KEY_Y = "y";
+ public static final String KEY_WIDTH = "width";
+ public static final String KEY_HEIGHT = "height";
+
+ public Rectangle() {}
+ public Rectangle(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public Rectangle(@NonNull Float x, @NonNull Float y, @NonNull Float width, @NonNull Float height) {
+ this();
+ setX(x);
+ setY(y);
+ setWidth(width);
+ setHeight(height);
+ }
+
+ /**
+ * Set the X-coordinate pixel in of the user control that starts in the upper left corner
+ */
+ public void setX(@NonNull Float x) {
+ setValue(KEY_X, x);
+ }
+
+ /**
+ * @return the X-coordinate pixel of the user control that starts in the upper left corner
+ */
+ public Float getX() {
+ return getFloat(KEY_X);
+ }
+
+ /**
+ * Set the Y-coordinate pixel of the user control that starts in the upper left corner
+ */
+ public void setY(@NonNull Float y) {
+ setValue(KEY_Y, y);
+ }
+
+ /**
+ * @return the Y-coordinate pixel of the user control that starts in the upper left corner
+ */
+ public Float getY() {
+ return getFloat(KEY_Y);
+ }
+
+ /**
+ * Set the width in pixels of the user control's bounding rectangle in pixels
+ */
+ public void setWidth(@NonNull Float width) {
+ setValue(KEY_WIDTH, width);
+ }
+
+ /**
+ * @return the width in pixels of the user control's bounding rectangle in pixels
+ */
+ public Float getWidth() {
+ return getFloat(KEY_WIDTH);
+ }
+
+ /**
+ * The height in pixels of the user control's bounding rectangle
+ */
+ public void setHeight(@NonNull Float height) {
+ setValue(KEY_HEIGHT, height);
+ }
+
+ /**
+ * @return the width in pixels of the user control's bounding rectangle in pixels
+ */
+ public Float getHeight() {
+ return getFloat(KEY_HEIGHT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterface.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterface.java
new file mode 100644
index 000000000..5ba1e623d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterface.java
@@ -0,0 +1,707 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.AppHMIType;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+import com.smartdevicelink.util.Version;
+
+import java.util.Hashtable;
+import java.util.List;
+/**
+ * Registers the application's interface with SDL&reg;, declaring properties of
+ * the registration, including the messaging interface version, the app name,
+ * etc. The mobile application must establish its interface registration with
+ * SDL&reg; before any other interaction with SDL&reg; can take place. The
+ * registration lasts until it is terminated either by the application calling
+ * the <i> {@linkplain UnregisterAppInterface}</i> method, or by SDL&reg;
+ * sending an <i> {@linkplain OnAppInterfaceUnregistered}</i> notification, or
+ * by loss of the underlying transport connection, or closing of the underlying
+ * message transmission protocol RPC session
+ * <p></p>
+ * Until the application receives its first <i>{@linkplain OnHMIStatus}</i>
+ * Notification, its HMI Status is assumed to be: <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.enums.HMILevel}</i>=NONE, <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.enums.AudioStreamingState}
+ * </i>=NOT_AUDIBLE, <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.enums.SystemContext}</i>=MAIN
+ * <p></p>
+ * All SDL&reg; resources which the application creates or uses (e.g. Choice
+ * Sets, Command Menu, etc.) are associated with the application's interface
+ * registration. Therefore, when the interface registration ends, the SDL&reg;
+ * resources associated with the application are disposed of. As a result, even
+ * though the application itself may continue to run on its host platform (e.g.
+ * mobile device) after the interface registration terminates, the application
+ * will not be able to use the SDL&reg; HMI without first establishing a new
+ * interface registration and re-creating its required SDL&reg; resources. That
+ * is, SDL&reg; resources created by (or on behalf of) an application do not
+ * persist beyond the life-span of the interface registration
+ * <p></p>
+ * Resources and settings whose lifespan is tied to the duration of an
+ * application's interface registration:
+ * <ul>
+ * <li>Choice Sets</li>
+ * <li>Command Menus (built by successive calls to <i>{@linkplain AddCommand}
+ * </i>)</li>
+ * <li>Media clock timer display value</li>
+ * <li>Media clock timer display value</li>
+ * <li>Media clock timer display value</li>
+ * </ul>
+ * <p></p>
+ * The autoActivateID is used to grant an application the HMILevel and
+ * AudioStreamingState it had when it last disconnected
+ * <p></p>
+ * <b>Notes: </b>The autoActivateID parameter, and associated behavior, is
+ * currently ignored by SDL&reg;
+ * <p></p>
+ * When first calling this method (i.e. first time within life cycle of mobile
+ * app), an autoActivateID should not be included. After successfully
+ * registering an interface, an autoActivateID is returned to the mobile
+ * application for it to use in subsequent connections. If the connection
+ * between SDL&reg; and the mobile application is lost, such as the vehicle is
+ * turned off while the application is running, the autoActivateID can then be
+ * passed in another call to RegisterAppInterface to re-acquire <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.enums.HMILevel}</i>=FULL
+ * <p></p>
+ * If the application intends to stream audio it is important to indicate so via
+ * the isMediaApp parameter. When set to true, audio will reliably stream
+ * without any configuration required by the user. When not set, audio may
+ * stream, depending on what the user might have manually configured as a media
+ * source on SDL&reg;
+ * <p></p>
+ * There is no time limit for how long the autoActivateID is "valid" (i.e. would
+ * confer focus and opt-in)
+ *
+ *<p> <b>HMILevel is not defined before registering</b></p>
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>MsgVersion</td>
+ * <td>MsgVersion</td>
+ * <td>Declares what version of the SDL interface the application expects to use with SDL</td>
+ * <td>Y</td>
+ * <td>To be compatible, app msg major version number must be less than or equal to SDL major version number. <p>If msg versions are incompatible, app has 20 seconds to attempt successful RegisterAppInterface (w.r.t. msg version) on underlying protocol session, else will be terminated. Major version number is a compatibility declaration. Minor version number indicates minor functional variations (e.g. features, capabilities, bug fixes) when sent from SDL to app (in RegisterAppInterface response).</p>However, the minor version number sent from the app to SDL (in RegisterAppInterface request) is ignored by SDL.</td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>appName</td>
+ * <td>String</td>
+ * <td>The mobile application's name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SDL .</td>
+ * <td>Y</td>
+ * <td><p> Must be 1-100 characters in length. Must consist of following characters: </p><p>May not be the same (by case insensitive comparison) as the name or any synonym of any currently registered application.</p> </td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>ttsName</td>
+ * <td>TTSChunk</td>
+ * <td>TTS string for VR recognition of the mobile application name. Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.</td>
+ * <td>N</td>
+ * <td><p>Size must be 1-100 Needs to be unique over all applications. May not be empty.<p>May not start with a new line character.</p></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>ngnMediaScreenAppName</td>
+ * <td>String</td>
+ * <td>Provides an abbreviated version of the app name (if necessary) that will be displayed on the NGN media screen.</td>
+ * <td>N</td>
+ * <td>- Must be 1-5 characters. If not provided, value will be derived from appName truncated to 5 characters.</td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>vrSynonyms</td>
+ * <td>String</td>
+ * <td>An array of 1-100 elements, each element containing a voice-recognition synonym by which this app can be called when being addressed in the mobile applications menu.</td>
+ * <td>N</td>
+ * <td>Each vr synonym is limited to 40 characters, and there can be 1-100 synonyms in array. May not be the same (by case insensitive comparison) as the name or any synonym of any currently-registered application.</td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>isMediaApplication</td>
+ * <td>Boolean</td>
+ * <td>Indicates that the application will be streaming audio to SDL (via A2DP) that is audible outside of the BT media source.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>languageDesired</td>
+ * <td>Language</td>
+ * <td>An enumeration indicating what language the application intends to use for user interaction (Display, TTS and VR).</td>
+ * <td>Y</td>
+ * <td>If the language indicated does not match the active language on SDL, the interface registration will be rejected.If the user changes the SDL language while this interface registration is active, the interface registration will be terminated. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>hmiDisplayLanguageDesired</td>
+ * <td>Language</td>
+ * <td>An enumeration indicating what language the application intends to use for user interaction ( Display).</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>appHMIType</td>
+ * <td>AppHMIType</td>
+ * <td>List of all applicable app types stating which classifications to be given to the app.e.g. for platforms , like GEN2, this will determine which "corner(s)" the app can populate</td>
+ * <td>N</td>
+ * <td>Array Minsize: 1; Array Maxsize: 100</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>hashID</td>
+ * <td>String</td>
+ * <td>ID used to uniquely identify current state of all app data that can persist through connection cycles (e.g. ignition cycles).This registered data (commands, submenus, choice sets, etc.) can be reestablished without needing to explicitly reregister each piece. If omitted, then the previous state of an app's commands, etc. will not be restored.When sending hashID, all RegisterAppInterface parameters should still be provided (e.g. ttsName, etc.). </td>
+ * <td>N</td>
+ * <td>maxlength:100</td>
+ * <td>SmartDeviceLink 2.3.1 </td>
+ * </tr>
+ * <tr>
+ * <td>deviceInfo</td>
+ * <td>DeviceInfo</td>
+ * <td>Various information abount connecting device.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.1 </td>
+ * </tr>
+ * <tr>
+ * <td>appID</td>
+ * <td>String</td>
+ * <td>ID used to validate app with policy table entries</td>
+ * <td>Y</td>
+ * <td>Maxlength: 100</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>fullAppID</td>
+ * <td>String</td>
+ * <td>ID used to validate app with policy table entries</td>
+ * <td>N</td>
+ * <td>Maxlength: 100</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>hmiCapabilities</td>
+ * <td>HMICapabilities</td>
+ * <td>Specifies the HMI capabilities.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2.2 </td>
+ * </tr>
+ *
+ * <tr>
+ * <td>sdlVersion</td>
+ * <td>String</td>
+ * <td>The SmartDeviceLink version.</td>
+ * <td>N</td>
+ * <td>Maxlength: 100</td>
+ * <td>SmartDeviceLink 2.3.2.2</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>systemSoftwareVersion</td>
+ * <td>String</td>
+ * <td>The software version of the system that implements the SmartDeviceLink core.</td>
+ * <td>N</td>
+ * <td>Maxlength: 100</td>
+ * <td>SmartDeviceLink 2.3.2.2</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>dayColorScheme</td>
+ * <td>TemplateColorScheme</td>
+ * <td>The color scheme that is used for day.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>nightColorScheme</td>
+ * <td>TemplateColorScheme</td>
+ * <td>The color scheme that is used for night.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * </table>
+ * <p></p>
+ * @since SmartDeviceLink 1.0
+ * @see UnregisterAppInterface
+ * @see OnAppInterfaceUnregistered
+ */
+public class RegisterAppInterface extends RPCRequest {
+ public static final String KEY_TTS_NAME = "ttsName";
+ public static final String KEY_HMI_DISPLAY_LANGUAGE_DESIRED = "hmiDisplayLanguageDesired";
+ public static final String KEY_APP_HMI_TYPE = "appHMIType";
+ public static final String KEY_APP_ID = "appID";
+ public static final String KEY_FULL_APP_ID = "fullAppID";
+ public static final String KEY_LANGUAGE_DESIRED = "languageDesired";
+ public static final String KEY_DEVICE_INFO = "deviceInfo";
+ public static final String KEY_APP_NAME = "appName";
+ public static final String KEY_NGN_MEDIA_SCREEN_APP_NAME = "ngnMediaScreenAppName";
+ public static final String KEY_IS_MEDIA_APPLICATION = "isMediaApplication";
+ public static final String KEY_VR_SYNONYMS = "vrSynonyms";
+ public static final String KEY_SDL_MSG_VERSION = "syncMsgVersion";
+ public static final String KEY_HASH_ID = "hashID";
+ public static final String KEY_DAY_COLOR_SCHEME = "dayColorScheme";
+ public static final String KEY_NIGHT_COLOR_SCHEME = "nightColorScheme";
+ private static final int APP_ID_MAX_LENGTH = 10;
+
+ /**
+ * Constructs a new RegisterAppInterface object
+ */
+ public RegisterAppInterface() {
+ super(FunctionID.REGISTER_APP_INTERFACE.toString());
+ }
+ /**
+ * Constructs a new RegisterAppInterface object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public RegisterAppInterface(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new RegisterAppInterface object
+ * @param syncMsgVersion a SdlMsgVersion object representing version of the SDL&reg; SmartDeviceLink interface <br>
+ * <b>Notes: </b>To be compatible, app msg major version number
+ * must be less than or equal to SDL&reg; major version number.
+ * If msg versions are incompatible, app has 20 seconds to
+ * attempt successful RegisterAppInterface (w.r.t. msg version)
+ * on underlying protocol session, else will be terminated. Major
+ * version number is a compatibility declaration. Minor version
+ * number indicates minor functional variations (e.g. features,
+ * capabilities, bug fixes) when sent from SDL&reg; to app (in
+ * RegisterAppInterface response). However, the minor version
+ * number sent from the app to SDL&reg; (in RegisterAppInterface
+ * request) is ignored by SDL&reg;
+ * @param appName a String value representing the Mobile Application's Name <br>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Must be 1-100 characters in length</li>
+ * <li>May not be the same (by case insensitive comparison) as
+ * the name or any synonym of any currently-registered
+ * application</li>
+ * </ul>
+ * @param isMediaApplication a Boolean value
+ * @param languageDesired a Language Enumeration
+ * @param hmiDisplayLanguageDesired
+ * @param fullAppID a String value representing a unique ID, which an app will be given when approved <br>
+ * <b>Notes: </b>Maxlength = 100
+ */
+ public RegisterAppInterface(@NonNull SdlMsgVersion syncMsgVersion, @NonNull String appName, @NonNull Boolean isMediaApplication,
+ @NonNull Language languageDesired, @NonNull Language hmiDisplayLanguageDesired, @NonNull String fullAppID) {
+ this();
+ setSdlMsgVersion(syncMsgVersion);
+ setAppName(appName);
+ setIsMediaApplication(isMediaApplication);
+ setLanguageDesired(languageDesired);
+ setHmiDisplayLanguageDesired(hmiDisplayLanguageDesired);
+ setFullAppID(fullAppID);
+ }
+ /**
+ * Gets the version of the SDL&reg; SmartDeviceLink interface
+ *
+ * @return SdlMsgVersion -a SdlMsgVersion object representing version of
+ * the SDL&reg; SmartDeviceLink interface
+ */
+ @SuppressWarnings("unchecked")
+ public SdlMsgVersion getSdlMsgVersion() {
+ return (SdlMsgVersion) getObject(SdlMsgVersion.class, KEY_SDL_MSG_VERSION);
+ }
+ /**
+ * Sets the version of the SDL&reg; SmartDeviceLink interface
+ *
+ * @param sdlMsgVersion
+ * a SdlMsgVersion object representing version of the SDL&reg;
+ * SmartDeviceLink interface
+ * <p></p>
+ * <b>Notes: </b>To be compatible, app msg major version number
+ * must be less than or equal to SDL&reg; major version number.
+ * If msg versions are incompatible, app has 20 seconds to
+ * attempt successful RegisterAppInterface (w.r.t. msg version)
+ * on underlying protocol session, else will be terminated. Major
+ * version number is a compatibility declaration. Minor version
+ * number indicates minor functional variations (e.g. features,
+ * capabilities, bug fixes) when sent from SDL&reg; to app (in
+ * RegisterAppInterface response). However, the minor version
+ * number sent from the app to SDL&reg; (in RegisterAppInterface
+ * request) is ignored by SDL&reg;
+ *
+ */
+ public void setSdlMsgVersion(@NonNull SdlMsgVersion sdlMsgVersion) {
+ setParameters(KEY_SDL_MSG_VERSION, sdlMsgVersion);
+ }
+
+ @SuppressWarnings("unchecked")
+ public DeviceInfo getDeviceInfo() {
+ return (DeviceInfo) getObject(DeviceInfo.class, KEY_DEVICE_INFO);
+ }
+
+ public void setDeviceInfo(DeviceInfo deviceInfo) {
+ setParameters(KEY_DEVICE_INFO, deviceInfo);
+ }
+ /**
+ * Gets Mobile Application's Name
+ *
+ * @return String -a String representing the Mobile Application's Name
+ */
+ public String getAppName() {
+ return getString(KEY_APP_NAME);
+ }
+ /**
+ * Sets Mobile Application's Name, This name is displayed in the SDL&reg;
+ * Mobile Applications menu. It also serves as the unique identifier of the
+ * application for SmartDeviceLink
+ *
+ * @param appName
+ * a String value representing the Mobile Application's Name
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Must be 1-100 characters in length</li>
+ * <li>May not be the same (by case insensitive comparison) as
+ * the name or any synonym of any currently-registered
+ * application</li>
+ * </ul>
+ */
+ public void setAppName(@NonNull String appName) {
+ setParameters(KEY_APP_NAME, appName);
+ }
+
+ /**
+ * Gets TTS string for VR recognition of the mobile application name
+ *
+ * @return List<TTSChunk> -List value representing the TTS string
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTtsName() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TTS_NAME);
+ }
+
+ /**
+ *
+ * @param ttsName
+ * a List<TTSChunk> value represeting the TTS Name
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Size must be 1-100</li>
+ * <li>Needs to be unique over all applications</li>
+ * <li>May not be empty</li>
+ * <li>May not start with a new line character</li>
+ * <li>May not interfere with any name or synonym of previously
+ * registered applications and the following list of words</li>
+ * <li>Needs to be unique over all applications. Applications
+ * with the same name will be rejected</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setTtsName(List<TTSChunk> ttsName) {
+ setParameters(KEY_TTS_NAME, ttsName);
+ }
+ /**
+ * Gets a String representing an abbreviated version of the mobile
+ * applincation's name (if necessary) that will be displayed on the NGN
+ * media screen
+ *
+ * @return String -a String value representing an abbreviated version of the
+ * mobile applincation's name
+ */
+ public String getNgnMediaScreenAppName() {
+ return getString(KEY_NGN_MEDIA_SCREEN_APP_NAME);
+ }
+ /**
+ * Sets a String representing an abbreviated version of the mobile
+ * applincation's name (if necessary) that will be displayed on the NGN
+ * media screen
+ *
+ * @param ngnMediaScreenAppName
+ * a String value representing an abbreviated version of the
+ * mobile applincation's name
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Must be 1-5 characters</li>
+ * <li>If not provided, value will be derived from appName
+ * truncated to 5 characters</li>
+ * </ul>
+ */
+ public void setNgnMediaScreenAppName(String ngnMediaScreenAppName) {
+ setParameters(KEY_NGN_MEDIA_SCREEN_APP_NAME, ngnMediaScreenAppName);
+ }
+ /**
+ * Gets the List<String> representing the an array of 1-100 elements, each
+ * element containing a voice-recognition synonym
+ *
+ * @return List<String> -a List value representing the an array of
+ * 1-100 elements, each element containing a voice-recognition
+ * synonym
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getVrSynonyms() {
+ return (List<String>) getObject(String.class, KEY_VR_SYNONYMS);
+ }
+ /**
+ * Sets a vrSynonyms representing the an array of 1-100 elements, each
+ * element containing a voice-recognition synonym
+ *
+ * @param vrSynonyms
+ * a List<String> value representing the an array of 1-100
+ * elements
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Each vr synonym is limited to 40 characters, and there can
+ * be 1-100 synonyms in array</li>
+ * <li>May not be the same (by case insensitive comparison) as
+ * the name or any synonym of any currently-registered
+ * application</li>
+ * </ul>
+ */
+ public void setVrSynonyms(List<String> vrSynonyms) {
+ setParameters(KEY_VR_SYNONYMS, vrSynonyms);
+ }
+ /**
+ * Gets a Boolean representing MediaApplication
+ *
+ * @return Boolean -a Boolean value representing a mobile application that is
+ * a media application or not
+ */
+ public Boolean getIsMediaApplication() {
+ return getBoolean(KEY_IS_MEDIA_APPLICATION);
+ }
+ /**
+ * Sets a Boolean to indicate a mobile application that is a media
+ * application or not
+ *
+ * @param isMediaApplication
+ * a Boolean value
+ */
+ public void setIsMediaApplication(@NonNull Boolean isMediaApplication) {
+ setParameters(KEY_IS_MEDIA_APPLICATION, isMediaApplication);
+ }
+ /**
+ * Gets a Language enumeration indicating what language the application
+ * intends to use for user interaction (Display, TTS and VR)
+ *
+ * @return Enumeration -a language enumeration
+ */
+ public Language getLanguageDesired() {
+ return (Language) getObject(Language.class, KEY_LANGUAGE_DESIRED);
+ }
+ /**
+ * Sets an enumeration indicating what language the application intends to
+ * use for user interaction (Display, TTS and VR)
+ *
+ * @param languageDesired
+ * a Language Enumeration
+ *
+ *
+ */
+ public void setLanguageDesired(@NonNull Language languageDesired) {
+ setParameters(KEY_LANGUAGE_DESIRED, languageDesired);
+ }
+
+ /**
+ * Gets an enumeration indicating what language the application intends to
+ * use for user interaction ( Display)
+ *
+ * @return Language - a Language value representing an enumeration
+ * indicating what language the application intends to use for user
+ * interaction ( Display)
+ * @since SmartDeviceLink 2.0
+ */
+ public Language getHmiDisplayLanguageDesired() {
+ return (Language) getObject(Language.class, KEY_HMI_DISPLAY_LANGUAGE_DESIRED);
+ }
+
+ /**
+ * Sets an enumeration indicating what language the application intends to
+ * use for user interaction ( Display)
+ *
+ * @param hmiDisplayLanguageDesired
+ * @since SmartDeviceLink 2.0
+ */
+ public void setHmiDisplayLanguageDesired(@NonNull Language hmiDisplayLanguageDesired) {
+ setParameters(KEY_HMI_DISPLAY_LANGUAGE_DESIRED, hmiDisplayLanguageDesired);
+ }
+
+ /**
+ * Gets a list of all applicable app types stating which classifications to
+ * be given to the app.e.g. for platforms , like GEN2, this will determine
+ * which "corner(s)" the app can populate
+ *
+ * @return List<AppHMIType> - a List value representing a list of all
+ * applicable app types stating which classifications to be given to
+ * the app
+ * @since SmartDeviceLinke 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<AppHMIType> getAppHMIType() {
+ return (List<AppHMIType>) getObject(AppHMIType.class, KEY_APP_HMI_TYPE);
+ }
+
+ /**
+ * Sets a a list of all applicable app types stating which classifications
+ * to be given to the app. e.g. for platforms , like GEN2, this will
+ * determine which "corner(s)" the app can populate
+ *
+ * @param appHMIType
+ * a List<AppHMIType>
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Array Minsize: = 1</li>
+ * <li>Array Maxsize = 100</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setAppHMIType(List<AppHMIType> appHMIType) {
+ setParameters(KEY_APP_HMI_TYPE, appHMIType);
+ }
+
+ public String getHashID() {
+ return getString(KEY_HASH_ID);
+ }
+
+ public void setHashID(String hashID) {
+ setParameters(KEY_HASH_ID, hashID);
+ }
+
+ /**
+ * Gets the unique ID, which an app will be given when approved
+ *
+ * @return String - a String value representing the unique ID, which an app
+ * will be given when approved
+ * @since SmartDeviceLink 2.0
+ */
+ public String getAppID() {
+ return getString(KEY_APP_ID);
+ }
+
+ /**
+ * Sets a unique ID, which an app will be given when approved
+ *
+ * @param appID
+ * a String value representing a unique ID, which an app will be
+ * given when approved
+ * <p></p>
+ * <b>Notes: </b>Maxlength = 100
+ * @since SmartDeviceLink 2.0
+ */
+ public void setAppID(@NonNull String appID) {
+ if (appID != null) {
+ setParameters(KEY_APP_ID, appID.toLowerCase());
+ } else {
+ setParameters(KEY_APP_ID, appID);
+ }
+ }
+
+ /**
+ * Gets the unique ID, which an app will be given when approved
+ *
+ * @return String - a String value representing the unique ID, which an app
+ * will be given when approved
+ * @since SmartDeviceLink 5.0
+ */
+ public String getFullAppID() {
+ return getString(KEY_FULL_APP_ID);
+ }
+
+ /**
+ * Sets a unique ID, which an app will be given when approved <br>
+ * Note: this will automatically parse the fullAppID into the smaller appId and set the appId value as well
+ * @param fullAppID
+ * a String value representing a unique ID, which an app will be
+ * given when approved
+ * <p></p>
+ * <b>Notes: </b>Maxlength = 100
+ * @since SmartDeviceLink 5.0
+ */
+ public void setFullAppID(String fullAppID) {
+ if (fullAppID != null) {
+ fullAppID = fullAppID.toLowerCase();
+ setParameters(KEY_FULL_APP_ID, fullAppID);
+ String appID;
+ if (fullAppID.length() <= APP_ID_MAX_LENGTH) {
+ appID = fullAppID;
+ } else {
+ appID = fullAppID.replace("-", "").substring(0, APP_ID_MAX_LENGTH);
+ }
+ setAppID(appID);
+ } else {
+ setParameters(KEY_FULL_APP_ID, null);
+ }
+ }
+
+ @Override
+ public void format(Version rpcVersion, boolean formatParams) {
+ if(rpcVersion == null || rpcVersion.getMajor() >= 5) {
+ if (getFullAppID() == null) {
+ setFullAppID(getAppID());
+ }
+ }
+ super.format(rpcVersion, formatParams);
+ }
+
+ /**
+ * Gets the color scheme that is currently used for day
+ *
+ * @return TemplateColorScheme - a TemplateColorScheme object representing the colors that are used
+ * for day color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public TemplateColorScheme getDayColorScheme(){
+ return (TemplateColorScheme) getObject(TemplateColorScheme.class, KEY_DAY_COLOR_SCHEME);
+ }
+
+ /**
+ * Sets the color scheme that is intended to be used for day
+ *
+ * @param templateColorScheme a TemplateColorScheme object representing the colors that will be
+ * used for day color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public void setDayColorScheme(TemplateColorScheme templateColorScheme){
+ setParameters(KEY_DAY_COLOR_SCHEME, templateColorScheme);
+ }
+
+ /**
+ * Gets the color scheme that is currently used for night
+ *
+ * @return TemplateColorScheme - a TemplateColorScheme object representing the colors that are used
+ * for night color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public TemplateColorScheme getNightColorScheme(){
+ return (TemplateColorScheme) getObject(TemplateColorScheme.class, KEY_NIGHT_COLOR_SCHEME);
+ }
+
+ /**
+ * Sets the color scheme that is intended to be used for night
+ *
+ * @param templateColorScheme a TemplateColorScheme object representing the colors that will be
+ * used for night color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public void setNightColorScheme(TemplateColorScheme templateColorScheme){
+ setParameters(KEY_NIGHT_COLOR_SCHEME, templateColorScheme);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java
new file mode 100644
index 000000000..746129a85
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java
@@ -0,0 +1,429 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.Version;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+import com.smartdevicelink.proxy.rpc.enums.PrerecordedSpeech;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities;
+import com.smartdevicelink.proxy.rpc.enums.VrCapabilities;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Register AppInterface Response is sent, when RegisterAppInterface has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class RegisterAppInterfaceResponse extends RPCResponse {
+ public static final String KEY_VEHICLE_TYPE = "vehicleType";
+ public static final String KEY_SPEECH_CAPABILITIES = "speechCapabilities";
+ public static final String KEY_VR_CAPABILITIES = "vrCapabilities";
+ public static final String KEY_AUDIO_PASS_THRU_CAPABILITIES = "audioPassThruCapabilities";
+ public static final String KEY_HMI_ZONE_CAPABILITIES = "hmiZoneCapabilities";
+ public static final String KEY_PRERECORDED_SPEECH = "prerecordedSpeech";
+ public static final String KEY_SUPPORTED_DIAG_MODES = "supportedDiagModes";
+ public static final String KEY_SDL_MSG_VERSION = "syncMsgVersion";
+ public static final String KEY_LANGUAGE = "language";
+ public static final String KEY_BUTTON_CAPABILITIES = "buttonCapabilities";
+ public static final String KEY_DISPLAY_CAPABILITIES = "displayCapabilities";
+ public static final String KEY_HMI_DISPLAY_LANGUAGE = "hmiDisplayLanguage";
+ public static final String KEY_SOFT_BUTTON_CAPABILITIES = "softButtonCapabilities";
+ public static final String KEY_PRESET_BANK_CAPABILITIES = "presetBankCapabilities";
+ public static final String KEY_HMI_CAPABILITIES = "hmiCapabilities"; //As of v4.0
+ public static final String KEY_SDL_VERSION = "sdlVersion"; //As of v4.0
+ public static final String KEY_SYSTEM_SOFTWARE_VERSION = "systemSoftwareVersion"; //As of v4.0
+ public static final String KEY_ICON_RESUMED = "iconResumed";
+ public static final String KEY_PCM_STREAM_CAPABILITIES = "pcmStreamCapabilities";
+
+ /**
+ * Constructs a new RegisterAppInterfaceResponse object
+ */
+ public RegisterAppInterfaceResponse() {
+ super(FunctionID.REGISTER_APP_INTERFACE.toString());
+ }
+
+ /**
+ * Constructs a new RegisterAppInterfaceResponse object indicated by the Hashtable
+ * parameter
+ * <p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public RegisterAppInterfaceResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Gets the version of the SDL&reg; SmartDeviceLink interface
+ *
+ * @return SdlMsgVersion -a SdlMsgVersion object representing version of
+ * the SDL&reg; SmartDeviceLink interface
+ */
+ /**
+ * Constructs a new RegisterAppInterfaceResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public RegisterAppInterfaceResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ @Override
+ public void format(com.smartdevicelink.util.Version rpcVersion, boolean formatParams){
+ //Add in 5.0.0 of the rpc spec
+ if(getIconResumed() == null){
+ setIconResumed(Boolean.FALSE);
+ }
+
+ List<ButtonCapabilities> capabilities = getButtonCapabilities();
+ if(capabilities != null){
+ List<ButtonCapabilities> additions = new ArrayList<>();
+ for(ButtonCapabilities capability : capabilities){
+ if(ButtonName.OK.equals(capability.getName())){
+ if(rpcVersion == null || rpcVersion.getMajor() < 5){
+ //If version is < 5, the play pause button must also be added
+ additions.add(new ButtonCapabilities(ButtonName.PLAY_PAUSE, capability.getShortPressAvailable(), capability.getLongPressAvailable(), capability.getUpDownAvailable()));
+ }
+ }
+ }
+ capabilities.addAll(additions);
+ setButtonCapabilities(capabilities);
+ }
+
+
+ super.format(rpcVersion,formatParams);
+ }
+
+ @SuppressWarnings("unchecked")
+ public SdlMsgVersion getSdlMsgVersion() {
+ return (SdlMsgVersion) getObject(SdlMsgVersion.class, KEY_SDL_MSG_VERSION);
+ }
+
+ /**
+ * Sets the version of the SDL&reg; SmartDeviceLink interface
+ *
+ * @param sdlMsgVersion
+ * a SdlMsgVersion object representing version of the SDL&reg;
+ * SmartDeviceLink interface
+ * <p></p>
+ * <b>Notes: </b>To be compatible, app msg major version number
+ * must be less than or equal to SDL&reg; major version number.
+ * If msg versions are incompatible, app has 20 seconds to
+ * attempt successful RegisterAppInterface (w.r.t. msg version)
+ * on underlying protocol session, else will be terminated. Major
+ * version number is a compatibility declaration. Minor version
+ * number indicates minor functional variations (e.g. features,
+ * capabilities, bug fixes) when sent from SDL&reg; to app (in
+ * RegisterAppInterface response). However, the minor version
+ * number sent from the app to SDL&reg; (in RegisterAppInterface
+ * request) is ignored by SDL&reg;
+ */
+ public void setSdlMsgVersion(SdlMsgVersion sdlMsgVersion) {
+ setParameters(KEY_SDL_MSG_VERSION, sdlMsgVersion);
+ }
+
+ /**
+ * Gets a Language enumeration indicating what language the application
+ * intends to use for user interaction (Display, TTS and VR)
+ *
+ * @return Enumeration -a language enumeration
+ */
+ public Language getLanguage() {
+ return (Language) getObject(Language.class, KEY_LANGUAGE);
+ }
+
+ /**
+ * Sets an enumeration indicating what language the application intends to
+ * use for user interaction (Display, TTS and VR)
+ *
+ * @param language
+ * a Language Enumeration
+ *
+ *
+ */
+ public void setLanguage(Language language) {
+ setParameters(KEY_LANGUAGE, language);
+ }
+
+ /**
+ * Gets an enumeration indicating what language the application intends to
+ * use for user interaction ( Display)
+ *
+ * @return Language - a Language value representing an enumeration
+ * indicating what language the application intends to use for user
+ * interaction ( Display)
+ * @since SmartDeviceLink 2.0
+ */
+ public Language getHmiDisplayLanguage() {
+ return (Language) getObject(Language.class, KEY_HMI_DISPLAY_LANGUAGE);
+ }
+
+ /**
+ * Sets an enumeration indicating what language the application intends to
+ * use for user interaction ( Display)
+ *
+ * @param hmiDisplayLanguage
+ * @since SmartDeviceLink 2.0
+ */
+ public void setHmiDisplayLanguage(Language hmiDisplayLanguage) {
+ setParameters(KEY_HMI_DISPLAY_LANGUAGE, hmiDisplayLanguage);
+ }
+
+ /**
+ * Gets getDisplayCapabilities set when application interface is registered.
+ *
+ * @return DisplayCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public DisplayCapabilities getDisplayCapabilities() {
+ return (DisplayCapabilities) getObject(DisplayCapabilities.class, KEY_DISPLAY_CAPABILITIES);
+ }
+ /**
+ * Sets Display Capabilities
+ * @param displayCapabilities
+ */
+ public void setDisplayCapabilities(DisplayCapabilities displayCapabilities) {
+ setParameters(KEY_DISPLAY_CAPABILITIES, displayCapabilities);
+ }
+
+ /**
+ * Gets buttonCapabilities set when application interface is registered.
+ *
+ * @return buttonCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<ButtonCapabilities> getButtonCapabilities() {
+ return (List<ButtonCapabilities>) getObject(ButtonCapabilities.class, KEY_BUTTON_CAPABILITIES);
+ }
+ /**
+ * Sets Button Capabilities
+ * @param buttonCapabilities
+ */
+ public void setButtonCapabilities(List<ButtonCapabilities> buttonCapabilities) {
+ setParameters(KEY_BUTTON_CAPABILITIES, buttonCapabilities);
+ }
+ /**
+ * Gets getSoftButtonCapabilities set when application interface is registered.
+ *
+ * @return SoftButtonCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButtonCapabilities> getSoftButtonCapabilities() {
+ return (List<SoftButtonCapabilities>) getObject(SoftButtonCapabilities.class, KEY_SOFT_BUTTON_CAPABILITIES);
+ }
+ /**
+ * Sets softButtonCapabilities
+ * @param softButtonCapabilities
+ */
+ public void setSoftButtonCapabilities(List<SoftButtonCapabilities> softButtonCapabilities) {
+ setParameters(KEY_SOFT_BUTTON_CAPABILITIES, softButtonCapabilities);
+ }
+
+ /**
+ * Gets getPresetBankCapabilities set when application interface is registered.
+ *
+ * @return PresetBankCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public PresetBankCapabilities getPresetBankCapabilities() {
+ return (PresetBankCapabilities) getObject(PresetBankCapabilities.class, KEY_PRESET_BANK_CAPABILITIES);
+ }
+ /**
+ * Sets presetBankCapabilities
+ * @param presetBankCapabilities
+ */
+ public void setPresetBankCapabilities(PresetBankCapabilities presetBankCapabilities) {
+ setParameters(KEY_PRESET_BANK_CAPABILITIES, presetBankCapabilities);
+ }
+
+ /**
+ * Gets hmiZoneCapabilities set when application interface is registered.
+ *
+ * @return HmiZoneCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<HmiZoneCapabilities> getHmiZoneCapabilities() {
+ return (List<HmiZoneCapabilities>) getObject(HmiZoneCapabilities.class, KEY_HMI_ZONE_CAPABILITIES);
+ }
+ /**
+ * Sets hmiZoneCapabilities
+ * @param hmiZoneCapabilities
+ */
+ public void setHmiZoneCapabilities(List<HmiZoneCapabilities> hmiZoneCapabilities) {
+ setParameters(KEY_HMI_ZONE_CAPABILITIES, hmiZoneCapabilities);
+ }
+
+ /**
+ * Gets speechCapabilities set when application interface is registered.
+ *
+ * @return SpeechCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<SpeechCapabilities> getSpeechCapabilities() {
+ Object speechCapabilities = getObject(SpeechCapabilities.class, KEY_SPEECH_CAPABILITIES);
+ if (speechCapabilities instanceof List<?>) {
+ return (List<SpeechCapabilities>) speechCapabilities;
+ } else if (speechCapabilities instanceof SpeechCapabilities) {
+ // this is a known issue observed with some core implementations
+ List<SpeechCapabilities> newSpeechCapList = new ArrayList<>();
+ newSpeechCapList.add((SpeechCapabilities) speechCapabilities);
+ return newSpeechCapList;
+ }
+ return null;
+ }
+ /**
+ * Sets speechCapabilities
+ * @param speechCapabilities
+ */
+ public void setSpeechCapabilities(List<SpeechCapabilities> speechCapabilities) {
+ setParameters(KEY_SPEECH_CAPABILITIES, speechCapabilities);
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public List<PrerecordedSpeech> getPrerecordedSpeech() {
+ return (List<PrerecordedSpeech>) getObject(PrerecordedSpeech.class, KEY_PRERECORDED_SPEECH);
+ }
+
+ public void setPrerecordedSpeech(List<PrerecordedSpeech> prerecordedSpeech) {
+ setParameters(KEY_PRERECORDED_SPEECH, prerecordedSpeech);
+ }
+
+
+ /**
+ * Gets vrCapabilities set when application interface is registered.
+ *
+ * @return VrCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<VrCapabilities> getVrCapabilities() {
+ return (List<VrCapabilities>) getObject(VrCapabilities.class, KEY_VR_CAPABILITIES);
+ }
+ /**
+ * Sets VrCapabilities
+ * @param vrCapabilities
+ */
+ public void setVrCapabilities(List<VrCapabilities> vrCapabilities) {
+ setParameters(KEY_VR_CAPABILITIES, vrCapabilities);
+ }
+
+ /**
+ * Gets getVehicleType set when application interface is registered.
+ *
+ * @return vehicleType
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleType getVehicleType() {
+ return (VehicleType) getObject(VehicleType.class, KEY_VEHICLE_TYPE);
+ }
+ /**
+ * Sets vehicleType
+ * @param vehicleType
+ */
+ public void setVehicleType(VehicleType vehicleType) {
+ setParameters(KEY_VEHICLE_TYPE, vehicleType);
+ }
+
+ /**
+ * Gets AudioPassThruCapabilities set when application interface is registered.
+ *
+ * @return AudioPassThruCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public List<AudioPassThruCapabilities> getAudioPassThruCapabilities() {
+ return (List<AudioPassThruCapabilities>) getObject(AudioPassThruCapabilities.class, KEY_AUDIO_PASS_THRU_CAPABILITIES);
+ }
+ /**
+ * Sets AudioPassThruCapabilities
+ * @param audioPassThruCapabilities
+ */
+ public void setAudioPassThruCapabilities(List<AudioPassThruCapabilities> audioPassThruCapabilities) {
+ setParameters(KEY_AUDIO_PASS_THRU_CAPABILITIES, audioPassThruCapabilities);
+ }
+
+ /**
+ * Gets pcmStreamingCapabilities set when application interface is registered.
+ *
+ * @return pcmStreamingCapabilities
+ */
+ @SuppressWarnings("unchecked")
+ public AudioPassThruCapabilities getPcmStreamingCapabilities() {
+ return (AudioPassThruCapabilities) getObject(AudioPassThruCapabilities.class, KEY_PCM_STREAM_CAPABILITIES);
+ }
+ /**
+ * Sets pcmStreamingCapabilities
+ * @param pcmStreamingCapabilities
+ */
+ public void setPcmStreamingCapabilities(AudioPassThruCapabilities pcmStreamingCapabilities) {
+ setParameters(KEY_PCM_STREAM_CAPABILITIES, pcmStreamingCapabilities);
+ }
+ public String getProxyVersionInfo() {
+ if (Version.VERSION != null)
+ return Version.VERSION;
+
+ return null;
+ }
+ public void setSupportedDiagModes(List<Integer> supportedDiagModes) {
+ setParameters(KEY_SUPPORTED_DIAG_MODES, supportedDiagModes);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Integer> getSupportedDiagModes() {
+ return (List<Integer>) getObject(Integer.class, KEY_SUPPORTED_DIAG_MODES);
+ }
+
+ public void setHmiCapabilities(HMICapabilities hmiCapabilities) {
+ setParameters(KEY_HMI_CAPABILITIES, hmiCapabilities);
+ }
+
+ @SuppressWarnings("unchecked")
+ public HMICapabilities getHmiCapabilities() {
+ return (HMICapabilities) getObject(HMICapabilities.class, KEY_HMI_CAPABILITIES);
+ }
+
+ public void setSdlVersion(String sdlVersion) {
+ setParameters(KEY_SDL_VERSION, sdlVersion);
+ }
+
+ public String getSdlVersion() {
+ return getString(KEY_SDL_VERSION);
+ }
+
+ public void setSystemSoftwareVersion(String systemSoftwareVersion) {
+ setParameters(KEY_SYSTEM_SOFTWARE_VERSION, systemSoftwareVersion);
+ }
+
+ public String getSystemSoftwareVersion() {
+ return getString(KEY_SYSTEM_SOFTWARE_VERSION);
+ }
+
+ /**
+ * Sets Icon Resumed Boolean
+ * @param iconResumed - if param not included, set to false
+ */
+ public void setIconResumed(Boolean iconResumed){
+ if(iconResumed == null){
+ iconResumed = false;
+ }
+ setParameters(KEY_ICON_RESUMED, iconResumed);
+ }
+
+ /**
+ * Tells developer whether or not their app icon has been resumed on core.
+ * @return boolean - true if icon was resumed, false if not
+ */
+ public Boolean getIconResumed() {
+ return getBoolean(KEY_ICON_RESUMED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RemoteControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RemoteControlCapabilities.java
new file mode 100644
index 000000000..4c9861101
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RemoteControlCapabilities.java
@@ -0,0 +1,158 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class RemoteControlCapabilities extends RPCStruct {
+ public static final String KEY_CLIMATE_CONTROL_CAPABILITIES = "climateControlCapabilities";
+ public static final String KEY_RADIO_CONTROL_CAPABILITIES = "radioControlCapabilities";
+ public static final String KEY_BUTTON_CAPABILITIES = "buttonCapabilities";
+ public static final String KEY_SEAT_CONTROL_CAPABILITIES = "seatControlCapabilities";
+ public static final String KEY_AUDIO_CONTROL_CAPABILITIES = "audioControlCapabilities";
+ public static final String KEY_HMI_SETTINGS_CONTROL_CAPABILITIES = "hmiSettingsControlCapabilities";
+ public static final String KEY_LIGHT_CONTROL_CAPABILITIES = "lightControlCapabilities";
+
+ public RemoteControlCapabilities() {
+ }
+
+ public RemoteControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the climateControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param climateControlCapabilities If included, the platform supports RC climate controls.
+ * For this baseline version, maxsize=1. i.e. only one climate control module is supported.
+ */
+ public void setClimateControlCapabilities(List<ClimateControlCapabilities> climateControlCapabilities) {
+ setValue(KEY_CLIMATE_CONTROL_CAPABILITIES, climateControlCapabilities);
+ }
+
+ /**
+ * Gets the climateControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return List<ClimateControlCapabilities>
+ * If included, the platform supports RC climate controls.
+ * For this baseline version, maxsize=1. i.e. only one climate control module is supported.
+ */
+ public List<ClimateControlCapabilities> getClimateControlCapabilities() {
+ return (List<ClimateControlCapabilities>) getObject(ClimateControlCapabilities.class, KEY_CLIMATE_CONTROL_CAPABILITIES);
+ }
+
+ /**
+ * Sets the radioControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param radioControlCapabilities If included, the platform supports RC climate controls.
+ * For this baseline version, maxsize=1. i.e. only one radio control module is supported.
+ */
+ public void setRadioControlCapabilities(List<RadioControlCapabilities> radioControlCapabilities) {
+ setValue(KEY_RADIO_CONTROL_CAPABILITIES, radioControlCapabilities);
+ }
+
+ /**
+ * Gets the radioControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return List<RadioControlCapabilities>
+ * If included, the platform supports RC climate controls.
+ * For this baseline version, maxsize=1. i.e. only one radio control module is supported.
+ */
+ public List<RadioControlCapabilities> getRadioControlCapabilities() {
+ return (List<RadioControlCapabilities>) getObject(RadioControlCapabilities.class, KEY_RADIO_CONTROL_CAPABILITIES);
+ }
+
+ /**
+ * Sets the buttonCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param buttonCapabilities If included, the platform supports RC button controls with the included button names.
+ */
+ public void setButtonCapabilities(List<ButtonCapabilities> buttonCapabilities) {
+ setValue(KEY_BUTTON_CAPABILITIES, buttonCapabilities);
+ }
+
+ /**
+ * Gets the buttonCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return List<ButtonCapabilities>
+ * If included, the platform supports RC button controls with the included button names.
+ */
+ public List<ButtonCapabilities> getButtonCapabilities() {
+ return (List<ButtonCapabilities>) getObject(ButtonCapabilities.class, KEY_BUTTON_CAPABILITIES);
+ }
+
+ /**
+ * Sets the seatControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param seatControlCapabilities If included, the platform supports seat controls.
+ */
+ public void setSeatControlCapabilities(List<SeatControlCapabilities> seatControlCapabilities) {
+ setValue(KEY_SEAT_CONTROL_CAPABILITIES, seatControlCapabilities);
+ }
+
+ /**
+ * Gets the seatControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return List<SeatControlCapabilities>
+ * If included, the platform supports seat controls.
+ */
+ public List<SeatControlCapabilities> getSeatControlCapabilities() {
+ return (List<SeatControlCapabilities>) getObject(SeatControlCapabilities.class, KEY_SEAT_CONTROL_CAPABILITIES);
+ }
+
+ /**
+ * Sets the audioControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param audioControlCapabilities If included, the platform supports audio controls.
+ */
+ public void setAudioControlCapabilities(List<AudioControlCapabilities> audioControlCapabilities) {
+ setValue(KEY_AUDIO_CONTROL_CAPABILITIES, audioControlCapabilities);
+ }
+
+ /**
+ * Gets the audioControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return List<AudioControlCapabilities>
+ * If included, the platform supports audio controls.
+ */
+ public List<AudioControlCapabilities> getAudioControlCapabilities() {
+ return (List<AudioControlCapabilities>) getObject(AudioControlCapabilities.class, KEY_AUDIO_CONTROL_CAPABILITIES);
+ }
+
+ /**
+ * Sets the hmiSettingsControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param hmiSettingsControlCapabilities If included, the platform supports hmi setting controls.
+ */
+ public void setHmiSettingsControlCapabilities(HMISettingsControlCapabilities hmiSettingsControlCapabilities) {
+ setValue(KEY_HMI_SETTINGS_CONTROL_CAPABILITIES, hmiSettingsControlCapabilities);
+ }
+
+ /**
+ * Gets the hmiSettingsControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return HMISettingsControlCapabilities - If included, the platform supports hmi setting controls.
+ */
+ public HMISettingsControlCapabilities getHmiSettingsControlCapabilities() {
+ return (HMISettingsControlCapabilities) getObject(HMISettingsControlCapabilities.class, KEY_HMI_SETTINGS_CONTROL_CAPABILITIES);
+ }
+
+ /**
+ * Sets the lightControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @param lightControlCapabilities If included, the platform supports light controls.
+ */
+ public void setLightControlCapabilities(LightControlCapabilities lightControlCapabilities) {
+ setValue(KEY_LIGHT_CONTROL_CAPABILITIES, lightControlCapabilities);
+ }
+
+ /**
+ * Gets the lightControlCapabilities portion of the RemoteControlCapabilities class
+ *
+ * @return LightControlCapabilities - If included, the platform supports light controls.
+ */
+ public LightControlCapabilities getLightControlCapabilities() {
+ return (LightControlCapabilities) getObject(LightControlCapabilities.class, KEY_LIGHT_CONTROL_CAPABILITIES);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalProperties.java
new file mode 100644
index 000000000..2adb03ec1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalProperties.java
@@ -0,0 +1,115 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.GlobalProperty;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Resets the passed global properties to their default values as defined by
+ * SDL
+ * <p></p>
+ * The HELPPROMPT global property default value is generated by SDL consists of
+ * the first vrCommand of each Command Menu item defined at the moment PTT is
+ * pressed
+ * <p>The TIMEOUTPROMPT global property default value is the same as the HELPPROMPT
+ * global property default value</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>properties</td>
+ * <td>GlobalProperty</td>
+ * <td>An array of one or more GlobalProperty enumeration elements indicating which global properties to reset to their default value.</td>
+ * <td>Y</td>
+ * <td>Array must have at least one element.; minsize:1; maxsize:100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ *
+ * </table>
+ * <p><b>Response</b></p>
+ *
+ * <p>Indicates whether the Global Properties were successfully set to their default values.</p>
+ *
+ * <p><b>Non-default Result Codes:</b></p>
+ *
+ * <p> SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR </p>
+ * <p> REJECTED </p>
+ * <p>DISALLOWED </p>
+ * @since SmartDeviceLink 1.0
+ * @see SetGlobalProperties
+ */
+public class ResetGlobalProperties extends RPCRequest {
+ public static final String KEY_PROPERTIES = "properties";
+ /**
+ * Constructs a new ResetGlobalProperties object
+ */
+ public ResetGlobalProperties() {
+ super(FunctionID.RESET_GLOBAL_PROPERTIES.toString());
+ }
+ /**
+ * Constructs a new ResetGlobalProperties object indicated by the Hashtable
+ * parameter
+ *
+ * @param hash The Hashtable to use
+ */
+ public ResetGlobalProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ResetGlobalProperties object
+ * @param properties a List<GlobalProperty> An array of one or more
+ * GlobalProperty enumeration elements indicating which global
+ * properties to reset to their default value <br>
+ * <b>Notes: </b>Array must have at least one element
+ */
+ public ResetGlobalProperties(@NonNull List<GlobalProperty> properties) {
+ this();
+ setProperties(properties);
+ }
+ /**
+ * Gets an array of one or more GlobalProperty enumeration elements
+ * indicating which global properties to reset to their default value
+ *
+ * @return List<GlobalProperty> -an array of one or more GlobalProperty
+ * enumeration elements
+ */
+ @SuppressWarnings("unchecked")
+ public List<GlobalProperty> getProperties() {
+ return (List<GlobalProperty>) getObject(GlobalProperty.class, KEY_PROPERTIES);
+ }
+ /**
+ * Sets an array of one or more GlobalProperty enumeration elements
+ * indicating which global properties to reset to their default value
+ *
+ * @param properties
+ * a List<GlobalProperty> An array of one or more
+ * GlobalProperty enumeration elements indicating which global
+ * properties to reset to their default value
+ * <p></p>
+ * <b>Notes: </b>Array must have at least one element
+ */
+ public void setProperties(@NonNull List<GlobalProperty> properties ) {
+ setParameters(KEY_PROPERTIES, properties);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalPropertiesResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalPropertiesResponse.java
new file mode 100644
index 000000000..78f245ea8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ResetGlobalPropertiesResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Reset Global Properties Response is sent, when ResetGlobalProperties has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class ResetGlobalPropertiesResponse extends RPCResponse {
+
+ /**
+ * Constructs a new ResetGlobalPropertiesResponse object
+ */
+ public ResetGlobalPropertiesResponse() {
+ super(FunctionID.RESET_GLOBAL_PROPERTIES.toString());
+ }
+
+ /**
+ * Constructs a new ResetGlobalPropertiesResponse object indicated by the Hashtable
+ * parameter
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ResetGlobalPropertiesResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ResetGlobalPropertiesResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ResetGlobalPropertiesResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ScreenParams.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScreenParams.java
new file mode 100644
index 000000000..e9a3168e7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScreenParams.java
@@ -0,0 +1,87 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/** The resolution of the prescribed screen area.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>resolution</td>
+ * <td>ImageResolution</td>
+ * <td>The resolution of the prescribed screen area.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>touchEventAvailable</td>
+ * <td>TouchEventCapabilities</td>
+ * <td>Types of screen touch events available in screen area.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ *
+ * </table>
+ * @since SmartDeviceLink 2.3.2
+ *
+ */
+
+public class ScreenParams extends RPCStruct {
+ public static final String KEY_RESOLUTION = "resolution";
+ public static final String KEY_TOUCH_EVENT_AVAILABLE = "touchEventAvailable";
+ /**
+ * Constructs a new ScreenParams object
+ */
+
+ public ScreenParams() { }
+ /**
+ * <p>
+ * Constructs a new ScreenParamst object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public ScreenParams(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ScreenParams object
+ */
+
+ public ScreenParams(@NonNull ImageResolution resolution) {
+ this();
+ setImageResolution(resolution);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ImageResolution getImageResolution() {
+ return (ImageResolution) getObject(ImageResolution.class, KEY_RESOLUTION);
+ }
+ public void setImageResolution( @NonNull ImageResolution resolution ) {
+ setValue(KEY_RESOLUTION, resolution);
+ }
+ @SuppressWarnings("unchecked")
+ public TouchEventCapabilities getTouchEventAvailable() {
+ return (TouchEventCapabilities) getObject(TouchEventCapabilities.class, KEY_TOUCH_EVENT_AVAILABLE);
+ }
+ public void setTouchEventAvailable( TouchEventCapabilities touchEventAvailable ) {
+ setValue(KEY_TOUCH_EVENT_AVAILABLE, touchEventAvailable);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessage.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessage.java
new file mode 100644
index 000000000..2ee1230f7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessage.java
@@ -0,0 +1,170 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Creates a full screen overlay containing a large block of formatted text that
+ * can be scrolled with up to 8 SoftButtons defined
+ *
+ * <p>Function Group: ScrollableMessage</p>
+ *
+ * <p><b>HMILevel needs to be FULL</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>scrollableMessageBody</td>
+ * <td>String</td>
+ * <td>Body of text that can include newlines and tabs.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDevice Link 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>timeout</td>
+ * <td>Integer</td>
+ * <td>App defined timeout. Indicates how long of a timeout from the last action (i.e. scrolling message resets timeout).</td>
+ * <td>N</td>
+ * <td>minvalue=1000; maxvalue=65535; defvalue=30000</td>
+ * <td>SmartDevice Link 1.0 </td>
+ * </tr>
+ * <tr>
+ * <td>softButtons</td>
+ * <td>SoftButton</td>
+ * <td>App defined SoftButtons. If omitted on supported displays, only the system defined "Close" SoftButton will be displayed.</td>
+ * <td>N</td>
+ * <td>minsize=0; maxsize=8</td>
+ * <td>SmartDevice Link 1.0 </td>
+ * </tr>
+ * </table>
+ * <p> <b>Response</b></p>
+ *<b>Non-default Result Codes:</b>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA </p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>CHAR_LIMIT_EXCEEDED</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR </p>
+ * <p>DISALLOWED</p>
+ * <p>UNSUPPORTED_RESOURCE</p>
+ * <p>REJECTED </p>
+ * <p>ABORTED</p>
+ *
+ * @see scrollableMessageBody
+ * @see TextFieldName
+ */
+public class ScrollableMessage extends RPCRequest {
+ public static final String KEY_SCROLLABLE_MESSAGE_BODY = "scrollableMessageBody";
+ public static final String KEY_TIMEOUT = "timeout";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+
+ /**
+ * Constructs a new ScrollableMessage object
+ */
+ public ScrollableMessage() {
+ super(FunctionID.SCROLLABLE_MESSAGE.toString());
+ }
+
+ /**
+ * Constructs a new ScrollableMessage object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public ScrollableMessage(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ScrollableMessage object
+ * @param scrollableMessageBody a String value representing the Body of text that can include newlines and tabs <br>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public ScrollableMessage(@NonNull String scrollableMessageBody) {
+ this();
+ setScrollableMessageBody(scrollableMessageBody);
+ }
+
+ /**
+ * Sets a Body of text that can include newlines and tabs
+ *
+ * @param scrollableMessageBody
+ * a String value representing the Body of text that can include
+ * newlines and tabs
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setScrollableMessageBody(@NonNull String scrollableMessageBody) {
+ setParameters(KEY_SCROLLABLE_MESSAGE_BODY, scrollableMessageBody);
+ }
+
+ /**
+ * Gets a Body of text that can include newlines and tabs
+ *
+ * @return String -a String value
+ */
+ public String getScrollableMessageBody() {
+ return getString(KEY_SCROLLABLE_MESSAGE_BODY);
+ }
+
+ /**
+ * Sets an App defined timeout. Indicates how long of a timeout from the
+ * last action
+ *
+ * @param timeout
+ * an Integer value representing an App defined timeout
+ * <p></p>
+ * <b>Notes</b>:Minval=0; Maxval=65535;Default=30000
+ */
+ public void setTimeout(Integer timeout) {
+ setParameters(KEY_TIMEOUT, timeout);
+ }
+
+ /**
+ * Gets an App defined timeout
+ *
+ * @return Integer -an Integer value representing an App defined timeout
+ */
+ public Integer getTimeout() {
+ return getInteger(KEY_TIMEOUT);
+ }
+
+ /**
+ * Sets App defined SoftButtons.If omitted on supported displays, only the
+ * system defined "Close" SoftButton will be displayed
+ *
+ * @param softButtons
+ * a List<SoftButton> value representing App defined
+ * SoftButtons
+ * <p></p>
+ * <b>Notes: </b>Minsize=0, Maxsize=8
+ */
+ public void setSoftButtons(List<SoftButton> softButtons) {
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+
+ /**
+ * Gets App defined soft button
+ * @return List -List<SoftButton> value
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons() {
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessageResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessageResponse.java
new file mode 100644
index 000000000..2113e3095
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ScrollableMessageResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Scrollable Message Response is sent, when ScrollableMessage has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ScrollableMessageResponse extends RPCResponse {
+
+ /**
+ * Constructs a new ScrollableMessageResponse object
+ */
+ public ScrollableMessageResponse() {
+ super(FunctionID.SCROLLABLE_MESSAGE.toString());
+ }
+
+ /**
+ * Constructs a new ScrollableMessageResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ScrollableMessageResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new ScrollableMessageResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ScrollableMessageResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SdlMsgVersion.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SdlMsgVersion.java
new file mode 100644
index 000000000..3e1637e22
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SdlMsgVersion.java
@@ -0,0 +1,148 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>majorVersion</td>
+ * <td>Integer</td>
+ * <td>
+ * <ul>
+ * <li>minvalue="1"</li>
+ * <li>maxvalue="10"</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>minorVersion</td>
+ * <td>Integer</td>
+ * <td>
+ * <ul>
+ * <li>minvalue="0"</li>
+ * <li>maxvalue="1000"</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ */
+public class SdlMsgVersion extends RPCStruct {
+ public static final String KEY_MAJOR_VERSION = "majorVersion";
+ public static final String KEY_MINOR_VERSION = "minorVersion";
+ public static final String KEY_PATCH_VERSION = "patchVersion";
+
+ /**
+ * Constructs a newly allocated SdlMsgVersion object
+ */
+ public SdlMsgVersion() { }
+ /**
+ * Constructs a newly allocated SdlMsgVersion object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public SdlMsgVersion(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Get major version
+ * <ul>
+ * <li>minvalue="1"</li>
+ * <li>maxvalue="10"</li>
+ * </ul>
+ * @return the major version
+ */
+ /**
+ * Constructs a newly allocated SdlMsgVersion object
+ * @param majorVersion minvalue="1" and maxvalue="10"
+ * @param minorVersion min: 0; max: 1000
+ */
+ public SdlMsgVersion(@NonNull Integer majorVersion, @NonNull Integer minorVersion) {
+ this();
+ setMajorVersion(majorVersion);
+ setMinorVersion(minorVersion);
+
+ }
+
+ @Override
+ public void format(com.smartdevicelink.util.Version rpcVersion, boolean formatParams) {
+ if(getPatchVersion() == null){
+ setPatchVersion(0);
+ }
+ super.format(rpcVersion,formatParams);
+ }
+
+ public Integer getMajorVersion() {
+ return getInteger( KEY_MAJOR_VERSION );
+ }
+ /**
+ * Set major version
+ * <ul>
+ * <li>minvalue="1"</li>
+ * <li>maxvalue="10"</li>
+ * </ul>
+ * @param majorVersion minvalue="1" and maxvalue="10"
+ */
+ public void setMajorVersion( @NonNull Integer majorVersion ) {
+ setValue(KEY_MAJOR_VERSION, majorVersion);
+ }
+ /**
+ * Get minor version
+ * <ul>
+ * <li>minvalue="0"</li>
+ * <li>maxvalue="1000"</li>
+ * </ul>
+ * @return the minor version
+ */
+ public Integer getMinorVersion() {
+ return getInteger( KEY_MINOR_VERSION );
+ }
+ /**
+ * Set minor version
+ * <ul>
+ * <li>minvalue="0"</li>
+ * <li>maxvalue="1000"</li>
+ * </ul>
+ * @param minorVersion min: 0; max: 1000
+ */
+ public void setMinorVersion( @NonNull Integer minorVersion ) {
+ setValue(KEY_MINOR_VERSION, minorVersion);
+ }
+
+ /**
+ * Get patch version
+ * <ul>
+ * <li>minvalue="0"</li>
+ * <li>maxvalue="1000"</li>
+ * </ul>
+ * @return the patch version
+ */
+ public Integer getPatchVersion() {
+ return getInteger( KEY_PATCH_VERSION );
+ }
+ /**
+ * Set patch version
+ * <ul>
+ * <li>minvalue="0"</li>
+ * <li>maxvalue="1000"</li>
+ * </ul>
+ * @param patchVersion min: 0; max: 1000
+ */
+ public void setPatchVersion( Integer patchVersion ) {
+ setValue(KEY_PATCH_VERSION, patchVersion);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlCapabilities.java
new file mode 100644
index 000000000..e1d488cb5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlCapabilities.java
@@ -0,0 +1,339 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class SeatControlCapabilities extends RPCStruct {
+ public static final String KEY_MODULE_NAME = "moduleName";
+ public static final String KEY_HEATING_ENABLED_AVAILABLE = "heatingEnabledAvailable";
+ public static final String KEY_COOLING_ENABLED_AVAILABLE = "coolingEnabledAvailable";
+ public static final String KEY_HEATING_LEVEL_AVAILABLE = "heatingLevelAvailable";
+ public static final String KEY_COOLING_LEVEL_AVAILABLE = "coolingLevelAvailable";
+ public static final String KEY_HORIZONTAL_POSITION_AVAILABLE = "horizontalPositionAvailable";
+ public static final String KEY_VERTICAL_POSITION_AVAILABLE = "verticalPositionAvailable";
+ public static final String KEY_FRONT_VERTICAL_POSITION_AVAILABLE = "frontVerticalPositionAvailable";
+ public static final String KEY_BACK_VERTICAL_POSITION_AVAILABLE = "backVerticalPositionAvailable";
+ public static final String KEY_BACK_TILT_ANGLE_AVAILABLE = "backTiltAngleAvailable";
+ public static final String KEY_HEAD_SUPPORT_HORIZONTAL_POSITION_AVAILABLE = "headSupportHorizontalPositionAvailable";
+ public static final String KEY_HEAD_SUPPORT_VERTICAL_POSITION_AVAILABLE = "headSupportVerticalPositionAvailable";
+ public static final String KEY_MASSAGE_ENABLED_AVAILABLE = "massageEnabledAvailable";
+ public static final String KEY_MASSAGE_MODE_AVAILABLE = "massageModeAvailable";
+ public static final String KEY_MASSAGE_CUSHION_FIRMNESS_AVAILABLE = "massageCushionFirmnessAvailable";
+ public static final String KEY_MEMORY_AVAILABLE = "memoryAvailable";
+
+ /**
+ * Constructs a new SeatControlCapabilities object
+ */
+ public SeatControlCapabilities() {
+ }
+
+ /**
+ * <p>Constructs a new SeatControlCapabilities object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SeatControlCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated SeatControlCapabilities object
+ * @param moduleName short friendly name of the light control module.
+ */
+ public SeatControlCapabilities(@NonNull String moduleName) {
+ this();
+ setModuleName(moduleName);
+ }
+
+ /**
+ * Get the moduleName portion of the SeatControlCapabilities class
+ *
+ * @return String
+ */
+ public String getModuleName() {
+ return getString(KEY_MODULE_NAME);
+ }
+
+ /**
+ * Sets the moduleName portion of the SeatControlCapabilities class
+ *
+ * @param moduleName - The short friendly name of the light control module. It should not be used to identify a module by mobile application.
+ */
+ public void setModuleName(@NonNull String moduleName) {
+ setValue(KEY_MODULE_NAME, moduleName);
+ }
+
+ /**
+ * Sets the heatingEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @param heatingEnabledAvailable
+ */
+ public void setHeatingEnabledAvailable(Boolean heatingEnabledAvailable) {
+ setValue(KEY_HEATING_ENABLED_AVAILABLE, heatingEnabledAvailable);
+ }
+
+ /**
+ * Gets the heatingEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHeatingEnabledAvailable() {
+ return getBoolean(KEY_HEATING_ENABLED_AVAILABLE);
+ }
+
+ /**
+ * Sets the coolingEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @param coolingEnabledAvailable
+ */
+ public void setCoolingEnabledAvailable(Boolean coolingEnabledAvailable) {
+ setValue(KEY_COOLING_ENABLED_AVAILABLE, coolingEnabledAvailable);
+ }
+
+ /**
+ * Gets the coolingEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getCoolingEnabledAvailable() {
+ return getBoolean(KEY_COOLING_ENABLED_AVAILABLE);
+ }
+
+ /**
+ * Sets the heatingLevelAvailable portion of the SeatControlCapabilities class
+ *
+ * @param heatingLevelAvailable
+ */
+ public void setHeatingLevelAvailable(Boolean heatingLevelAvailable) {
+ setValue(KEY_HEATING_LEVEL_AVAILABLE, heatingLevelAvailable);
+ }
+
+ /**
+ * Gets the heatingLevelAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHeatingLevelAvailable() {
+ return getBoolean(KEY_HEATING_LEVEL_AVAILABLE);
+ }
+
+ /**
+ * Sets the coolingLevelAvailable portion of the SeatControlCapabilities class
+ *
+ * @param coolingLevelAvailable
+ */
+ public void setCoolingLevelAvailable(Boolean coolingLevelAvailable) {
+ setValue(KEY_COOLING_LEVEL_AVAILABLE, coolingLevelAvailable);
+ }
+
+ /**
+ * Gets the coolingLevelAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getCoolingLevelAvailable() {
+ return getBoolean(KEY_COOLING_LEVEL_AVAILABLE);
+ }
+
+ /**
+ * Sets the horizontalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param horizontalPositionAvailable
+ */
+ public void setHorizontalPositionAvailable(Boolean horizontalPositionAvailable) {
+ setValue(KEY_HORIZONTAL_POSITION_AVAILABLE, horizontalPositionAvailable);
+ }
+
+ /**
+ * Gets the horizontalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHorizontalPositionAvailable() {
+ return getBoolean(KEY_HORIZONTAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the verticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param verticalPositionAvailable
+ */
+ public void setVerticalPositionAvailable(Boolean verticalPositionAvailable) {
+ setValue(KEY_VERTICAL_POSITION_AVAILABLE, verticalPositionAvailable);
+ }
+
+ /**
+ * Gets the verticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getVerticalPositionAvailable() {
+ return getBoolean(KEY_VERTICAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the frontVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param frontVerticalPositionAvailable
+ */
+ public void setFrontVerticalPositionAvailable(Boolean frontVerticalPositionAvailable) {
+ setValue(KEY_FRONT_VERTICAL_POSITION_AVAILABLE, frontVerticalPositionAvailable);
+ }
+
+ /**
+ * Gets the frontVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getFrontVerticalPositionAvailable() {
+ return getBoolean(KEY_FRONT_VERTICAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the backVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param backVerticalPositionAvailable
+ */
+ public void setBackVerticalPositionAvailable(Boolean backVerticalPositionAvailable) {
+ setValue(KEY_BACK_VERTICAL_POSITION_AVAILABLE, backVerticalPositionAvailable);
+ }
+
+ /**
+ * Gets the backVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getBackVerticalPositionAvailable() {
+ return getBoolean(KEY_BACK_VERTICAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the backTiltAngleAvailable portion of the SeatControlCapabilities class
+ *
+ * @param backTiltAngleAvailable
+ */
+ public void setBackTiltAngleAvailable(Boolean backTiltAngleAvailable) {
+ setValue(KEY_BACK_TILT_ANGLE_AVAILABLE, backTiltAngleAvailable);
+ }
+
+ /**
+ * Gets the backTiltAngleAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getBackTiltAngleAvailable() {
+ return getBoolean(KEY_BACK_TILT_ANGLE_AVAILABLE);
+ }
+
+ /**
+ * Sets the headSupportHorizontalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param headSupportHorizontalPositionAvailable
+ */
+ public void setHeadSupportHorizontalPositionAvailable(Boolean headSupportHorizontalPositionAvailable) {
+ setValue(KEY_HEAD_SUPPORT_HORIZONTAL_POSITION_AVAILABLE, headSupportHorizontalPositionAvailable);
+ }
+
+ /**
+ * Gets the headSupportHorizontalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHeadSupportHorizontalPositionAvailable() {
+ return getBoolean(KEY_HEAD_SUPPORT_HORIZONTAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the headSupportVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @param headSupportVerticalPositionAvailable
+ */
+ public void setHeadSupportVerticalPositionAvailable(Boolean headSupportVerticalPositionAvailable) {
+ setValue(KEY_HEAD_SUPPORT_VERTICAL_POSITION_AVAILABLE, headSupportVerticalPositionAvailable);
+ }
+
+ /**
+ * Gets the headSupportVerticalPositionAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHeadSupportVerticalPositionAvailable() {
+ return getBoolean(KEY_HEAD_SUPPORT_VERTICAL_POSITION_AVAILABLE);
+ }
+
+ /**
+ * Sets the massageEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @param massageEnabledAvailable
+ */
+ public void setMassageEnabledAvailable(Boolean massageEnabledAvailable) {
+ setValue(KEY_MASSAGE_ENABLED_AVAILABLE, massageEnabledAvailable);
+ }
+
+ /**
+ * Gets the massageEnabledAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getMassageEnabledAvailable() {
+ return getBoolean(KEY_MASSAGE_ENABLED_AVAILABLE);
+ }
+
+ /**
+ * Sets the massageModeAvailable portion of the SeatControlCapabilities class
+ *
+ * @param massageModeAvailable
+ */
+ public void setMassageModeAvailable(Boolean massageModeAvailable) {
+ setValue(KEY_MASSAGE_MODE_AVAILABLE, massageModeAvailable);
+ }
+
+ /**
+ * Gets the massageModeAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getMassageModeAvailable() {
+ return getBoolean(KEY_MASSAGE_MODE_AVAILABLE);
+ }
+
+ /**
+ * Sets the massageCushionFirmnessAvailable portion of the SeatControlCapabilities class
+ *
+ * @param massageCushionFirmnessAvailable
+ */
+ public void setMassageCushionFirmnessAvailable(Boolean massageCushionFirmnessAvailable) {
+ setValue(KEY_MASSAGE_CUSHION_FIRMNESS_AVAILABLE, massageCushionFirmnessAvailable);
+ }
+
+ /**
+ * Gets the massageCushionFirmnessAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getMassageCushionFirmnessAvailable() {
+ return getBoolean(KEY_MASSAGE_CUSHION_FIRMNESS_AVAILABLE);
+ }
+
+ /**
+ * Sets the memoryAvailable portion of the SeatControlCapabilities class
+ *
+ * @param memoryAvailable
+ */
+ public void setMemoryAvailable(Boolean memoryAvailable) {
+ setValue(KEY_MEMORY_AVAILABLE, memoryAvailable);
+ }
+
+ /**
+ * Gets the memoryAvailable portion of the SeatControlCapabilities class
+ *
+ * @return Boolean.
+ */
+ public Boolean getMemoryAvailable() {
+ return getBoolean(KEY_MEMORY_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlData.java
new file mode 100644
index 000000000..26d52d713
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatControlData.java
@@ -0,0 +1,347 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.SupportedSeat;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Seat control data corresponds to "SEAT" ModuleType.
+ */
+public class SeatControlData extends RPCStruct {
+ public static final String KEY_ID = "id";
+ public static final String KEY_HEATING_ENABLED = "heatingEnabled";
+ public static final String KEY_COOLING_ENABLED = "coolingEnabled";
+ public static final String KEY_HEATING_LEVEL = "heatingLevel";
+ public static final String KEY_COOLING_LEVEL = "coolingLevel";
+ public static final String KEY_HORIZONTAL_POSITION = "horizontalPosition";
+ public static final String KEY_VERTICAL_POSITION = "verticalPosition";
+ public static final String KEY_FRONT_VERTICAL_POSITION = "frontVerticalPosition";
+ public static final String KEY_BACK_VERTICAL_POSITION = "backVerticalPosition";
+ public static final String KEY_BACK_TILT_ANGLE = "backTiltAngle";
+ public static final String KEY_HEAD_SUPPORT_HORIZONTAL_POSITION = "headSupportHorizontalPosition";
+ public static final String KEY_HEAD_SUPPORT_VERTICAL_POSITION = "headSupportVerticalPosition";
+ public static final String KEY_MASSAGE_ENABLED = "massageEnabled";
+ public static final String KEY_MASSAGE_MODE = "massageMode";
+ public static final String KEY_MASSAGE_CUSHION_FIRMNESS = "massageCushionFirmness";
+ public static final String KEY_MEMORY = "memory";
+
+ /**
+ * Constructs a new SeatControlData object
+ */
+ public SeatControlData() {
+ }
+
+ /**
+ * <p>Constructs a new SeatControlData object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SeatControlData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated SeatControlData object
+ * @param id type of SupportedSeat.
+ */
+ public SeatControlData(@NonNull SupportedSeat id) {
+ this();
+ setId(id);
+ }
+
+ /**
+ * Sets the id portion of the SeatControlData class
+ *
+ * @param id
+ */
+ public void setId(@NonNull SupportedSeat id) {
+ setValue(KEY_ID, id);
+ }
+
+ /**
+ * Gets the id portion of the SeatControlData class
+ *
+ * @return SupportedSeat.
+ */
+ public SupportedSeat getId() {
+ return (SupportedSeat) getObject(SupportedSeat.class, KEY_ID);
+ }
+
+ /**
+ * Sets the heatingEnabled portion of the SeatControlData class
+ *
+ * @param heatingEnabled
+ */
+ public void setHeatingEnabled(Boolean heatingEnabled) {
+ setValue(KEY_HEATING_ENABLED, heatingEnabled);
+ }
+
+ /**
+ * Gets the heatingEnabled portion of the SeatControlData class
+ *
+ * @return Boolean.
+ */
+ public Boolean getHeatingEnabled() {
+ return getBoolean(KEY_HEATING_ENABLED);
+ }
+
+ /**
+ * Sets the coolingEnabled portion of the SeatControlData class
+ *
+ * @param coolingEnabled
+ */
+ public void setCoolingEnabled(Boolean coolingEnabled) {
+ setValue(KEY_COOLING_ENABLED, coolingEnabled);
+ }
+
+ /**
+ * Gets the coolingEnabled portion of the SeatControlData class
+ *
+ * @return Boolean.
+ */
+ public Boolean getCoolingEnabled() {
+ return getBoolean(KEY_COOLING_ENABLED);
+ }
+
+ /**
+ * Sets the heatingLevel portion of the SeatControlData class
+ *
+ * @param heatingLevel
+ */
+ public void setHeatingLevel(Integer heatingLevel) {
+ setValue(KEY_HEATING_LEVEL, heatingLevel);
+ }
+
+ /**
+ * Gets the heatingLevel portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getHeatingLevel() {
+ return getInteger(KEY_HEATING_LEVEL);
+ }
+
+ /**
+ * Sets the coolingLevel portion of the SeatControlData class
+ *
+ * @param coolingLevel
+ */
+ public void setCoolingLevel(Integer coolingLevel) {
+ setValue(KEY_COOLING_LEVEL, coolingLevel);
+ }
+
+ /**
+ * Gets the coolingLevel portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getCoolingLevel() {
+ return getInteger(KEY_COOLING_LEVEL);
+ }
+
+ /**
+ * Sets the horizontalPosition portion of the SeatControlData class
+ *
+ * @param horizontalPosition
+ */
+ public void setHorizontalPosition(Integer horizontalPosition) {
+ setValue(KEY_HORIZONTAL_POSITION, horizontalPosition);
+ }
+
+ /**
+ * Gets the horizontalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getHorizontalPosition() {
+ return getInteger(KEY_HORIZONTAL_POSITION);
+ }
+
+ /**
+ * Sets the verticalPosition portion of the SeatControlData class
+ *
+ * @param verticalPosition
+ */
+ public void setVerticalPosition(Integer verticalPosition) {
+ setValue(KEY_VERTICAL_POSITION, verticalPosition);
+ }
+
+ /**
+ * Gets the verticalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getVerticalPosition() {
+ return getInteger(KEY_VERTICAL_POSITION);
+ }
+
+ /**
+ * Sets the frontVerticalPosition portion of the SeatControlData class
+ *
+ * @param frontVerticalPosition
+ */
+ public void setFrontVerticalPosition(Integer frontVerticalPosition) {
+ setValue(KEY_FRONT_VERTICAL_POSITION, frontVerticalPosition);
+ }
+
+ /**
+ * Gets the frontVerticalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getFrontVerticalPosition() {
+ return getInteger(KEY_FRONT_VERTICAL_POSITION);
+ }
+
+ /**
+ * Sets the backVerticalPosition portion of the SeatControlData class
+ *
+ * @param backVerticalPosition
+ */
+ public void setBackVerticalPosition(Integer backVerticalPosition) {
+ setValue(KEY_BACK_VERTICAL_POSITION, backVerticalPosition);
+ }
+
+ /**
+ * Gets the backVerticalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getBackVerticalPosition() {
+ return getInteger(KEY_BACK_VERTICAL_POSITION);
+ }
+
+ /**
+ * Sets the backTiltAngle portion of the SeatControlData class
+ *
+ * @param backTiltAngle
+ */
+ public void setBackTiltAngle(Integer backTiltAngle) {
+ setValue(KEY_BACK_TILT_ANGLE, backTiltAngle);
+ }
+
+ /**
+ * Gets the backTiltAngle portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getBackTiltAngle() {
+ return getInteger(KEY_BACK_TILT_ANGLE);
+ }
+
+ /**
+ * Sets the headSupportHorizontalPosition portion of the SeatControlData class
+ *
+ * @param headSupportHorizontalPosition
+ */
+ public void setHeadSupportHorizontalPosition(Integer headSupportHorizontalPosition) {
+ setValue(KEY_HEAD_SUPPORT_HORIZONTAL_POSITION, headSupportHorizontalPosition);
+ }
+
+ /**
+ * Gets the headSupportHorizontalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getHeadSupportHorizontalPosition() {
+ return getInteger(KEY_HEAD_SUPPORT_HORIZONTAL_POSITION);
+ }
+
+ /**
+ * Sets the headSupportVerticalPosition portion of the SeatControlData class
+ *
+ * @param headSupportVerticalPosition
+ */
+ public void setHeadSupportVerticalPosition(Integer headSupportVerticalPosition) {
+ setValue(KEY_HEAD_SUPPORT_VERTICAL_POSITION, headSupportVerticalPosition);
+ }
+
+ /**
+ * Gets the headSupportVerticalPosition portion of the SeatControlData class
+ *
+ * @return Integer
+ */
+ public Integer getHeadSupportVerticalPosition() {
+ return getInteger(KEY_HEAD_SUPPORT_VERTICAL_POSITION);
+ }
+
+ /**
+ * Sets the massageEnabled portion of the SeatControlData class
+ *
+ * @param massageEnabled
+ */
+ public void setMassageEnabled(Boolean massageEnabled) {
+ setValue(KEY_MASSAGE_ENABLED, massageEnabled);
+ }
+
+ /**
+ * Gets the massageEnabled portion of the SeatControlData class
+ *
+ * @return Boolean.
+ */
+ public Boolean getMassageEnabled() {
+ return getBoolean(KEY_MASSAGE_ENABLED);
+ }
+
+ /**
+ * Gets the List<MassageModeData> portion of the SeatControlData class
+ *
+ * @return List<MassageModeData>.
+ */
+ @SuppressWarnings("unchecked")
+ public List<MassageModeData> getMassageMode() {
+ return (List<MassageModeData>) getObject(MassageModeData.class, KEY_MASSAGE_MODE);
+ }
+
+ /**
+ * Sets the massageMode portion of the SeatControlData class
+ *
+ * @param massageMode
+ */
+ public void setMassageMode(List<MassageModeData> massageMode) {
+ setValue(KEY_MASSAGE_MODE, massageMode);
+ }
+
+ /**
+ * Gets the List<MassageCushionFirmness> portion of the SeatControlData class
+ *
+ * @return List<MassageCushionFirmness>.
+ */
+ @SuppressWarnings("unchecked")
+ public List<MassageCushionFirmness> getMassageCushionFirmness() {
+ return (List<MassageCushionFirmness>) getObject(MassageCushionFirmness.class, KEY_MASSAGE_CUSHION_FIRMNESS);
+ }
+
+ /**
+ * Sets the massageCushionFirmness portion of the SeatControlData class
+ *
+ * @param massageCushionFirmness
+ */
+ public void setMassageCushionFirmness(List<MassageCushionFirmness> massageCushionFirmness) {
+ setValue(KEY_MASSAGE_CUSHION_FIRMNESS, massageCushionFirmness);
+ }
+
+ /**
+ * Sets the memory portion of the SeatControlData class
+ *
+ * @param memory
+ */
+ public void setMemory(SeatMemoryAction memory) {
+ setValue(KEY_MEMORY, memory);
+ }
+
+ /**
+ * Gets the memory portion of the SeatControlData class
+ *
+ * @return SeatMemoryAction.
+ */
+ @SuppressWarnings("unchecked")
+ public SeatMemoryAction getMemory() {
+ return (SeatMemoryAction) getObject(SeatMemoryAction.class, KEY_MEMORY);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatMemoryAction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatMemoryAction.java
new file mode 100644
index 000000000..a8673a9eb
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatMemoryAction.java
@@ -0,0 +1,95 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.SeatMemoryActionType;
+
+import java.util.Hashtable;
+
+public class SeatMemoryAction extends RPCStruct {
+ public static final String KEY_ID = "id";
+ public static final String KEY_LABEL = "label";
+ public static final String KEY_ACTION = "action";
+
+ /**
+ * Constructs a new SeatMemoryAction object
+ */
+ public SeatMemoryAction() {
+ }
+
+ /**
+ * <p>Constructs a new SeatMemoryAction object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SeatMemoryAction(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated SeatMemoryAction object
+ * @param id Min: 0 Max: 10
+ * @param action type of SeatMemoryActionType.
+ */
+ public SeatMemoryAction(@NonNull Integer id, @NonNull SeatMemoryActionType action) {
+ this();
+ setId(id);
+ setAction(action);
+ }
+
+ /**
+ * Sets the id portion of the SeatMemoryAction class
+ *
+ * @param id
+ */
+ public void setId(@NonNull Integer id) {
+ setValue(KEY_ID, id);
+ }
+
+ /**
+ * Gets the id portion of the SeatMemoryAction class
+ *
+ * @return Integer
+ */
+ public Integer getId() {
+ return getInteger(KEY_ID);
+ }
+
+ /**
+ * Sets the label portion of the SeatMemoryAction class
+ *
+ * @param label
+ */
+ public void setLabel(String label) {
+ setValue(KEY_LABEL, label);
+ }
+
+ /**
+ * Gets the label portion of the SeatMemoryAction class
+ *
+ * @return String
+ */
+ public String getLabel() {
+ return getString(KEY_LABEL);
+ }
+
+ /**
+ * Sets the action portion of the SeatMemoryAction class
+ *
+ * @param action
+ */
+ public void setAction(@NonNull SeatMemoryActionType action) {
+ setValue(KEY_ACTION, action);
+ }
+
+ /**
+ * Gets the action portion of the SeatMemoryAction class
+ *
+ * @return SeatMemoryActionType.
+ */
+ public SeatMemoryActionType getAction() {
+ return (SeatMemoryActionType) getObject(SeatMemoryActionType.class, KEY_ACTION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticData.java
new file mode 100644
index 000000000..a93fd2b98
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticData.java
@@ -0,0 +1,86 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/*
+ * Copyright (c) 2017 Livio, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Livio Inc. nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Request to describe UI elements boundaries to a connected modules.
+ * @since SmartDeviceLink 4.5.0
+ */
+public class SendHapticData extends RPCRequest {
+
+ public static final String KEY_HAPTIC_RECT_DATA = "hapticRectData";
+
+ /**
+ * Constructs a new SendHapticData object
+ */
+ public SendHapticData(){
+ super(FunctionID.SEND_HAPTIC_DATA.toString());
+ }
+
+ /**
+ * <p>
+ * Send the spatial data gathered from SDLCarWindow or VirtualDisplayEncoder to the HMI.
+ * This data will be utilized by the HMI to determine how and when haptic events should occur
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SendHapticData(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Array of spatial data structures that represent the locations of all user controls present on the app's layout.
+ * This data should be updated if/when the application presents a new screen.
+ * When a request is sent, if successful, it will replace all spatial data previously sent through RPC.
+ * If an empty array is sent, the existing spatial data will be cleared
+ */
+ public void setHapticRectData(List<HapticRect> hapticRectData) {
+ setParameters(KEY_HAPTIC_RECT_DATA, hapticRectData);
+ }
+
+ @SuppressWarnings("unchecked")
+ /**
+ * @return array of spatial data structures that represent the locations of all user controls present on the app's layout.
+ */
+ public List<HapticRect> getHapticRectData() {
+ return (List<HapticRect>) getObject(HapticRect.class, KEY_HAPTIC_RECT_DATA);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticDataResponse.java
new file mode 100644
index 000000000..58761a4a5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendHapticDataResponse.java
@@ -0,0 +1,67 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/*
+ * Copyright (c) 2017 Livio, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Livio Inc. nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Response to request that described UI elements boundaries to a connected modules.
+ * @since SmartDeviceLink 4.5.0
+ */
+
+public class SendHapticDataResponse extends RPCResponse {
+
+ public SendHapticDataResponse(){
+ super(FunctionID.SEND_HAPTIC_DATA.toString());
+ }
+
+ public SendHapticDataResponse(Hashtable<String, Object> hash){
+ super(hash);
+ }
+ /**
+ * Constructs a new SendHapticDataResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SendHapticDataResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocation.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocation.java
new file mode 100644
index 000000000..c25f57648
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocation.java
@@ -0,0 +1,203 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.DeliveryMode;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+import java.util.List;
+
+
+/**
+ * Sends a location to the head-unit to display on a map or list.
+ *
+ * @since SmartDeviceLink 3.0
+ *
+ */
+public class SendLocation extends RPCRequest{
+
+ public static final String KEY_LAT_DEGREES = "latitudeDegrees";
+ public static final String KEY_LON_DEGREES = "longitudeDegrees";
+ public static final String KEY_LOCATION_NAME = "locationName";
+ public static final String KEY_LOCATION_DESCRIPTION = "locationDescription";
+ public static final String KEY_PHONE_NUMBER = "phoneNumber";
+ public static final String KEY_ADDRESS_LINES = "addressLines";
+ public static final String KEY_LOCATION_IMAGE = "locationImage";
+ public static final String KEY_DELIVERY_MODE = "deliveryMode";
+ public static final String KEY_TIME_STAMP = "timeStamp";
+ public static final String KEY_ADDRESS = "address";
+
+ /**
+ * Constructs a new SendLocation object
+ */
+ public SendLocation(){
+ super(FunctionID.SEND_LOCATION.toString());
+ }
+
+ /**
+ * <p>
+ * Constructs a new SendLocation object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SendLocation(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Getter for longitude of the location to send.
+ *
+ * <p><b>IMPORTANT NOTE:</b> </p><p>A previous version of this method call returned a Float
+ * value, however, it has been changed to return a Double.</p> This will compile,
+ * but cause a ClassCastException if your value is not also a Double type.
+ * @since SmartDeviceLink v4.0
+ *
+ * @return The longitude of the location
+ */
+ public Double getLongitudeDegrees(){
+ Object value = getParameters(KEY_LON_DEGREES);
+ return SdlDataTypeConverter.objectToDouble(value);
+ }
+
+ /**
+ * Setter for longitude of the location to send.
+ * @param longitudeDegrees
+ */
+ public void setLongitudeDegrees(Double longitudeDegrees){
+ setParameters(KEY_LON_DEGREES, longitudeDegrees);
+ }
+
+ /**
+ * Getter for latitude of the location to send.
+ *
+ * <p><b>IMPORTANT NOTE:</b> </p><p>A previous version of this method call returned a Float
+ * value, however, it has been changed to return a Double.</p> This will compile,
+ * but cause a ClassCastException if your value is not also a Double type.
+ * @since SmartDeviceLink v4.0
+ *
+ * @return The latitude of the location
+ */
+ public Double getLatitudeDegrees(){
+ Object value = getParameters(KEY_LAT_DEGREES);
+ return SdlDataTypeConverter.objectToDouble(value);
+ }
+
+ /**
+ * Setter for latitude of the location to send.
+ * @param latitudeDegrees
+ */
+ public void setLatitudeDegrees(Double latitudeDegrees){
+ setParameters(KEY_LAT_DEGREES, latitudeDegrees);
+ }
+
+ /**
+ * Getter for name of the location to send.
+ * @return The name of the location
+ */
+ public String getLocationName(){
+ return getString(KEY_LOCATION_NAME);
+ }
+
+ /**
+ * Setter for name of the location to send.
+ * @param locationName The name of the location
+ */
+ public void setLocationName(String locationName){
+ setParameters(KEY_LOCATION_NAME, locationName);
+ }
+
+ /**
+ * Getter for description of the location to send.
+ * @return The description of the location to send
+ */
+ public String getLocationDescription(){
+ return getString(KEY_LOCATION_DESCRIPTION);
+ }
+
+ /**
+ * Setter for description of the location to send.
+ * @param locationDescription The description of the location
+ */
+ public void setLocationDescription(String locationDescription){
+ setParameters(KEY_LOCATION_DESCRIPTION, locationDescription);
+ }
+
+ /**
+ * Getter for phone number of the location to send.
+ * @return
+ */
+ public String getPhoneNumber(){
+ return getString(KEY_PHONE_NUMBER);
+ }
+
+ /**
+ * Setter for phone number of the location to send.
+ * @param phoneNumber The phone number of the location
+ */
+ public void setPhoneNumber(String phoneNumber){
+ setParameters(KEY_PHONE_NUMBER, phoneNumber);
+ }
+
+ /**
+ * Getter for address lines of the location to send.
+ * @return The address lines of the location
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getAddressLines(){
+ return (List<String>) getObject(String.class, KEY_ADDRESS_LINES);
+ }
+
+ /**
+ * Setter for address lines of the location to send.
+ * @param addressLines The address lines of the location
+ */
+ public void setAddressLines(List<String> addressLines){
+ setParameters(KEY_ADDRESS_LINES, addressLines);
+ }
+
+ /**
+ * Getter for image of the location to send.
+ * @return The image of the location to send
+ */
+ @SuppressWarnings("unchecked")
+ public Image getLocationImage(){
+ return (Image) getObject(Image.class, KEY_LOCATION_IMAGE);
+ }
+
+ /**
+ * Setter for image of the location to send.
+ * @param locationImage The image of the location to send
+ */
+ public void setLocationImage(Image locationImage){
+ setParameters(KEY_LOCATION_IMAGE, locationImage);
+ }
+
+ public DeliveryMode getDeliveryMode() {
+ return (DeliveryMode) getObject(DeliveryMode.class, KEY_DELIVERY_MODE);
+ }
+
+ public void setDeliveryMode(DeliveryMode deliveryMode) {
+ setParameters(KEY_DELIVERY_MODE, deliveryMode);
+ }
+
+ @SuppressWarnings("unchecked")
+ public DateTime getTimeStamp() {
+ return (DateTime) getObject(DateTime.class, KEY_TIME_STAMP);
+ }
+
+ public void setTimeStamp(DateTime timeStamp) {
+ setParameters(KEY_TIME_STAMP, timeStamp);
+ }
+
+ @SuppressWarnings("unchecked")
+ public OasisAddress getAddress() {
+ return (OasisAddress) getObject(OasisAddress.class, KEY_ADDRESS);
+ }
+
+ public void setAddress(OasisAddress address) {
+ setParameters(KEY_ADDRESS, address);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocationResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocationResponse.java
new file mode 100644
index 000000000..dc1193a8b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SendLocationResponse.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Add SendLocation Response is sent, when SendLocation has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SendLocationResponse extends RPCResponse{
+
+ public SendLocationResponse(){
+ super(FunctionID.SEND_LOCATION.toString());
+ }
+
+ public SendLocationResponse(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SendLocationResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SendLocationResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIcon.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIcon.java
new file mode 100644
index 000000000..02ee081c2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIcon.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Used to set existing local file on SDL as the app's icon. Not supported on
+ * first generation SDL vehicles
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>SDLFileName</td>
+ * <td>String</td>
+ * <td>File reference name.</td>
+ * <td>Y</td>
+ * <td>Maxlength=500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * </table>
+ *
+ *<p><b>Response </b></p>
+ *<p><b> Non-default Result Codes: </b></p>
+ *<p>SUCCESS</p>
+ * <p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ *
+ * @since SmartDeviceLink 2.0
+ * @see Image
+ */
+public class SetAppIcon extends RPCRequest {
+ public static final String KEY_SDL_FILE_NAME = "syncFileName";
+
+ /**
+ * Constructs a new SetAppIcon object
+ */
+ public SetAppIcon() {
+ super(FunctionID.SET_APP_ICON.toString());
+ }
+
+ /**
+ * Constructs a new SetAppIcon object indicated by the Hashtable parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SetAppIcon(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetAppIcon object
+ * @param sdlFileName a String value representing a file reference name <br>
+ * <b>Notes: </b>Maxlength=500, however the max file name length may vary based on remote filesystem limitations
+ */
+ public SetAppIcon(@NonNull String sdlFileName) {
+ this();
+ setSdlFileName(sdlFileName);
+ }
+
+ /**
+ * Sets a file reference name
+ *
+ * @param sdlFileName
+ * a String value representing a file reference name
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500, however the max file name length may vary based on remote filesystem limitations
+ */
+ public void setSdlFileName(@NonNull String sdlFileName) {
+ setParameters(KEY_SDL_FILE_NAME, sdlFileName);
+ }
+
+ /**
+ * Gets a file reference name
+ * @return String -a String value
+ */
+ public String getSdlFileName() {
+ return getString(KEY_SDL_FILE_NAME);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIconResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIconResponse.java
new file mode 100644
index 000000000..45e6ff180
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetAppIconResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Set App Icon Response is sent, when SetAppIcon has been called.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class SetAppIconResponse extends RPCResponse {
+ /**
+ * Constructs a new SetAppIconResponse object
+ */
+
+ public SetAppIconResponse() {
+ super(FunctionID.SET_APP_ICON.toString());
+ }
+ /**
+ * Constructs a new SetAppIconResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+
+ public SetAppIconResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ResetGlobalPropertiesResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SetAppIconResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppProperties.java
new file mode 100644
index 000000000..5f6160361
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppProperties.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class SetCloudAppProperties extends RPCRequest {
+
+ public static final String KEY_PROPERTIES = "properties";
+
+ public SetCloudAppProperties(){
+ super(FunctionID.SET_CLOUD_APP_PROPERTIES.toString());
+ }
+
+ public SetCloudAppProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public SetCloudAppProperties(@NonNull CloudAppProperties cloudAppProperties){
+ this();
+ setParameters(KEY_PROPERTIES, cloudAppProperties);
+ }
+
+ public void setProperties(@NonNull CloudAppProperties cloudAppProperties){
+ setParameters(KEY_PROPERTIES, cloudAppProperties);
+ }
+
+ public CloudAppProperties getProperties(){
+ return (CloudAppProperties) getObject(CloudAppProperties.class, KEY_PROPERTIES);
+ }
+
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppPropertiesResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppPropertiesResponse.java
new file mode 100644
index 000000000..ea3e79d00
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetCloudAppPropertiesResponse.java
@@ -0,0 +1,18 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.Hashtable;
+
+public class SetCloudAppPropertiesResponse extends RPCResponse {
+
+ public SetCloudAppPropertiesResponse(){
+ super(FunctionID.SET_CLOUD_APP_PROPERTIES.toString());
+ }
+ public SetCloudAppPropertiesResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayout.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayout.java
new file mode 100644
index 000000000..2bff6d1ec
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayout.java
@@ -0,0 +1,160 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Used to set an alternate display layout. If not sent, default screen for
+ * given platform will be shown
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>displayLayout</td>
+ * <td>string</td>
+ * <td>Predefined or dynamically created screen layout.<p>Currently only predefined screen layouts are defined.</p> Predefined layouts include: "ONSCREEN_PRESETS" Custom screen containing app-defined onscreen presets. </td>
+ * <td>Y</td>
+ * <td>maxlength: 500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>dayColorScheme</td>
+ * <td>TemplateColorScheme</td>
+ * <td>The color scheme that is used for day.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>nightColorScheme</td>
+ * <td>TemplateColorScheme</td>
+ * <td>The color scheme that is used for night.</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ *
+ * </table>
+ *<p><b>Response </b></p>
+ *
+ *<p><b> Non-default Result Codes: </b></p>
+ *<p> SUCCESS </p>
+ *<p> INVALID_DATA</p>
+ *<p> OUT_OF_MEMORY</p>
+ *<p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ * @since SmartDeviceLink 2.0
+ */
+public class SetDisplayLayout extends RPCRequest {
+ public static final String KEY_DISPLAY_LAYOUT = "displayLayout";
+ public static final String KEY_DAY_COLOR_SCHEME = "dayColorScheme";
+ public static final String KEY_NIGHT_COLOR_SCHEME = "nightColorScheme";
+ /**
+ * Constructs a new SetDisplayLayout object
+ */
+ public SetDisplayLayout() {
+ super(FunctionID.SET_DISPLAY_LAYOUT.toString());
+ }
+
+ /**
+ * Constructs a new SetDisplayLayout object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetDisplayLayout(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetDisplayLayout object
+ * @param displayLayout
+ * a String value representing a display layout
+ */
+ public SetDisplayLayout(@NonNull String displayLayout) {
+ this();
+ setDisplayLayout(displayLayout);
+ }
+
+ /**
+ * Sets a display layout. Predefined or dynamically created screen layout.
+ * Currently only predefined screen layouts are defined. Predefined layouts
+ * include: "ONSCREEN_PRESETS" Custom screen containing app-defined onscreen
+ * presets. Currently defined for GEN2
+ *
+ * @param displayLayout
+ * a String value representing a display layout
+ */
+ public void setDisplayLayout(@NonNull String displayLayout) {
+ setParameters(KEY_DISPLAY_LAYOUT, displayLayout);
+ }
+
+ /**
+ * Gets a display layout.
+ */
+ public String getDisplayLayout() {
+ return getString(KEY_DISPLAY_LAYOUT);
+ }
+
+ /**
+ * Gets the color scheme that is currently used for day
+ *
+ * @return TemplateColorScheme - a TemplateColorScheme object representing the colors that are used
+ * for day color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public TemplateColorScheme getDayColorScheme(){
+ return (TemplateColorScheme) getObject(TemplateColorScheme.class, KEY_DAY_COLOR_SCHEME);
+ }
+
+ /**
+ * Sets the color scheme that is intended to be used for day
+ *
+ * @param templateColorScheme a TemplateColorScheme object representing the colors that will be
+ * used for day color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public void setDayColorScheme(TemplateColorScheme templateColorScheme){
+ setParameters(KEY_DAY_COLOR_SCHEME, templateColorScheme);
+ }
+
+ /**
+ * Gets the color scheme that is currently used for night
+ *
+ * @return TemplateColorScheme - a TemplateColorScheme object representing the colors that are used
+ * for night color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public TemplateColorScheme getNightColorScheme(){
+ return (TemplateColorScheme) getObject(TemplateColorScheme.class, KEY_NIGHT_COLOR_SCHEME);
+ }
+
+ /**
+ * Sets the color scheme that is intended to be used for night
+ *
+ * @param templateColorScheme a TemplateColorScheme object representing the colors that will be
+ * used for night color scheme
+ * @since SmartDeviceLink 5.0
+ */
+ public void setNightColorScheme(TemplateColorScheme templateColorScheme){
+ setParameters(KEY_NIGHT_COLOR_SCHEME, templateColorScheme);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayoutResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayoutResponse.java
new file mode 100644
index 000000000..48b98bd24
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetDisplayLayoutResponse.java
@@ -0,0 +1,89 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Set Display Layout Response is sent, when SetDisplayLayout has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class SetDisplayLayoutResponse extends RPCResponse {
+ public static final String KEY_BUTTON_CAPABILITIES = "buttonCapabilities";
+ public static final String KEY_DISPLAY_CAPABILITIES = "displayCapabilities";
+ public static final String KEY_SOFT_BUTTON_CAPABILITIES = "softButtonCapabilities";
+ public static final String KEY_PRESET_BANK_CAPABILITIES = "presetBankCapabilities";
+
+ /**
+ * Constructs a new SetDisplayLayoutResponse object
+ */
+ public SetDisplayLayoutResponse() {
+ super(FunctionID.SET_DISPLAY_LAYOUT.toString());
+ }
+
+ /**
+ * Constructs a new SetDisplayLayoutResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetDisplayLayoutResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetDisplayLayoutResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SetDisplayLayoutResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ @SuppressWarnings("unchecked")
+ public DisplayCapabilities getDisplayCapabilities() {
+ return (DisplayCapabilities) getObject(DisplayCapabilities.class, KEY_DISPLAY_CAPABILITIES);
+ }
+
+ public void setDisplayCapabilities(DisplayCapabilities displayCapabilities) {
+ setParameters(KEY_DISPLAY_CAPABILITIES, displayCapabilities);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<ButtonCapabilities> getButtonCapabilities() {
+ return (List<ButtonCapabilities>) getObject(ButtonCapabilities.class, KEY_BUTTON_CAPABILITIES);
+ }
+
+ public void setButtonCapabilities(List<ButtonCapabilities> buttonCapabilities) {
+ setParameters(KEY_BUTTON_CAPABILITIES, buttonCapabilities);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<SoftButtonCapabilities> getSoftButtonCapabilities() {
+ return (List<SoftButtonCapabilities>) getObject(SoftButtonCapabilities.class, KEY_SOFT_BUTTON_CAPABILITIES);
+ }
+
+ public void setSoftButtonCapabilities(List<SoftButtonCapabilities> softButtonCapabilities) {
+ setParameters(KEY_SOFT_BUTTON_CAPABILITIES, softButtonCapabilities);
+ }
+
+ @SuppressWarnings("unchecked")
+ public PresetBankCapabilities getPresetBankCapabilities() {
+ return (PresetBankCapabilities) getObject(PresetBankCapabilities.class, KEY_PRESET_BANK_CAPABILITIES);
+ }
+
+ public void setPresetBankCapabilities(PresetBankCapabilities presetBankCapabilities) {
+ setParameters(KEY_PRESET_BANK_CAPABILITIES, presetBankCapabilities);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalProperties.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalProperties.java
new file mode 100644
index 000000000..edd943494
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalProperties.java
@@ -0,0 +1,279 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Sets value(s) for the specified global property(ies)
+ *
+ * <p>Function Group: Base </p>
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>AudioStreamingState:</b></p>
+ * Any
+ *
+ * <p><b>SystemContext:</b></p>
+ * Any
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>helpPrompt</td>
+ * <td>TTSChunk</td>
+ * <td>The help prompt. An array of text chunks of type TTSChunk. See {@linkplain TTSChunk}.The array must have at least one item.</td>
+ * <td>N</td>
+ * <td>Array must have at least one element.<p>Only optional it timeoutPrompt has been specified.</p>minsize:1; maxsize: 100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>timeoutPrompt</td>
+ * <td>TTSChunk</td>
+ * <td>Array of one or more TTSChunk elements specifying the help prompt used in an interaction started by PTT.</td>
+ * <td>N</td>
+ * <td>Array must have at least one element. Only optional it helpPrompt has been specified <p>minsize: 1; maxsize: 100</p></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrHelpTitle</td>
+ * <td>string</td>
+ * <td>Text, which is shown as title of the VR help screen used in an interaction started by PTT.</td>
+ * <td>N</td>
+ * <td>If omitted on supported displays, the default SDL help title will be used. <p>If omitted and one or more vrHelp items are provided, the request will be rejected.</p>maxlength: 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>vrHelp</td>
+ * <td>VrHelep</td>
+ * <td>Items listed in the VR help screen used in an interaction started by PTT.</td>
+ * <td>N</td>
+ * <td>If omitted on supported displays, the default SDL VR help / What Can I Say? screen will be used<p>If the list of VR Help Items contains nonsequential positions (e.g. [1,2,4]), the RPC will be rejected.</p><p>If omitted and a vrHelpTitle is provided, the request will be rejected.</p>minsize:1; maxsize: 100 </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuTitle</td>
+ * <td></td>
+ * <td>Optional text to label an app menu button (for certain touchscreen platforms).</td>
+ * <td>N</td>
+ * <td>maxlength: 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>menuIcon</td>
+ * <td> Image</td>
+ * <td>Optional icon to draw on an app menu button (for certain touchscreen platforms).</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>keyboardProperties</td>
+ * <td>KeyboardProperties</td>
+ * <td>On-screen keybaord configuration (if available).</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ *
+ * </table>
+ *
+ * <p><b>Note: </b>Your application shall send a SetGlobalProperties to establish an advanced help prompt before sending any voice commands.</p>
+ *
+ * <p><b>Response</b></p>
+ * Indicates whether the requested Global Properties were successfully set.
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * </p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>REJECTED</p>
+ * <p>DISALLOWED</p>
+ * @since SmartDeviceLink 1.0
+ * @see ResetGlobalProperties
+ */
+public class SetGlobalProperties extends RPCRequest {
+ public static final String KEY_VR_HELP_TITLE = "vrHelpTitle";
+ public static final String KEY_MENU_TITLE = "menuTitle";
+ public static final String KEY_MENU_ICON = "menuIcon";
+ public static final String KEY_KEYBOARD_PROPERTIES = "keyboardProperties";
+ public static final String KEY_HELP_PROMPT = "helpPrompt";
+ public static final String KEY_TIMEOUT_PROMPT = "timeoutPrompt";
+ public static final String KEY_VR_HELP = "vrHelp";
+ /**
+ * Constructs a new SetGlobalProperties object
+ */
+ public SetGlobalProperties() {
+ super(FunctionID.SET_GLOBAL_PROPERTIES.toString());
+ }
+ /**
+ * Constructs a new SetGlobalProperties object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetGlobalProperties(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Gets a List<TTSChunk> for Help Prompt representing Array of one or more
+ * TTSChunk elements specifying the help prompt used in an interaction
+ * started by PTT
+ *
+ * @return List<TTSChunk> -an Array of one or more TTSChunk elements
+ * specifying the help prompt used in an interaction started by PTT
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getHelpPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_HELP_PROMPT);
+ }
+ /**
+ * Sets a List<TTSChunk> for Help Prompt that Array of one or more
+ * TTSChunk elements specifying the help prompt used in an interaction
+ * started by PTT
+ *
+ * @param helpPrompt
+ * a List<TTSChunk> of one or more TTSChunk elements
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Array must have at least one element</li>
+ * <li>Only optional it timeoutPrompt has been specified</li>
+ * </ul>
+ */
+ public void setHelpPrompt(List<TTSChunk> helpPrompt) {
+ setParameters(KEY_HELP_PROMPT, helpPrompt);
+ }
+ /**
+ * Gets a List<TTSChunk> for Timeout Prompt representing Array of one or
+ * more TTSChunk elements specifying the help prompt used in an interaction
+ * started by PTT
+ *
+ * @return List<TTSChunk> -an Array of one or more TTSChunk elements
+ * specifying the help prompt used in an interaction started by PTT
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTimeoutPrompt() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TIMEOUT_PROMPT);
+ }
+ /**
+ * Sets a List<TTSChunk> for Timeout Prompt representing Array of one or
+ * more TTSChunk elements specifying the help prompt used in an interaction
+ * started by PTT
+ *
+ */
+ public void setTimeoutPrompt(List<TTSChunk> timeoutPrompt) {
+ setParameters(KEY_TIMEOUT_PROMPT, timeoutPrompt);
+ }
+
+ /**
+ * Gets a voice recognition Help Title
+ *
+ * @return String - a String value representing the text, which is shown as
+ * title of the VR help screen used in an interaction started by PTT
+ * @since SmartDeviceLink 2.0
+ */
+ public String getVrHelpTitle() {
+ return getString(KEY_VR_HELP_TITLE);
+ }
+
+ /**
+ * Sets a voice recognition Help Title
+ *
+ * @param vrHelpTitle
+ * a String value representing a voice recognition Help Title
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If omitted on supported displays, the default SDL help
+ * title will be used</li>
+ * <li>If omitted and one or more vrHelp items are provided, the
+ * request will be rejected.</li>
+ * <li>String Maxlength = 500</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setVrHelpTitle(String vrHelpTitle) {
+ setParameters(KEY_VR_HELP_TITLE, vrHelpTitle);
+ }
+
+ /**
+ * Gets items listed in the VR help screen used in an interaction started by
+ * PTT
+ *
+ * @return List<VrHelpItem> - a List value representing items listed in
+ * the VR help screen used in an interaction started by PTT
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<VrHelpItem> getVrHelp() {
+ return (List<VrHelpItem>) getObject(VrHelpItem.class, KEY_VR_HELP);
+ }
+
+ /**
+ * Sets the items listed in the VR help screen used in an interaction
+ * started by PTT
+ *
+ * @param vrHelp
+ * a List value representing items listed in the VR help screen
+ * used in an interaction started by PTT
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If omitted on supported displays, the default SmartDeviceLink VR
+ * help / What Can I Say? screen will be used</li>
+ * <li>If the list of VR Help Items contains nonsequential
+ * positions (e.g. [1,2,4]), the RPC will be rejected</li>
+ * <li>If omitted and a vrHelpTitle is provided, the request
+ * will be rejected</li>
+ * <li>Array Minsize: = 1</li>
+ * <li>Array Maxsize = 100</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setVrHelp(List<VrHelpItem> vrHelp) {
+ setParameters(KEY_VR_HELP, vrHelp);
+ }
+
+ public String getMenuTitle() {
+ return getString(KEY_MENU_TITLE);
+ }
+
+ public void setMenuTitle(String menuTitle) {
+ setParameters(KEY_MENU_TITLE, menuTitle);
+ }
+
+ public void setMenuIcon(Image menuIcon) {
+ setParameters(KEY_MENU_ICON, menuIcon);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Image getMenuIcon() {
+ return (Image) getObject(Image.class, KEY_MENU_ICON);
+ }
+
+ public void setKeyboardProperties(KeyboardProperties keyboardProperties) {
+ setParameters(KEY_KEYBOARD_PROPERTIES, keyboardProperties);
+ }
+
+ @SuppressWarnings("unchecked")
+ public KeyboardProperties getKeyboardProperties() {
+ return (KeyboardProperties) getObject(KeyboardProperties.class, KEY_KEYBOARD_PROPERTIES);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalPropertiesResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalPropertiesResponse.java
new file mode 100644
index 000000000..89b5219a5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetGlobalPropertiesResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Set Global Properties Response is sent, when SetGlobalProperties has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SetGlobalPropertiesResponse extends RPCResponse {
+
+ /**
+ * Constructs a new SetGlobalPropertiesResponse object
+ */
+ public SetGlobalPropertiesResponse() {
+ super(FunctionID.SET_GLOBAL_PROPERTIES.toString());
+ }
+
+ /**
+ * Constructs a new SetGlobalPropertiesResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetGlobalPropertiesResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetGlobalPropertiesResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SetGlobalPropertiesResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleData.java
new file mode 100644
index 000000000..ad5a0d26a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleData.java
@@ -0,0 +1,62 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * This function allows a remote control type mobile application change the settings
+ * of a specific remote control module.
+ */
+public class SetInteriorVehicleData extends RPCRequest {
+ public static final String KEY_MODULE_DATA = "moduleData";
+
+ /**
+ * Constructs a new SetInteriorVehicleData object
+ */
+ public SetInteriorVehicleData() {
+ super(FunctionID.SET_INTERIOR_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new SetInteriorVehicleData object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetInteriorVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetInteriorVehicleData object
+ * @param moduleData
+ */
+ public SetInteriorVehicleData(@NonNull ModuleData moduleData) {
+ this();
+ setModuleData(moduleData);
+ }
+
+ /**
+ * Sets the moduleData
+ *
+ * @param moduleData
+ */
+ public void setModuleData(@NonNull ModuleData moduleData) {
+ setParameters(KEY_MODULE_DATA, moduleData);
+ }
+
+ /**
+ * Gets the moduleData
+ *
+ * @return ModuleData
+ */
+ public ModuleData getModuleData() {
+ return (ModuleData) getObject(ModuleData.class, KEY_MODULE_DATA);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleDataResponse.java
new file mode 100644
index 000000000..837b36fc7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetInteriorVehicleDataResponse.java
@@ -0,0 +1,63 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class SetInteriorVehicleDataResponse extends RPCResponse {
+ public static final String KEY_MODULE_DATA = "moduleData";
+
+ /**
+ * Constructs a new SetInteriorVehicleDataResponse object
+ */
+ public SetInteriorVehicleDataResponse() {
+ super(FunctionID.SET_INTERIOR_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new SetInteriorVehicleDataResponse object indicated by the
+ * Hashtable parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetInteriorVehicleDataResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SetInteriorVehicleDataResponse object
+ * @param moduleData
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SetInteriorVehicleDataResponse(@NonNull ModuleData moduleData, @NonNull Result resultCode, @NonNull Boolean success) {
+ this();
+ setModuleData(moduleData);
+ setResultCode(resultCode);
+ setSuccess(success);
+ }
+
+ /**
+ * Gets the moduleData
+ *
+ * @return ModuleData
+ */
+ public ModuleData getModuleData() {
+ return (ModuleData) getObject(ModuleData.class, KEY_MODULE_DATA);
+ }
+
+ /**
+ * Sets the moduleData
+ *
+ * @param moduleData
+ */
+ public void setModuleData(@NonNull ModuleData moduleData) {
+ setParameters(KEY_MODULE_DATA, moduleData);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimer.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimer.java
new file mode 100644
index 000000000..9063430a5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimer.java
@@ -0,0 +1,305 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.AudioStreamingIndicator;
+import com.smartdevicelink.proxy.rpc.enums.UpdateMode;
+
+import java.util.Hashtable;
+
+/**
+ * Sets the media clock/timer value and the update method (e.g.count-up,
+ * count-down, etc.)
+ *
+ * <p>Function Group: Base </p>
+ * <p><b>HMILevel needs to be FULL, LIMITIED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>startTime</td>
+ * <td>StartTime</td>
+ * <td>StartTime struct specifying hour, minute, second values to which media clock timer is set.</td>
+ * <td>N</td>
+ * <td> </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>endTime</td>
+ * <td>StartTime</td>
+ * <td> EndTime can be provided for "COUNTUP" and "COUNTDOWN"; to be used to calculate any visual progress bar (if not provided, this feature is ignored)
+ * If endTime is greater then startTime for COUNTDOWN or less than startTime for COUNTUP, then the request will return an INVALID_DATA.
+ * endTime will be ignored for "RESUME", and "CLEAR"
+ * endTime can be sent for "PAUSE", in which case it will update the paused endTime</td>
+ * <td>N</td>
+ * <td>Array must have at least one element.<p>Only optional it helpPrompt has been specified</p> minsize: 1; maxsize: 100</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>updateMode</td>
+ * <td>UpdateMode</td>
+ * <td>Specifies how the media clock/timer is to be updated (COUNTUP/COUNTDOWN/PAUSE/RESUME), based at the startTime.</td>
+ * <td>Y</td>
+ * <td>If "updateMode" is COUNTUP or COUNTDOWN, this parameter must be provided. Will be ignored for PAUSE,RESUME and CLEAR</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>audioStreamingIndicator</td>
+ * <td>AudioStreamingIndicator</td>
+ * <td></td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ *
+ * </table>
+ *
+ *<p><b>Response </b></p>
+ *
+ *<p><b> Non-default Result Codes: </b></p>
+ *
+ * <p> SUCCESS </p>
+ * <p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p> APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED </p>
+ * <p> IGNORED </p>
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SetMediaClockTimer extends RPCRequest {
+ public static final String KEY_START_TIME = "startTime";
+ public static final String KEY_END_TIME = "endTime";
+ public static final String KEY_UPDATE_MODE = "updateMode";
+ public static final String KEY_AUDIO_STREAMING_INDICATOR = "audioStreamingIndicator";
+ /**
+ * Constructs a new SetMediaClockTimer object
+ */
+ public SetMediaClockTimer() {
+ super(FunctionID.SET_MEDIA_CLOCK_TIMER.toString());
+ }
+ /**
+ * Constructs a new SetMediaClockTimer object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SetMediaClockTimer(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new SetMediaClockTimer object
+ * @param updateMode a Enumeration value (COUNTUP/COUNTDOWN/PAUSE/RESUME) <br>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>When updateMode is PAUSE, RESUME or CLEAR, the start time value
+ * is ignored</li>
+ * <li>When updateMode is RESUME, the timer resumes counting from
+ * the timer's value when it was paused</li>
+ * </ul>
+ */
+ public SetMediaClockTimer(@NonNull UpdateMode updateMode) {
+ this();
+ setUpdateMode(updateMode);
+ }
+ private SetMediaClockTimer(@NonNull UpdateMode updateMode, @Nullable StartTime startTime, @Nullable StartTime endTime, @Nullable AudioStreamingIndicator audioStreamingIndicator){
+ this();
+ this.setUpdateMode(updateMode);
+ if (startTime != null) {
+ this.setStartTime(startTime);
+ }
+ if (endTime != null) {
+ this.setEndTime(endTime);
+ }
+ if (audioStreamingIndicator != null) {
+ this.setAudioStreamingIndicator(audioStreamingIndicator);
+ }
+ }
+ /**
+ * Create a media clock timer that counts up, e.g from 0:00 to 4:18.
+ *
+ * @param startTimeInterval The start time interval, e.g. (0) 0:00
+ * @param endTimeInterval The end time interval, e.g. (258) 4:18
+ * @param audioStreamingIndicator playPauseIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer countUpFromStartTimeInterval(@NonNull Integer startTimeInterval, @NonNull Integer endTimeInterval, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.COUNTUP, new StartTime(startTimeInterval), new StartTime(endTimeInterval), audioStreamingIndicator);
+ }
+ /**
+ * Create a media clock timer that counts up, e.g from 0:00 to 4:18.
+ *
+ * @param startTime The start time interval, e.g. 0:00
+ * @param endTime The end time interval, e.g. 4:18
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer countUpFromStartTime(@NonNull StartTime startTime, @NonNull StartTime endTime, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.COUNTUP, startTime, endTime, audioStreamingIndicator);
+ }
+ /**
+ * Create a media clock timer that counts down, e.g. from 4:18 to 0:00
+ * This will fail if endTime is greater than startTime
+ *
+ * @param startTimeInterval The start time interval, e.g. (258) 4:18
+ * @param endTimeInterval The end time interval, e.g. (0) 0:00
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer countDownFromStartTimeInterval(@NonNull Integer startTimeInterval, @NonNull Integer endTimeInterval, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.COUNTDOWN, new StartTime(startTimeInterval), new StartTime(endTimeInterval), audioStreamingIndicator);
+ }
+ /**
+ * Create a media clock timer that counts down, e.g. from 4:18 to 0:00
+ * This will fail if endTime is greater than startTime
+ *
+ * @param startTime The start time interval, e.g. 4:18
+ * @param endTime The end time interval, e.g. 0:00
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer countDownFromStartTime(@NonNull StartTime startTime, @NonNull StartTime endTime, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.COUNTDOWN, startTime, endTime, audioStreamingIndicator);
+ }
+ /**
+ * Pause an existing (counting up / down) media clock timer
+ *
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer pauseWithPlayPauseIndicator(@Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.PAUSE, null, null, audioStreamingIndicator);
+ }
+ /**
+ * Update a pause time (or pause and update the time) on a media clock timer
+ *
+ * @param startTimeInterval The new start time interval
+ * @param endTimeInterval The new end time interval
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer updatePauseWithNewStartTimeInterval(@NonNull Integer startTimeInterval, @NonNull Integer endTimeInterval, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.PAUSE, new StartTime(startTimeInterval), new StartTime(endTimeInterval), audioStreamingIndicator);
+ }
+ /**
+ * Update a pause time (or pause and update the time) on a media clock timer
+ *
+ * @param startTime The new start time
+ * @param endTime The new end time
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer updatePauseWithNewStartTime(@NonNull StartTime startTime, @NonNull StartTime endTime, @Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.PAUSE, startTime, endTime, audioStreamingIndicator);
+ }
+ /**
+ * Resume a paused media clock timer. It resumes at the same time at which it was paused.
+ *
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer resumeWithPlayPauseIndicator(@Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.RESUME, null, null, audioStreamingIndicator);
+ }
+ /**
+ * Remove a media clock timer from the screen
+ *
+ * @param audioStreamingIndicator An optional audio indicator to change the play/pause button
+ * @return An object of SetMediaClockTimer
+ */
+ public static SetMediaClockTimer clearWithPlayPauseIndicator(@Nullable AudioStreamingIndicator audioStreamingIndicator) {
+ return new SetMediaClockTimer(UpdateMode.CLEAR, null, null, audioStreamingIndicator);
+ }
+ /**
+ * Gets the Start Time which media clock timer is set
+ *
+ * @return StartTime -a StartTime object specifying hour, minute, second
+ * values
+ */
+ @SuppressWarnings("unchecked")
+ public StartTime getStartTime() {
+ return (StartTime) getObject(StartTime.class, KEY_START_TIME);
+ }
+ /**
+ * Sets a Start Time with specifying hour, minute, second values
+ *
+ * @param startTime
+ * a startTime object with specifying hour, minute, second values
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If "updateMode" is COUNTUP or COUNTDOWN, this parameter
+ * must be provided</li>
+ * <li>Will be ignored for PAUSE/RESUME and CLEAR</li>
+ * </ul>
+ */
+ public void setStartTime( StartTime startTime ) {
+ setParameters(KEY_START_TIME, startTime);
+ }
+
+ @SuppressWarnings("unchecked")
+ public StartTime getEndTime() {
+ return (StartTime) getObject(StartTime.class, KEY_END_TIME);
+ }
+
+ public void setEndTime( StartTime endTime ) {
+ setParameters(KEY_END_TIME, endTime);
+ }
+
+ /**
+ * Gets the media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)
+ *
+ * @return UpdateMode -a Enumeration value (COUNTUP/COUNTDOWN/PAUSE/RESUME)
+ */
+ public UpdateMode getUpdateMode() {
+ return (UpdateMode) getObject(UpdateMode.class, KEY_UPDATE_MODE);
+ }
+ /**
+ * Sets the media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)
+ *
+ * @param updateMode
+ * a Enumeration value (COUNTUP/COUNTDOWN/PAUSE/RESUME)
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>When updateMode is PAUSE, RESUME or CLEAR, the start time value
+ * is ignored</li>
+ * <li>When updateMode is RESUME, the timer resumes counting from
+ * the timer's value when it was paused</li>
+ * </ul>
+ */
+ public void setUpdateMode( @NonNull UpdateMode updateMode ) {
+ setParameters(KEY_UPDATE_MODE, updateMode);
+ }
+
+ /**
+ * Gets the playback status of a media app
+ *
+ * @return AudioStreamingIndicator - a Enumeration value
+ */
+ public AudioStreamingIndicator getAudioStreamingIndicator() {
+ return (AudioStreamingIndicator) getObject(AudioStreamingIndicator.class, KEY_AUDIO_STREAMING_INDICATOR);
+ }
+
+ /**
+ * Sets the playback status of a media app
+ */
+ public void setAudioStreamingIndicator(AudioStreamingIndicator audioStreamingIndicator ) {
+ setParameters(KEY_AUDIO_STREAMING_INDICATOR, audioStreamingIndicator);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimerResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimerResponse.java
new file mode 100644
index 000000000..56a63c947
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SetMediaClockTimerResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Set Media Clock Timer Response is sent, when SetMediaClockTimer has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SetMediaClockTimerResponse extends RPCResponse {
+
+ /**
+ * Constructs a new SetMediaClockTimerResponse object
+ */
+ public SetMediaClockTimerResponse() {
+ super(FunctionID.SET_MEDIA_CLOCK_TIMER.toString());
+ }
+
+ /**
+ * Constructs a new SetMediaClockTimerResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SetMediaClockTimerResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new SetMediaClockTimerResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SetMediaClockTimerResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Show.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Show.java
new file mode 100644
index 000000000..6a42fe1a8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Show.java
@@ -0,0 +1,549 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.TextAlignment;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Updates the application's display text area, regardless of whether or not
+ * this text area is visible to the user at the time of the request. The
+ * application's display text area remains unchanged until updated by subsequent
+ * calls to Show
+ * <p></p>
+ * The content of the application's display text area is visible to the user
+ * when the application's {@linkplain com.smartdevicelink.proxy.rpc.enums.HMILevel}
+ * is FULL or LIMITED, and the
+ * {@linkplain com.smartdevicelink.proxy.rpc.enums.SystemContext}=MAIN and no
+ * {@linkplain Alert} is in progress
+ * <p></p>
+ * The Show operation cannot be used to create an animated scrolling screen. To
+ * avoid distracting the driver, Show commands cannot be issued more than once
+ * every 4 seconds. Requests made more frequently than this will be rejected
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>mainField1</td>
+ * <td>String</td>
+ * <td>Text to be displayed in a single-line display, or in the upper display line in a two-line display.</td>
+ * <td>N</td>
+ * <td>If this parameter is omitted, the text of mainField1 does not change. If this parameter is an empty string, the field will be cleared. <p>Maxlength = 500</p></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>mainField2</td>
+ * <td>String</td>
+ * <td>Text to be displayed on the second display line of a two-line display.</td>
+ * <td>N</td>
+ * <td><p>If this parameter is omitted, the text of mainField2 does not change. </p> <p>If this parameter is an empty string, the field will be cleared.</p><p>If provided and the display is a single-line display, the parameter is ignored.</p>Maxlength = 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>mainField3</td>
+ * <td>String</td>
+ * <td>Text to be displayed on the first display line of the second page.</td>
+ * <td>N</td>
+ * <td><p>If this parameter is omitted, the text of mainField3 does not change. </p><p>If this parameter is an empty string, the field will be cleared.</p><p>If provided and the display is a single-line display, the parameter is ignored.</p> Maxlength = 500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>mainField4</td>
+ * <td>String</td>
+ * <td>Text to be displayed on the second display line of the second page.</td>
+ * <td>N</td>
+ * <td><p>If this parameter is omitted, the text of mainField4 does not change. </p><p>If this parameter is an empty string, the field will be cleared.</p><p>If provided and the display is a single-line display, the parameter is ignored.</p>Maxlength = 500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>alignment</td>
+ * <td>TextAlignment</td>
+ * <td>Specifies how mainField1 and mainField2 text should be aligned on display.</td>
+ * <td>N</td>
+ * <td><p>Applies only to mainField1 and mainField2 provided on this call, not to what is already showing in display.</p><p>If this parameter is omitted, text in both mainField1 and mainField2 will be centered. </p>Has no effect with navigation display</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>statusBar</td>
+ * <td>String</td>
+ * <td>The text is placed in the status bar area.</td>
+ * <td>N</td>
+ * <td><p>Note: The status bar only exists on navigation displays</p><p>If this parameter is omitted, the status bar text will remain unchanged.</p><p>If this parameter is an empty string, the field will be cleared.</p><p>If provided and the display has no status bar, this parameter is ignored.</p>Maxlength = 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>mediaClock</td>
+ * <td>String</td>
+ * <td><p>Text value for MediaClock field.</p> <p>Has to be properly formatted by Mobile App according to SDL capabilities.</p>If this text is set, any automatic media clock updates previously set with SetMediaClockTimer will be stopped.</td>
+ * <td>N</td>
+ * <td><p>Must be properly formatted as described in the MediaClockFormat enumeration. </p><p>If a value of five spaces is provided, this will clear that field on the display (i.e. the media clock timer field will not display anything) </p>Maxlength = 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>mediaTrack</td>
+ * <td>String</td>
+ * <td>Array of one or more TTSChunk elements specifying the help prompt used in an interaction started by PTT.</td>
+ * <td>N</td>
+ * <td><p>If parameter is omitted, the track field remains unchanged.</p><p>If an empty string is provided, the field will be cleared.</p><p>This field is only valid for media applications on navigation displays.</p>Maxlength = 500</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>graphic</td>
+ * <td>Image</td>
+ * <td>Image to be shown on supported displays.</td>
+ * <td>N</td>
+ * <td>If omitted on supported displays, the displayed graphic shall not change.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>secondaryGraphic</td>
+ * <td>Image</td>
+ * <td> <p>Image struct determining whether static or dynamic secondary image to display in app.</p>If omitted on supported displays, the displayed secondary graphic shall not change.</td>
+ * <td>N</td>
+ * <td> </td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>softButtons</td>
+ * <td>SoftButton</td>
+ * <td>Soft buttons as defined by the App</td>
+ * <td>N</td>
+ * <td><p>If omitted on supported displays, the currently displayed SoftButton values will not change.</p>Array Minsize: 0; Array Maxsize: 8</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>customPresets</td>
+ * <td>String</td>
+ * <td>Custom presets as defined by the App.</td>
+ * <td>N</td>
+ * <td><p>If omitted on supported displays, the presets will be shown as not defined.</p>Minsize: 0; Maxsize: 6</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * </table>
+ *<p><b>Response </b></p>
+ *
+ *<p><b> Non-default Result Codes: </b></p>
+ * <p>SUCCESS </p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p> TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p> GENERIC_ERROR</p>
+ * <p> REJECTED</p>
+ * <p> DISALLOWED</p>
+ * <p> UNSUPPORTED_RESOURCE </p>
+ * <p>ABORTED</p>
+ *
+ * @since SmartDeviceLink 1.0
+ * @see Alert
+ * @see SetMediaClockTimer
+ */
+public class Show extends RPCRequest {
+ public static final String KEY_GRAPHIC = "graphic";
+ public static final String KEY_CUSTOM_PRESETS = "customPresets";
+ public static final String KEY_MAIN_FIELD_1 = "mainField1";
+ public static final String KEY_MAIN_FIELD_2 = "mainField2";
+ public static final String KEY_MAIN_FIELD_3 = "mainField3";
+ public static final String KEY_MAIN_FIELD_4 = "mainField4";
+ public static final String KEY_STATUS_BAR = "statusBar";
+ public static final String KEY_MEDIA_CLOCK = "mediaClock";
+ public static final String KEY_ALIGNMENT = "alignment";
+ public static final String KEY_MEDIA_TRACK = "mediaTrack";
+ public static final String KEY_SECONDARY_GRAPHIC = "secondaryGraphic";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+ public static final String KEY_METADATA_TAGS = "metadataTags";
+ /**
+ * Constructs a new Show object
+ */
+ public Show() {
+ super(FunctionID.SHOW.toString());
+ }
+ /**
+ * Constructs a new Show object indicated by the Hashtable parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public Show(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Gets the text displayed in a single-line display, or in the upper display
+ * line in a two-line display
+ *
+ * @return String -a String value representing the text displayed in a
+ * single-line display, or in the upper display line in a two-line
+ * display
+ */
+ public String getMainField1() {
+ return getString(KEY_MAIN_FIELD_1);
+ }
+ /**
+ * Sets the text displayed in a single-line display, or in the upper display
+ * line in a two-line display
+ *
+ * @param mainField1
+ * the String value representing the text displayed in a
+ * single-line display, or in the upper display line in a
+ * two-line display
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If this parameter is omitted, the text of mainField1 does
+ * not change</li>
+ * <li>If this parameter is an empty string, the field will be
+ * cleared</li>
+ * </ul>
+ */
+ public void setMainField1(String mainField1) {
+ setParameters(KEY_MAIN_FIELD_1, mainField1);
+ }
+ /**
+ * Gets the text displayed on the second display line of a two-line display
+ *
+ * @return String -a String value representing the text displayed on the
+ * second display line of a two-line display
+ */
+ public String getMainField2() {
+ return getString(KEY_MAIN_FIELD_2);
+ }
+ /**
+ * Sets the text displayed on the second display line of a two-line display
+ *
+ * @param mainField2
+ * the String value representing the text displayed on the second
+ * display line of a two-line display
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If this parameter is omitted, the text of mainField2 does
+ * not change</li>
+ * <li>If this parameter is an empty string, the field will be
+ * cleared</li>
+ * <li>If provided and the display is a single-line display, the
+ * parameter is ignored</li>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ */
+ public void setMainField2(String mainField2) {
+ setParameters(KEY_MAIN_FIELD_2, mainField2);
+ }
+
+ /**
+ * Gets the text displayed on the first display line of the second page
+ *
+ * @return String -a String value representing the text displayed on the
+ * first display line of the second page
+ * @since SmartDeviceLink 2.0
+ */
+ public String getMainField3() {
+ return getString(KEY_MAIN_FIELD_3);
+ }
+
+ /**
+ * Sets the text displayed on the first display line of the second page
+ *
+ * @param mainField3
+ * the String value representing the text displayed on the first
+ * display line of the second page
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If this parameter is omitted, the text of mainField3 does
+ * not change</li>
+ * <li>If this parameter is an empty string, the field will be
+ * cleared</li>
+ * <li>If provided and the display is a single-line display, the
+ * parameter is ignored</li>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setMainField3(String mainField3) {
+ setParameters(KEY_MAIN_FIELD_3, mainField3);
+ }
+
+ /**
+ * Gets the text displayed on the second display line of the second page
+ *
+ * @return String -a String value representing the text displayed on the
+ * first display line of the second page
+ * @since SmartDeviceLink 2.0
+ */
+ public String getMainField4() {
+ return getString(KEY_MAIN_FIELD_4);
+ }
+
+ /**
+ * Sets the text displayed on the second display line of the second page
+ *
+ * @param mainField4
+ * the String value representing the text displayed on the second
+ * display line of the second page
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If this parameter is omitted, the text of mainField4 does
+ * not change</li>
+ * <li>If this parameter is an empty string, the field will be
+ * cleared</li>
+ * <li>If provided and the display is a single-line display, the
+ * parameter is ignored</li>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setMainField4(String mainField4) {
+ setParameters(KEY_MAIN_FIELD_4, mainField4);
+ }
+ /**
+ * Gets the alignment that Specifies how mainField1 and mainField2 text
+ * should be aligned on display
+ *
+ * @return TextAlignment -an Enumeration value
+ */
+ public TextAlignment getAlignment() {
+ return (TextAlignment) getObject(TextAlignment.class, KEY_ALIGNMENT);
+ }
+ /**
+ * Sets the alignment that Specifies how mainField1 and mainField2 text
+ * should be aligned on display
+ *
+ * @param alignment
+ * an Enumeration value
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Applies only to mainField1 and mainField2 provided on this
+ * call, not to what is already showing in display</li>
+ * <li>If this parameter is omitted, text in both mainField1 and
+ * mainField2 will be centered</li>
+ * <li>Has no effect with navigation display</li>
+ * </ul>
+ */
+ public void setAlignment(TextAlignment alignment) {
+ setParameters(KEY_ALIGNMENT, alignment);
+ }
+ /**
+ * Gets text in the Status Bar
+ *
+ * @return String -the value in the Status Bar
+ */
+ public String getStatusBar() {
+ return getString(KEY_STATUS_BAR);
+ }
+ /**
+ * Sets text in the Status Bar
+ *
+ * @param statusBar
+ * a String representing the text you want to add in the Status
+ * Bar
+ * <p></p>
+ * <b>Notes: </b><i>The status bar only exists on navigation
+ * displays</i>
+ * <ul>
+ * <li>If this parameter is omitted, the status bar text will
+ * remain unchanged</li>
+ * <li>If this parameter is an empty string, the field will be
+ * cleared</li>
+ * <li>If provided and the display has no status bar, this
+ * parameter is ignored</li>
+ * </ul>
+ */
+ public void setStatusBar(String statusBar) {
+ setParameters(KEY_STATUS_BAR, statusBar);
+ }
+ /**
+ * Gets the String value of the MediaClock
+ *
+ * @return String -a String value of the MediaClock
+ */
+ @Deprecated
+ public String getMediaClock() {
+ return getString(KEY_MEDIA_CLOCK);
+ }
+ /**
+ * Sets the value for the MediaClock field using a format described in the
+ * MediaClockFormat enumeration
+ *
+ * @param mediaClock
+ * a String value for the MdaiaClock
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>Must be properly formatted as described in the
+ * MediaClockFormat enumeration</li>
+ * <li>If a value of five spaces is provided, this will clear
+ * that field on the display (i.e. the media clock timer field
+ * will not display anything)</li>
+ * </ul>
+ */
+ @Deprecated
+ public void setMediaClock(String mediaClock) {
+ setParameters(KEY_MEDIA_CLOCK, mediaClock);
+ }
+ /**
+ * Gets the text in the track field
+ *
+ * @return String -a String displayed in the track field
+ */
+ public String getMediaTrack() {
+ return getString(KEY_MEDIA_TRACK);
+ }
+ /**
+ * Sets the text in the track field
+ *
+ * @param mediaTrack
+ * a String value disaplayed in the track field
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If parameter is omitted, the track field remains unchanged</li>
+ * <li>If an empty string is provided, the field will be cleared</li>
+ * <li>This field is only valid for media applications on navigation displays</li>
+ * </ul>
+ */
+ public void setMediaTrack(String mediaTrack) {
+ setParameters(KEY_MEDIA_TRACK, mediaTrack);
+ }
+
+ /**
+ * Sets an image to be shown on supported displays
+ *
+ * @param graphic
+ * the value representing the image shown on supported displays
+ * <p></p>
+ * <b>Notes: </b>If omitted on supported displays, the displayed
+ * graphic shall not change
+ * @since SmartDeviceLink 2.0
+ */
+ public void setGraphic(Image graphic) {
+ setParameters(KEY_GRAPHIC, graphic);
+ }
+
+ /**
+ * Gets an image to be shown on supported displays
+ *
+ * @return Image -the value representing the image shown on supported
+ * displays
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public Image getGraphic() {
+ return (Image) getObject(Image.class, KEY_GRAPHIC);
+ }
+
+
+ public void setSecondaryGraphic(Image secondaryGraphic) {
+ setParameters(KEY_SECONDARY_GRAPHIC, secondaryGraphic);
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public Image getSecondaryGraphic() {
+ return (Image) getObject(Image.class, KEY_SECONDARY_GRAPHIC);
+ }
+
+
+ /**
+ * Gets the Soft buttons defined by the App
+ *
+ * @return List<SoftButton> -a List value representing the Soft buttons
+ * defined by the App
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons() {
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+
+ /**
+ * Sets the the Soft buttons defined by the App
+ *
+ * @param softButtons
+ * a List value represemting the Soft buttons defined by the
+ * App
+ * <p></p>
+ * <b>Notes: </b>
+ * <ul>
+ * <li>If omitted on supported displays, the currently displayed
+ * SoftButton values will not change</li>
+ * <li>Array Minsize: 0</li>
+ * <li>Array Maxsize: 8</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ public void setSoftButtons(List<SoftButton> softButtons) {
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+
+ /**
+ * Gets the Custom Presets defined by the App
+ *
+ * @return List<String> - a List value representing the Custom presets
+ * defined by the App
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getCustomPresets() {
+ return (List<String>) getObject(String.class, KEY_CUSTOM_PRESETS);
+ }
+
+ /**
+ * Sets the Custom Presets defined by the App
+ *
+ * @param customPresets
+ * a List value representing the Custom Presets defined by the
+ * App
+ * <p></p>
+ * <ul>
+ * <li>If omitted on supported displays, the presets will be shown as not defined</li>
+ * <li>Array Minsize: 0</li>
+ * <li>Array Maxsize: 6</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+ public void setCustomPresets(List<String> customPresets) {
+ setParameters(KEY_CUSTOM_PRESETS, customPresets);
+ }
+
+ /**
+ * Sets text field metadata defined by the App
+ *
+ * @param metadataTags
+ * A Struct containing metadata pertaining to the main text fields
+ * <p></p>
+ * <ul>
+ * @since SmartDeviceLink 4.5.0
+ */
+ public void setMetadataTags(MetadataTags metadataTags){
+ setParameters(KEY_METADATA_TAGS, metadataTags);
+ }
+
+ /**
+ * Gets text field metadata defined by the App
+ *
+ * @return metadataTags - App defined metadata information. See MetadataTags. Uses mainField1, mainField2, mainField3, mainField4.
+ * If omitted on supported displays, the currently set metadata tags will not change.
+ * If any text field contains no tags or the none tag, the metadata tag for that textfield should be removed.
+ * @since SmartDeviceLink 4.5.0
+ */
+ public MetadataTags getMetadataTags() {
+ return (MetadataTags) getObject(MetadataTags.class, KEY_METADATA_TAGS);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbt.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbt.java
new file mode 100644
index 000000000..6a44b9068
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbt.java
@@ -0,0 +1,273 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * <p>This RPC is used to update the user with navigation information for the constantly shown screen (base screen), but
+ * also for the alert type screen</p>
+ *
+ * <p>Function Group: Navigation</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ *
+ * @since SmartDeviceLink 2.0
+ * @see AlertManeuver
+ * @see UpdateTurnList
+ */
+public class ShowConstantTbt extends RPCRequest{
+
+ public static final String KEY_TEXT1 = "navigationText1";
+ public static final String KEY_TEXT2 = "navigationText2";
+ public static final String KEY_ETA = "eta";
+ public static final String KEY_TOTAL_DISTANCE = "totalDistance";
+ public static final String KEY_MANEUVER_DISTANCE = "distanceToManeuver";
+ public static final String KEY_MANEUVER_DISTANCE_SCALE = "distanceToManeuverScale";
+ public static final String KEY_MANEUVER_IMAGE = "turnIcon";
+ public static final String KEY_NEXT_MANEUVER_IMAGE = "nextTurnIcon";
+ public static final String KEY_MANEUVER_COMPLETE = "maneuverComplete";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+ public static final String KEY_TIME_TO_DESTINATION = "timeToDestination";
+
+ /**
+ * Constructs a new ShowConstantTbt object
+ */
+ public ShowConstantTbt(){
+ super(FunctionID.SHOW_CONSTANT_TBT.toString());
+ }
+
+ /**
+ * Constructs a new ShowConstantTbt object indicated by the Hashtable parameter
+ * <p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ShowConstantTbt(Hashtable<String, Object> hash){
+ super(hash);
+ }
+
+ /**
+ * Sets a text for navigation text field 1
+ *
+ * @param navigationText1
+ * a String value representing a text for navigation text field 1
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setNavigationText1(String navigationText1){
+ setParameters(KEY_TEXT1, navigationText1);
+ }
+
+ /**
+ * Gets a text for navigation text field 1
+ *
+ * @return String -a String value representing a text for navigation text field 1
+ */
+ public String getNavigationText1(){
+ return getString(KEY_TEXT1);
+ }
+
+ /**
+ * Sets a text for navigation text field 2
+ *
+ * @param navigationText2
+ * a String value representing a text for navigation text field 2
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setNavigationText2(String navigationText2){
+ setParameters(KEY_TEXT2, navigationText2);
+ }
+
+ /**
+ * Gets a text for navigation text field 2
+ *
+ * @return String -a String value representing a text for navigation text field 2
+ */
+ public String getNavigationText2(){
+ return getString(KEY_TEXT2);
+ }
+
+ /**
+ * Sets a text field for estimated time of arrival
+ *
+ * @param eta
+ * a String value representing a text field for estimated time of arrival
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setEta(String eta){
+ setParameters(KEY_ETA, eta);
+ }
+
+ /**
+ * Gets a text field for estimated time of arrival
+ *
+ * @return String -a String value representing a text field for estimated time of arrival
+ */
+ public String getEta(){
+ return getString(KEY_ETA);
+ }
+
+ /**
+ * Sets a text field for total distance
+ *
+ * @param totalDistance
+ * a String value representing a text field for total distance
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setTotalDistance(String totalDistance){
+ setParameters(KEY_TOTAL_DISTANCE, totalDistance);
+ }
+
+ /**
+ * Gets a text field for total distance
+ *
+ * @return String -a String value representing a text field for total distance
+ */
+ public String getTotalDistance(){
+ return getString(KEY_TOTAL_DISTANCE);
+ }
+
+ /**
+ * Sets an Image for turnicon
+ *
+ * @param turnIcon
+ * an Image value
+ */
+ public void setTurnIcon(Image turnIcon){
+ setParameters(KEY_MANEUVER_IMAGE, turnIcon);
+ }
+
+ /**
+ * Gets an Image for turnicon
+ *
+ * @return Image -an Image value representing an Image for turnicon
+ */
+ @SuppressWarnings("unchecked")
+ public Image getTurnIcon(){
+ return (Image) getObject(Image.class, KEY_MANEUVER_IMAGE);
+ }
+
+ /**
+ * Sets an Image for nextTurnIcon
+ *
+ * @param nextTurnIcon
+ * an Image value
+ */
+ public void setNextTurnIcon(Image nextTurnIcon){
+ setParameters(KEY_NEXT_MANEUVER_IMAGE, nextTurnIcon);
+ }
+
+ /**
+ * Gets an Image for nextTurnIcon
+ *
+ * @return Image -an Image value representing an Image for nextTurnIcon
+ */
+ @SuppressWarnings("unchecked")
+ public Image getNextTurnIcon(){
+ return (Image) getObject(Image.class, KEY_NEXT_MANEUVER_IMAGE);
+ }
+
+ /**
+ * Sets a Fraction of distance till next maneuver
+ *
+ * @param distanceToManeuver
+ * a Double value representing a Fraction of distance till next maneuver
+ * <p></p>
+ * <b>Notes: </b>Minvalue=0; Maxvalue=1000000000
+ */
+ public void setDistanceToManeuver(Double distanceToManeuver){
+ setParameters(KEY_MANEUVER_DISTANCE, distanceToManeuver);
+ }
+
+ /**
+ * Gets a Fraction of distance till next maneuver
+ *
+ * @return Double -a Double value representing a Fraction of distance till next maneuver
+ */
+ public Double getDistanceToManeuver(){
+ return getDouble(KEY_MANEUVER_DISTANCE);
+ }
+
+ /**
+ * Sets a Distance till next maneuver (starting from) from previous maneuver
+ *
+ * @param distanceToManeuverScale
+ * a Double value representing a Distance till next maneuver (starting from) from previous maneuver
+ * <p></p>
+ * <b>Notes: </b>Minvalue=0; Maxvalue=1000000000
+ */
+ public void setDistanceToManeuverScale(Double distanceToManeuverScale){
+ setParameters(KEY_MANEUVER_DISTANCE_SCALE, distanceToManeuverScale);
+ }
+
+ /**
+ * Gets a Distance till next maneuver (starting from) from previous maneuver
+ *
+ * @return Double -a Double value representing a Distance till next maneuver (starting from) from previous maneuver
+ */
+ public Double getDistanceToManeuverScale(){
+ return getDouble(KEY_MANEUVER_DISTANCE_SCALE);
+ }
+
+ /**
+ * <p>Sets a maneuver complete flag. If and when a maneuver has completed while an AlertManeuver is active, the app
+ * must send this value set to TRUE in order to clear the AlertManeuver overlay
+ * If omitted the value will be assumed as FALSE</p>
+ *
+ *
+ * @param maneuverComplete
+ * a Boolean value
+ */
+ public void setManeuverComplete(Boolean maneuverComplete){
+ setParameters(KEY_MANEUVER_COMPLETE, maneuverComplete);
+ }
+
+ /**
+ * Gets a maneuver complete flag
+ *
+ * @return Boolean -a Boolean value
+ */
+ public Boolean getManeuverComplete(){
+ return getBoolean(KEY_MANEUVER_COMPLETE);
+ }
+
+ /**
+ * <p>Sets Three dynamic SoftButtons available (first SoftButton is fixed to "Turns"). If omitted on supported
+ * displays, the currently displayed SoftButton values will not change</p>
+ *
+ * <p><b>Notes: </b>Minsize=0; Maxsize=3</p>
+ *
+ * @param softButtons
+ * a List<SoftButton> value
+ */
+ public void setSoftButtons(List<SoftButton> softButtons){
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+
+ /**
+ * Gets Three dynamic SoftButtons available (first SoftButton is fixed to "Turns"). If omitted on supported
+ * displays, the currently displayed SoftButton values will not change
+ *
+ * @return Vector<SoftButton> -a Vector<SoftButton> value
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons(){
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+
+ public void setTimeToDestination(String timeToDestination){
+ setParameters(KEY_TIME_TO_DESTINATION, timeToDestination);
+ }
+
+ public String getTimeToDestination(){
+ return getString(KEY_TIME_TO_DESTINATION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbtResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbtResponse.java
new file mode 100644
index 000000000..5482a00ae
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowConstantTbtResponse.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Show Constant TBT Response is sent, when ShowConstantTBT has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class ShowConstantTbtResponse extends RPCResponse{
+
+ public ShowConstantTbtResponse() {
+ super(FunctionID.SHOW_CONSTANT_TBT.toString());
+ }
+
+ public ShowConstantTbtResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ShowConstantTbtResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ShowConstantTbtResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowResponse.java
new file mode 100644
index 000000000..1187f6687
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ShowResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Show Response is sent, when Show has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class ShowResponse extends RPCResponse {
+
+ /**
+ * Constructs a new ShowResponse object
+ */
+ public ShowResponse() {
+ super(FunctionID.SHOW.toString());
+ }
+
+ /**
+ * Constructs a new ShowResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public ShowResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new ShowResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public ShowResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SingleTireStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SingleTireStatus.java
new file mode 100644
index 000000000..e3a63c276
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SingleTireStatus.java
@@ -0,0 +1,114 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.ComponentVolumeStatus;
+import com.smartdevicelink.proxy.rpc.enums.TPMS;
+
+import java.util.Hashtable;
+
+/**
+ * Tire pressure status of a single tire.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>status</td>
+ * <td>ComponentVolumeStatus</td>
+ * <td>Describes the volume status of a single tire
+ * See {@linkplain ComponentVolumeStatus}
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>tpms</td>
+ * <td>TPMS</td>
+ * <td>The status of TPMS according to the particular tire.
+ * See {@linkplain com.smartdevicelink.proxy.rpc.enums.TPMS}
+ * </td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>pressure</td>
+ * <td>Float</td>
+ * <td>The pressure value of the particular tire in kilo pascal.</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class SingleTireStatus extends RPCStruct {
+ public static final String KEY_STATUS = "status";
+ public static final String KEY_TPMS = "tpms";
+ public static final String KEY_PRESSURE = "pressure";
+
+ /**
+ * Constructs a newly allocated SingleTireStatus object
+ */
+ public SingleTireStatus() { }
+
+ /**
+ * Constructs a newly allocated SingleTireStatus object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public SingleTireStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated SingleTireStatus object
+ * @param status Describes the volume status of a single tire
+ */
+ public SingleTireStatus(@NonNull ComponentVolumeStatus status){
+ this();
+ setStatus(status);
+ }
+
+ /**
+ * set the volume status of a single tire
+ * @param status the volume status of a single tire
+ */
+ public void setStatus(@NonNull ComponentVolumeStatus status) {
+ setValue(KEY_STATUS, status);
+ }
+
+ /**
+ * get the volume status of a single tire
+ * @return the volume status of a single tire
+ */
+ public ComponentVolumeStatus getStatus() {
+ return (ComponentVolumeStatus) getObject(ComponentVolumeStatus.class, KEY_STATUS);
+ }
+
+ /**
+ * Set the status of TPMS according to the particular tire.
+ * @param tpms The status of TPMS
+ */
+ public void setTPMS(@NonNull TPMS tpms) { setValue(KEY_TPMS, tpms); }
+
+ /**
+ * Get the status of TPMS according to the particular tire.
+ * @return the TPMS status
+ */
+ public TPMS getTPMS() {
+ return (TPMS) getObject(TPMS.class, KEY_TPMS);
+ }
+
+ /**
+ * @param pressure The pressure value of the particular tire in kilo pascal.
+ */
+ public void setPressure(@NonNull Float pressure) { setValue(KEY_PRESSURE, pressure); }
+
+ /**
+ * @return the pressure value of the particular tire in kilo pascal.
+ */
+ public Float getPressure() {
+ return getFloat(KEY_PRESSURE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SisData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SisData.java
new file mode 100644
index 000000000..13b30e37d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SisData.java
@@ -0,0 +1,123 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class SisData extends RPCStruct {
+ public static final String KEY_STATION_SHORT_NAME = "stationShortName";
+ public static final String KEY_STATION_ID_NUMBER = "stationIDNumber";
+ public static final String KEY_STATION_LONG_NAME = "stationLongName";
+ public static final String KEY_STATION_LOCATION = "stationLocation";
+ public static final String KEY_STATION_MESSAGE = "stationMessage";
+
+ /**
+ * Constructs a new SisData object
+ */
+ public SisData() {
+ }
+
+ /**
+ * <p>Constructs a new SisData object indicated by the Hashtable parameter
+ * </p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SisData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the stationShortName portion of the SisData class
+ *
+ * @param stationShortName Identifies the 4-alpha-character station call sign plus an optional (-FM) extension.
+ */
+ public void setStationShortName(String stationShortName) {
+ setValue(KEY_STATION_SHORT_NAME, stationShortName);
+ }
+
+ /**
+ * Gets the stationShortName portion of the SisData class
+ *
+ * @return String - Identifies the 4-alpha-character station call sign plus an optional (-FM) extension.
+ */
+ public String getStationShortName() {
+ return getString(KEY_STATION_SHORT_NAME);
+ }
+
+ /**
+ * Sets the stationIDNumber portion of the SisData class
+ *
+ * @param stationIDNumber
+ */
+ public void setStationIDNumber(StationIDNumber stationIDNumber) {
+ setValue(KEY_STATION_ID_NUMBER, stationIDNumber);
+ }
+
+ /**
+ * Gets the stationIDNumber portion of the SisData class
+ *
+ * @return StationIDNumber.
+ */
+ @SuppressWarnings("unchecked")
+ public StationIDNumber getStationIDNumber() {
+ return (StationIDNumber) getObject(StationIDNumber.class, KEY_STATION_ID_NUMBER);
+ }
+
+ /**
+ * Sets the stationLongName portion of the SisData class
+ *
+ * @param stationLongName Identifies the station call sign or other identifying information in the long format.
+ */
+ public void setStationLongName(String stationLongName) {
+ setValue(KEY_STATION_LONG_NAME, stationLongName);
+ }
+
+ /**
+ * Gets the stationLongName portion of the SisData class
+ *
+ * @return String - Identifies the station call sign or other identifying information in the long format.
+ */
+ public String getStationLongName() {
+ return getString(KEY_STATION_LONG_NAME);
+ }
+
+ /**
+ * Sets the stationLocation portion of the SisData class
+ *
+ * @param stationLocation Provides the 3-dimensional geographic station location.
+ */
+ public void setStationLocation(GPSData stationLocation) {
+ setValue(KEY_STATION_LOCATION, stationLocation);
+ }
+
+ /**
+ * Gets the stationLocation portion of the SisData class
+ *
+ * @return GPSData - Provides the 3-dimensional geographic station location.
+ */
+ @SuppressWarnings("unchecked")
+ public GPSData getStationLocation() {
+ return (GPSData) getObject(GPSData.class, KEY_STATION_LOCATION);
+ }
+
+ /**
+ * Sets the stationMessage portion of the SisData class
+ *
+ * @param stationMessage May be used to convey textual information of general interest to the consumer such as weather forecasts or public service announcements.
+ * Includes a high priority delivery feature to convey emergencies that may be in the listening area.
+ */
+ public void setStationMessage(String stationMessage) {
+ setValue(KEY_STATION_MESSAGE, stationMessage);
+ }
+
+ /**
+ * Gets the stationMessage portion of the SisData class
+ *
+ * @return String - May be used to convey textual information of general interest to the consumer such as weather forecasts or public service announcements.
+ * Includes a high priority delivery feature to convey emergencies that may be in the listening area.
+ */
+ public String getStationMessage() {
+ return getString(KEY_STATION_MESSAGE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Slider.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Slider.java
new file mode 100644
index 000000000..df92e22fe
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Slider.java
@@ -0,0 +1,235 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * <p>Creates a full screen or pop-up overlay (depending on platform) with a single
+ * user controlled slider.</p>
+ *
+ * <p>Function Group: Base</p>
+ *
+ * <p><b>HMILevel needs to be FULL</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>numTicks</td>
+ * <td>Integer</td>
+ * <td>Number of selectable items on a horizontal axis.</td>
+ * <td>Y</td>
+ * <td>Minvalue=2; Maxvalue=26</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>position</td>
+ * <td>Integer</td>
+ * <td>Initial position of slider control (cannot exceed numTicks),</td>
+ * <td>Y</td>
+ * <td>Minvalue=1; Maxvalue=26</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>sliderHeader</td>
+ * <td>String</td>
+ * <td>Text header to display</td>
+ * <td>N</td>
+ * <td>Maxlength=500</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>sliderFooter</td>
+ * <td>Integer</td>
+ * <td><p>Text footer to display (meant to display min/max threshold descriptors).</p>For a static text footer, only one footer string shall be provided in the array. For a dynamic text footer, the number of footer text string in the array must match the numTicks value.For a dynamic text footer, text array string should correlate with potential slider position index.If omitted on supported displays, no footer text shall be displayed.</td>
+ * <td>N</td>
+ * <td>Maxlength=500; Minvalue=1; Maxvalue=26</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * <tr>
+ * <td>timeout</td>
+ * <td>String</td>
+ * <td>App defined timeout. Indicates how long of a timeout from the last action (i.e. sliding control resets timeout). If omitted, the value is set to 10000.</td>
+ * <td>N</td>
+ * <td>Minvalue=0; Maxvalue=65535; Defvalue= 10000</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+*<p><b>Response </b></p>
+*
+*<p><b>Non-default Result Codes:</b></p>
+* <p> SAVED </p>
+* <p> INVALID_DATA</p>
+* <p>OUT_OF_MEMORY</p>
+* <p>TOO_MANY_PENDING_REQUESTS</p>
+* <p>APPLICATION_NOT_REGISTERED</p>
+* <p>GENERIC_ERROR</p>
+*<p> DISALLOWED</p>
+*<p> UNSUPPORTED_RESOURCE </p>
+*<p> REJECTED </p>
+* <p>ABORTED </p>
+*
+ * @since SmartDeviceLink 2.0
+ *
+ */
+public class Slider extends RPCRequest {
+
+ public static final String KEY_NUM_TICKS = "numTicks";
+ public static final String KEY_SLIDER_HEADER = "sliderHeader";
+ public static final String KEY_SLIDER_FOOTER = "sliderFooter";
+ public static final String KEY_POSITION = "position";
+ public static final String KEY_TIMEOUT = "timeout";
+ /**
+ * Constructs a new Slider object
+ */
+ public Slider() {
+ super(FunctionID.SLIDER.toString());
+ }
+
+ /**
+ * Constructs a new Slider object indicated by the Hashtable parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public Slider(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new Slider object \
+ * @param numTicks Number of selectable items on a horizontal axis.
+ * @param position Initial position of slider control (cannot exceed numTicks)
+ * @param sliderHeader Text header to display
+ */
+ public Slider(@NonNull Integer numTicks, @NonNull Integer position, @NonNull String sliderHeader){
+ this();
+ setNumTicks(numTicks);
+ setPosition(position);
+ setSliderHeader(sliderHeader);
+ }
+
+ /**
+ * Sets a number of selectable items on a horizontal axis
+ *
+ * @param numTicks
+ * an Integer value representing a number of selectable items on
+ * a horizontal axis
+ * <p></p>
+ * <b>Notes: </b>Minvalue=2; Maxvalue=26
+ */
+ public void setNumTicks(@NonNull Integer numTicks) {
+ setParameters(KEY_NUM_TICKS, numTicks);
+ }
+
+ /**
+ * Gets a number of selectable items on a horizontal axis
+ *
+ * @return Integer -an Integer value representing a number of selectable
+ * items on a horizontal axis
+ */
+ public Integer getNumTicks() {
+ return getInteger(KEY_NUM_TICKS);
+ }
+
+ /**
+ * Sets an Initial position of slider control
+ *
+ * @param position
+ * an Integer value representing an Initial position of slider
+ * control
+ * <p></p>
+ * <b>Notes: </b>Minvalue=1; Maxvalue=26
+ */
+ public void setPosition(@NonNull Integer position) {
+ setParameters(KEY_POSITION, position);
+ }
+
+ /**
+ * Gets an Initial position of slider control
+ *
+ * @return Integer -an Integer value representing an Initial position of
+ * slider control
+ */
+ public Integer getPosition() {
+ return getInteger(KEY_POSITION);
+ }
+
+ /**
+ * Sets a text header to display
+ *
+ * @param sliderHeader
+ * a String value
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500
+ */
+ public void setSliderHeader(@NonNull String sliderHeader) {
+ setParameters(KEY_SLIDER_HEADER, sliderHeader);
+ }
+
+ /**
+ * Gets a text header to display
+ *
+ * @return String -a String value representing a text header to display
+ */
+ public String getSliderHeader() {
+ return getString(KEY_SLIDER_HEADER);
+ }
+
+ /**
+ * Sets a text footer to display
+ *
+ * @param sliderFooter
+ * a List<String> value representing a text footer to display
+ * <p></p>
+ * <b>Notes: </b>Maxlength=500; Minvalue=1; Maxvalue=26
+ */
+ public void setSliderFooter(List<String> sliderFooter) {
+ setParameters(KEY_SLIDER_FOOTER, sliderFooter);
+ }
+
+ /**
+ * Gets a text footer to display
+ *
+ * @return String -a String value representing a text footer to display
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getSliderFooter() {
+ return (List<String>) getObject(String.class, KEY_SLIDER_FOOTER);
+ }
+
+ /**
+ * Sets an App defined timeout
+ *
+ * @param timeout
+ * an Integer value representing an App defined timeout
+ * <p></p>
+ * <b>Notes: </b>Minvalue=0; Maxvalue=65535; Defvalue=10000
+ */
+ public void setTimeout(Integer timeout) {
+ setParameters(KEY_TIMEOUT, timeout);
+ }
+
+ /**
+ * Gets an App defined timeout
+ * @return Integer -an Integer value representing an App defined timeout
+ */
+ public Integer getTimeout() {
+ return getInteger(KEY_TIMEOUT);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SliderResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SliderResponse.java
new file mode 100644
index 000000000..b7f4a08a6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SliderResponse.java
@@ -0,0 +1,63 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * Slider Response is sent, when Slider has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class SliderResponse extends RPCResponse {
+ public static final String KEY_SLIDER_POSITION = "sliderPosition";
+
+ /**
+ * Constructs a new SliderResponse object
+ */
+ public SliderResponse() {
+ super(FunctionID.SLIDER.toString());
+ }
+
+ /**
+ * Constructs a new SliderResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SliderResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SliderResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SliderResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ /**
+ * Sets an Initial position of slider control
+ * @param sliderPosition
+ */
+ public void setSliderPosition(Integer sliderPosition) {
+ setParameters(KEY_SLIDER_POSITION, sliderPosition);
+ }
+ /**
+ * Gets an Initial position of slider control
+ * @return Integer
+ */
+ public Integer getSliderPosition() {
+ return getInteger(KEY_SLIDER_POSITION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButton.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButton.java
new file mode 100644
index 000000000..cd4517dcd
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButton.java
@@ -0,0 +1,145 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.SoftButtonType;
+import com.smartdevicelink.proxy.rpc.enums.SystemAction;
+
+import java.util.Hashtable;
+/**
+ * <p> A simulated button or keyboard key that is displayed on a touch screen.</p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>SoftButtonType</td>
+ * <td>Describes, whether it is text, highlighted text, icon, or dynamic image. </td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>text</td>
+ * <td>String</td>
+ * <td>Optional text to display (if defined as TEXT or BOTH)</td>
+ * <td>N</td>
+ * <td>Min: 0; Maxlength: 500</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>image</td>
+ * <td>Image</td>
+ * <td>Optional image struct for SoftButton (if defined as IMAGE or BOTH).</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>isHighlighted</td>
+ * <td>Boolean</td>
+ * <td>True, if highlighted False, if not highlighted</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>softButtonID</td>
+ * <td>Integer</td>
+ * <td>Value which is returned via OnButtonPress / OnButtonEvent</td>
+ * <td></td>
+ * <td>Min: 0; Max: 65535</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>systemAction</td>
+ * <td>SystemAction</td>
+ * <td>Parameter indicating whether selecting a SoftButton shall call a specific system action. This is intended to allow Notifications to bring the callee into full / focus; or in the case of persistent overlays, the overlay can persist when a SoftButton is pressed.</td>
+ * <td>N</td>
+ * <td>defvalue: DEFAULT_ACTION</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ *
+ * </table>
+ *
+ */
+public class SoftButton extends RPCStruct {
+
+ public static final String KEY_IS_HIGHLIGHTED = "isHighlighted";
+ public static final String KEY_SOFT_BUTTON_ID = "softButtonID";
+ public static final String KEY_SYSTEM_ACTION = "systemAction";
+ public static final String KEY_TEXT = "text";
+ public static final String KEY_TYPE = "type";
+ public static final String KEY_IMAGE = "image";
+
+ public SoftButton() { }
+
+ /**
+ *
+ * <p>Constructs a new SoftButton object indicated by the Hashtable
+ * parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public SoftButton(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SoftButton object
+ * @param type Describes, whether it is text, highlighted text, icon, or dynamic image.
+ * @param softButtonID Value which is returned via OnButtonPress / OnButtonEvent
+ */
+ public SoftButton(@NonNull SoftButtonType type, @NonNull Integer softButtonID){
+ this();
+ setType(type);
+ setSoftButtonID(softButtonID);
+ }
+
+ public void setType(@NonNull SoftButtonType type) {
+ setValue(KEY_TYPE, type);
+ }
+ public SoftButtonType getType() {
+ return (SoftButtonType) getObject(SoftButtonType.class, KEY_TYPE);
+ }
+ public void setText(String text) {
+ setValue(KEY_TEXT, text);
+ }
+ public String getText() {
+ return getString(KEY_TEXT);
+ }
+ public void setImage(Image image) {
+ setValue(KEY_IMAGE, image);
+ }
+ @SuppressWarnings("unchecked")
+ public Image getImage() {
+ return (Image) getObject(Image.class, KEY_IMAGE);
+ }
+ public void setIsHighlighted(Boolean isHighlighted) {
+ setValue(KEY_IS_HIGHLIGHTED, isHighlighted);
+ }
+ public Boolean getIsHighlighted() {
+ return getBoolean(KEY_IS_HIGHLIGHTED);
+ }
+ public void setSoftButtonID(@NonNull Integer softButtonID) {
+ setValue(KEY_SOFT_BUTTON_ID, softButtonID);
+ }
+ public Integer getSoftButtonID() {
+ return getInteger(KEY_SOFT_BUTTON_ID);
+ }
+ public void setSystemAction(SystemAction systemAction) {
+ setValue(KEY_SYSTEM_ACTION, systemAction);
+ }
+ public SystemAction getSystemAction() {
+ return (SystemAction) getObject(SystemAction.class, KEY_SYSTEM_ACTION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButtonCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButtonCapabilities.java
new file mode 100644
index 000000000..9299e1b2b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SoftButtonCapabilities.java
@@ -0,0 +1,150 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Contains information about a SoftButton's capabilities.</p>
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>shortPressAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports a short press.
+ * Whenever the button is pressed short, onButtonPressed( SHORT) will be invoked.
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>longPressAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports a LONG press.
+ * Whenever the button is pressed long, onButtonPressed( LONG) will be invoked.
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>upDownAvailable</td>
+ * <td>Boolean</td>
+ * <td>The button supports "button down" and "button up". Whenever the button is pressed, onButtonEvent( DOWN) will be invoked.
+ * Whenever the button is released, onButtonEvent( UP) will be invoked. *
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>imageSupported</td>
+ * <td>Boolean</td>
+ * <td>The button supports referencing a static or dynamic image.
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class SoftButtonCapabilities extends RPCStruct {
+ public static final String KEY_IMAGE_SUPPORTED = "imageSupported";
+ public static final String KEY_SHORT_PRESS_AVAILABLE = "shortPressAvailable";
+ public static final String KEY_LONG_PRESS_AVAILABLE = "longPressAvailable";
+ public static final String KEY_UP_DOWN_AVAILABLE = "upDownAvailable";
+
+ /**
+ * Constructs a newly allocated SoftButtonCapabilities object
+ */
+ public SoftButtonCapabilities() { }
+
+ /**
+ * Constructs a newly allocated SoftButtonCapabilities object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public SoftButtonCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated SoftButtonCapabilities object
+ * @param shortPressAvailable The button supports a short press.
+ * @param longPressAvailable The button supports a LONG press
+ * @param upDownAvailable The button supports "button down" and "button up".
+ * @param imageSupported The button supports referencing a static or dynamic image.
+ */
+ public SoftButtonCapabilities(@NonNull Boolean shortPressAvailable, @NonNull Boolean longPressAvailable, @NonNull Boolean upDownAvailable, @NonNull Boolean imageSupported){
+ this();
+ setShortPressAvailable(shortPressAvailable);
+ setLongPressAvailable(longPressAvailable);
+ setUpDownAvailable(upDownAvailable);
+ setImageSupported(imageSupported);
+ }
+
+ /**
+ * set the button supports a short press.
+ * @param shortPressAvailable whether the button supports a short press.
+ */
+ public void setShortPressAvailable(@NonNull Boolean shortPressAvailable) {
+ setValue(KEY_SHORT_PRESS_AVAILABLE, shortPressAvailable);
+ }
+
+ /**
+ * get whether the button supports a short press.
+ * @return whether the button supports a short press
+ */
+ public Boolean getShortPressAvailable() {
+ return getBoolean( KEY_SHORT_PRESS_AVAILABLE);
+ }
+
+ /**
+ * set the button supports a LONG press.
+ * @param longPressAvailable whether the button supports a long press
+ */
+ public void setLongPressAvailable(@NonNull Boolean longPressAvailable) {
+ setValue(KEY_LONG_PRESS_AVAILABLE, longPressAvailable);
+ }
+
+ /**
+ * get whether the button supports a LONG press.
+ * @return whether the button supports a LONG press
+ */
+ public Boolean getLongPressAvailable() {
+ return getBoolean( KEY_LONG_PRESS_AVAILABLE);
+ }
+
+ /**
+ * set the button supports "button down" and "button up".
+ * @param upDownAvailable the button supports "button down" and "button up".
+ */
+ public void setUpDownAvailable(@NonNull Boolean upDownAvailable) {
+ setValue(KEY_UP_DOWN_AVAILABLE, upDownAvailable);
+ }
+
+ /**
+ * get the button supports "button down" and "button up".
+ * @return the button supports "button down" and "button up".
+ */
+ public Boolean getUpDownAvailable() {
+ return getBoolean( KEY_UP_DOWN_AVAILABLE);
+ }
+
+ /**
+ * set the button supports referencing a static or dynamic image.
+ * @param imageSupported whether the button supports referencing a static or dynamic image.
+ */
+ public void setImageSupported(@NonNull Boolean imageSupported) {
+ setValue(KEY_IMAGE_SUPPORTED, imageSupported);
+ }
+
+ /**
+ * get the button supports referencing a static or dynamic image.
+ * @return the button supports referencing a static or dynamic image.
+ */
+ public Boolean getImageSupported() {
+ return getBoolean( KEY_IMAGE_SUPPORTED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Speak.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Speak.java
new file mode 100644
index 000000000..8a0b3a380
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Speak.java
@@ -0,0 +1,168 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Speaks a phrase over the vehicle audio system using SDL's TTS
+ * (text-to-speech) engine. The provided text to be spoken can be simply a text
+ * phrase, or it can consist of phoneme specifications to direct SDL's TTS
+ * engine to speak a "speech-sculpted" phrase
+ * <p></p>
+ * Receipt of the Response indicates the completion of the Speak operation,
+ * regardless of how the Speak operation may have completed (i.e. successfully,
+ * interrupted, terminated, etc.)
+ * <p></p>
+ * Requesting a new Speak operation while the application has another Speak
+ * operation already in progress (i.e. no corresponding Response for that
+ * in-progress Speak operation has been received yet) will terminate the
+ * in-progress Speak operation (causing its corresponding Response to be sent by
+ * SDL) and begin the requested Speak operation
+ * <p></p>
+ * Requesting a new Speak operation while the application has an <i>
+ * {@linkplain Alert}</i> operation already in progress (i.e. no corresponding
+ * Response for that in-progress <i>{@linkplain Alert}</i> operation has been
+ * received yet) will result in the Speak operation request being rejected
+ * (indicated in the Response to the Request)
+ * <p></p>
+ * Requesting a new <i>{@linkplain Alert}</i> operation while the application
+ * has a Speak operation already in progress (i.e. no corresponding Response for
+ * that in-progress Speak operation has been received yet) will terminate the
+ * in-progress Speak operation (causing its corresponding Response to be sent by
+ * SDL) and begin the requested <i>{@linkplain Alert}</i> operation
+ * <p></p>
+ * Requesting a new Speak operation while the application has a <i>
+ * {@linkplain PerformInteraction}</i> operation already in progress (i.e. no
+ * corresponding Response for that in-progress <i>
+ * {@linkplain PerformInteraction}</i> operation has been received yet) will
+ * result in the Speak operation request being rejected (indicated in the
+ * Response to the Request)
+ * <p></p>
+ * Requesting a <i> {@linkplain PerformInteraction}</i> operation while the
+ * application has a Speak operation already in progress (i.e. no corresponding
+ * Response for that in-progress Speak operation has been received yet) will
+ * terminate the in-progress Speak operation (causing its corresponding Response
+ * to be sent by SDL) and begin the requested <i>
+ * {@linkplain PerformInteraction}</i> operation
+ * <p></p>
+ *
+ * <p><b>HMI Status Requirements:</b></p>
+ * <p>HMILevel: FULL, Limited</p>
+ *<p> AudioStreamingState: Any</p>
+ * <p>SystemContext: MAIN, MENU, VR</p>
+ *
+ * <p><b>Notes: </b></p>
+ * <ul>
+ * <li>When <i>{@linkplain Alert}</i> is issued with MENU in effect, <i>
+ * {@linkplain Alert}</i> is queued and "played" when MENU interaction is
+ * completed (i.e. SystemContext reverts to MAIN). When <i>{@linkplain Alert}
+ * </i> is issued with VR in effect, <i>{@linkplain Alert}</i> is queued and
+ * "played" when VR interaction is completed (i.e. SystemContext reverts to
+ * MAIN)</li>
+ * <li>When both <i>{@linkplain Alert}</i> and Speak are queued during MENU or
+ * VR, they are "played" back in the order in which they were queued, with all
+ * existing rules for "collisions" still in effect</li>
+ * </ul>
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th> Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>ttsChunks</td>
+ * <td>String</td>
+ * <td>An array of 1-100 TTSChunk structs which, taken together, specify the phrase to be spoken.</td>
+ * <td>Y</td>
+ * <td><p>The array must have 1-100 elements. </p><p>The total length of the phrase composed from the ttsChunks provided must be less than 500 characters or the request will be rejected. </p>Each chunk can be no more than 500 characters.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * <p><b>Response</b> </p>
+ * <p>This Response notifies the application of the completion, interruption, or failure of a Speak Request.</p>
+ *
+ * <p><b>Non-default Result Codes:</b> </p>
+ *
+ * <p> SUCCESS </p>
+ *<p> INVALID_DATA</p>
+ * <p> OUT_OF_MEMORY </p>
+ * <p>APPLICATION_NOT_REGISTERED </p>
+ * <p>TOO_MANY_PENDING_REQUESTS </p>
+ *<p> GENERIC_ERROR </p>
+ * <p>REJECTED </p>
+ * <p>DISALLOWED </p>
+ * <p>ABORTED </p>
+ *
+ * <p><b>Additional Notes:</b></p><ul>Total character limit depends on platform. Chunks are limited to 500 characters; however you can have multiple TTS chunks. On Gen 1.1 there is a total character limit of 500 characters across all chunks. This could vary according to the VCA.
+ *
+ * @since SmartDeviceLink 1.0
+ * @see Alert
+ */
+public class Speak extends RPCRequest {
+ public static final String KEY_TTS_CHUNKS = "ttsChunks";
+
+ /**
+ * Constructs a new Speak object
+ */
+ public Speak() {
+ super(FunctionID.SPEAK.toString());
+ }
+ /**
+ * Constructs a new Speak object indicated by the Hashtable parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public Speak(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new Speak object
+ * @param ttsChunks An array of 1-100 TTSChunk structs which, taken together, specify the phrase to be spoken.
+ */
+ public Speak(@NonNull List<TTSChunk> ttsChunks){
+ this();
+ setTtsChunks(ttsChunks);
+ }
+ /**
+ * Gets a List<TTSChunk> representing an array of 1-100 TTSChunk structs
+ * which, taken together, specify the phrase to be spoken
+ *
+ * @return List<TTSChunk> -an Array of 1-100 TTSChunk specify the phrase to be spoken
+ */
+ @SuppressWarnings("unchecked")
+ public List<TTSChunk> getTtsChunks() {
+ return (List<TTSChunk>) getObject(TTSChunk.class, KEY_TTS_CHUNKS);
+ }
+ /**
+ * Sets a List<TTSChunk> representing an array of 1-100 TTSChunk structs
+ * which, taken together, specify the phrase to be spoken
+ *
+ * @param ttsChunks
+ * a List<TTSChunk> value representing an array of 1-100 TTSChunk structs
+ * which specify the phrase to be spoken
+ * <p></p>
+ * <ul>
+ * <li>The array must have 1-100 elements</li>
+ * <li>The total length of the phrase composed from the ttsChunks
+ * provided must be less than 500 characters or the request will
+ * be rejected</li>
+ * <li>Each chunk can be no more than 500 characters</li>
+ * </ul>
+ */
+ public void setTtsChunks( @NonNull List<TTSChunk> ttsChunks ) {
+ setParameters(KEY_TTS_CHUNKS, ttsChunks);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SpeakResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SpeakResponse.java
new file mode 100644
index 000000000..5f78b609b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SpeakResponse.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Speak Response is sent, when Speak has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SpeakResponse extends RPCResponse {
+
+ /**
+ * Constructs a new SpeakResponse object
+ */
+ public SpeakResponse() {
+ super(FunctionID.SPEAK.toString());
+ }
+
+ /**
+ * Constructs a new SpeakResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SpeakResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SpeakResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SpeakResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/StartTime.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/StartTime.java
new file mode 100644
index 000000000..97efa8c05
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/StartTime.java
@@ -0,0 +1,128 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Describes the hour, minute and second values used to set the media clock.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>hours</td>
+ * <td>Integer</td>
+ * <td>The hour. Minvalue="0", maxvalue="59"
+ * <p><b>Note:</b></p>Some display types only support a max value of 19. If out of range, it will be rejected.
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>minutes</td>
+ * <td>Integer</td>
+ * <td>The minute. Minvalue="0", maxvalue="59".</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>seconds</td>
+ * <td>Integer</td>
+ * <td>The second. Minvalue="0", maxvalue="59".</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ */
+public class StartTime extends RPCStruct {
+ public static final String KEY_MINUTES = "minutes";
+ public static final String KEY_SECONDS = "seconds";
+ public static final String KEY_HOURS = "hours";
+
+ /**
+ * Constructs a newly allocated StartTime object
+ */
+ public StartTime() { }
+ /**
+ * Constructs a newly allocated StartTime object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public StartTime(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated StartTime object
+ * @param timeInterval time interval in seconds
+ */
+ public StartTime(@NonNull Integer timeInterval){
+ this();
+ int hours = timeInterval / 3600;
+ int minutes = (timeInterval % 3600) / 60;
+ int seconds = timeInterval % 60;
+ setHours(hours);
+ setMinutes(minutes);
+ setSeconds(seconds);
+ }
+ /**
+ * Constructs a newly allocated StartTime object
+ * @param hours The hour
+ * @param minutes The minute
+ * @param seconds The second
+ */
+ public StartTime(@NonNull Integer hours, @NonNull Integer minutes, @NonNull Integer seconds){
+ this();
+ setHours(hours);
+ setMinutes(minutes);
+ setSeconds(seconds);
+ }
+ /**
+ * Get the hour. Minvalue="0", maxvalue="59"
+ * <p><b>Note:</b></p>Some display types only support a max value of 19. If out of range, it will be rejected.
+ * @return hours Minvalue="0", maxvalue="59"
+ */
+ public Integer getHours() {
+ return getInteger( KEY_HOURS );
+ }
+ /**
+ * Set the hour. Minvalue="0", maxvalue="59"
+ * <p><b>Note:</b></p>Some display types only support a max value of 19. If out of range, it will be rejected.
+ * @param hours min: 0; max: 59
+ */
+ public void setHours(@NonNull Integer hours ) {
+ setValue(KEY_HOURS, hours);
+ }
+ /**
+ * Get the minute. Minvalue="0", maxvalue="59".
+ * @return minutes Minvalue="0", maxvalue="59"
+ */
+ public Integer getMinutes() {
+ return getInteger( KEY_MINUTES );
+ }
+ /**
+ * Set the minute. Minvalue="0", maxvalue="59".
+ * @param minutes min: 0; max: 59
+ */
+ public void setMinutes( @NonNull Integer minutes ) {
+ setValue(KEY_MINUTES, minutes);
+ }
+ /**
+ * Get the second. Minvalue="0", maxvalue="59".
+ * @return seconds. Minvalue="0", maxvalue="59".
+ */
+ public Integer getSeconds() {
+ return getInteger( KEY_SECONDS );
+ }
+ /**
+ * Set the second. Minvalue="0", maxvalue="59".
+ * @param seconds min: 0 max: 59
+ */
+ public void setSeconds( @NonNull Integer seconds ) {
+ setValue(KEY_SECONDS, seconds);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/StationIDNumber.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/StationIDNumber.java
new file mode 100644
index 000000000..a8e926a2b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/StationIDNumber.java
@@ -0,0 +1,54 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class StationIDNumber extends RPCStruct {
+ public static final String KEY_COUNTRY_CODE = "countryCode";
+ public static final String KEY_FCC_FACILITY_ID = "fccFacilityId";
+
+ public StationIDNumber() {
+ }
+
+ public StationIDNumber(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the countryCode portion of the StationIDNumber class
+ *
+ * @param countryCode Binary Representation of ITU Country Code. USA Code is 001.
+ */
+ public void setCountryCode(Integer countryCode) {
+ setValue(KEY_COUNTRY_CODE, countryCode);
+ }
+
+ /**
+ * Gets the countryCode portion of the StationIDNumber class
+ *
+ * @return Integer - Binary Representation of ITU Country Code. USA Code is 001.
+ */
+ public Integer getCountryCode() {
+ return getInteger(KEY_COUNTRY_CODE);
+ }
+
+ /**
+ * Sets the fccFacilityId portion of the StationIDNumber class
+ *
+ * @param fccFacilityId Binary representation of unique facility ID assigned by the FCC; FCC controlled for U.S. territory.
+ */
+ public void setFccFacilityId(Integer fccFacilityId) {
+ setValue(KEY_FCC_FACILITY_ID, fccFacilityId);
+ }
+
+ /**
+ * Gets the fccFacilityId portion of the StationIDNumber class
+ *
+ * @return Integer - Binary representation of unique facility ID assigned by the FCC; FCC controlled for U.S. territory.
+ */
+ public Integer getFccFacilityId() {
+ return getInteger(KEY_FCC_FACILITY_ID);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/StreamRPCResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/StreamRPCResponse.java
new file mode 100644
index 000000000..d1de24993
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/StreamRPCResponse.java
@@ -0,0 +1,33 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.Hashtable;
+
+public class StreamRPCResponse extends RPCResponse {
+ public static final String KEY_FILENAME = "fileName";
+ public static final String KEY_FILESIZE = "fileSize";
+
+ public StreamRPCResponse() {
+ super(FunctionID.STREAM_RPC.toString());
+ }
+ public StreamRPCResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setFileName(String fileName) {
+ setParameters(KEY_FILENAME, fileName);
+ }
+ public String getFileName() {
+ return getString(KEY_FILENAME);
+ }
+
+ public void setFileSize(Long fileSize) {
+ setParameters(KEY_FILESIZE, fileSize);
+ }
+ public Long getFileSize() {
+ return getLong(KEY_FILESIZE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButton.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButton.java
new file mode 100644
index 000000000..80e988e35
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButton.java
@@ -0,0 +1,121 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+
+import java.util.Hashtable;
+
+/**
+ *<p> Establishes a subscription to button notifications for HMI buttons. Buttons
+ * are not necessarily physical buttons, but can also be "soft" buttons on a
+ * touch screen, depending on the display in the vehicle. Once subscribed to a
+ * particular button, an application will receive both
+ * {@linkplain OnButtonEvent} and {@linkplain OnButtonPress} notifications
+ * whenever that button is pressed. The application may also unsubscribe from
+ * notifications for a button by invoking the {@linkplain UnsubscribeButton}
+ * operation</p>
+ *
+ * <p>When a button is depressed, an {@linkplain OnButtonEvent} notification is
+ * sent to the application with a ButtonEventMode of BUTTONDOWN. When that same
+ * button is released, an {@linkplain OnButtonEvent} notification is sent to the
+ * application with a ButtonEventMode of BUTTONUP</p>
+ *
+ * <p>When the duration of a button depression (that is, time between depression
+ * and release) is less than two seconds, an {@linkplain OnButtonPress}
+ * notification is sent to the application (at the moment the button is
+ * released) with a ButtonPressMode of SHORT. When the duration is two or more
+ * seconds, an {@linkplain OnButtonPress} notification is sent to the
+ * application (at the moment the two seconds have elapsed) with a
+ * ButtonPressMode of LONG</p>
+ *
+ * The purpose of {@linkplain OnButtonPress} notifications is to allow for
+ * programmatic detection of long button presses similar to those used to store
+ * presets while listening to the radio, for example
+ *
+ * <p>When a button is depressed and released, the sequence in which notifications
+ * will be sent to the application is as follows:</p>
+ *
+ * <p>For short presses:</p>
+ * <ul>
+ * <li>OnButtonEvent (ButtonEventMode = BUTTONDOWN)</li>
+ * <li>OnButtonEvent (ButtonEventMode = BUTTONUP)</li>
+ * <li>OnButtonPress (ButtonPressMode = SHORT)</li>
+ * </ul>
+ *
+ * <p>For long presses:</p>
+ * <ul>
+ * <li>OnButtonEvent (ButtonEventMode = BUTTONDOWN)</li>
+ * <li>OnButtonEvent (ButtonEventMode = BUTTONUP)</li>
+ * <li>OnButtonPress (ButtonPressMode = LONG)</li>
+ * </ul>
+ *
+ *<p> <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>buttonName</td>
+ * <td>ButtonName</td>
+ * <td>Name of the button to subscribe.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0 </td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ * @see UnsubscribeButton
+ */
+public class SubscribeButton extends RPCRequest {
+ public static final String KEY_BUTTON_NAME = "buttonName";
+
+ /**
+ * Constructs a new SubscribeButton object
+ */
+ public SubscribeButton() {
+ super(FunctionID.SUBSCRIBE_BUTTON.toString());
+ }
+ /**
+ * <p>Constructs a new SubscribeButton object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash The Hashtable to use
+ */
+ public SubscribeButton(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SubscribeButton object
+ * @param buttonName Name of the button to subscribe.
+ */
+ public SubscribeButton(@NonNull ButtonName buttonName){
+ this();
+ setButtonName(buttonName);
+ }
+ /**
+ * Gets the name of the button to subscribe to
+ * @return ButtonName -an enum value, see <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonName}</i>
+ */
+ public ButtonName getButtonName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_BUTTON_NAME);
+ }
+ /**
+ * Sets a name of the button to subscribe to
+ * @param buttonName a <i>{@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonName}</i> value
+ */
+ public void setButtonName(@NonNull ButtonName buttonName ) {
+ setParameters(KEY_BUTTON_NAME, buttonName);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButtonResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButtonResponse.java
new file mode 100644
index 000000000..fbed88bbc
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeButtonResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Sub scribeButton Response is sent, when SubscribeButton has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class SubscribeButtonResponse extends RPCResponse {
+
+ /**
+ * Constructs a new SubscribeButtonResponse object
+ */
+ public SubscribeButtonResponse() {
+ super(FunctionID.SUBSCRIBE_BUTTON.toString());
+ }
+
+ /**
+ * <p>Constructs a new SubscribeButtonResponse object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash The Hashtable to use
+ */
+ public SubscribeButtonResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SubscribeButtonResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SubscribeButtonResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java
new file mode 100644
index 000000000..700f1dcb9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java
@@ -0,0 +1,836 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+/**
+ * Subscribes for specific published vehicle data items. The data will be only
+ * sent, if it has changed. The application will be notified by the
+ * onVehicleData notification whenever new data is available. The update rate is
+ * very much dependent on sensors, vehicle architecture and vehicle type. Be
+ * also prepared for the situation that a signal is not available on a vehicle
+ *
+ * <p>Function Group: Location, VehicleInfo and DrivingChara</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Version</th>
+ * </tr>
+ * <tr>
+ * <td>gps</td>
+ * <td>Boolean</td>
+ * <td>GPS data. See {@linkplain GPSData}for details</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>speed</td>
+ * <td>Boolean</td>
+ * <td>The vehicle speed in kilometers per hour</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>rpm</td>
+ * <td>Boolean</td>
+ * <td>The number of revolutions per minute of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel</td>
+ * <td>Boolean</td>
+ * <td>The fuel level in the tank (percentage)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel_State</td>
+ * <td>Boolean</td>
+ * <td>The fuel level state</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>instantFuelConsumption</td>
+ * <td>Boolean</td>
+ * <td>The instantaneous fuel consumption in microlitres</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>externalTemperature</td>
+ * <td>Boolean</td>
+ * <td>The external temperature in degrees celsius</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>prndl</td>
+ * <td>Boolean</td>
+ * <td>Currently selected gear.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>tirePressure</td>
+ * <td>Boolean</td>
+ * <td>Tire pressure status</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>odometer</td>
+ * <td>Boolean</td>
+ * <td>Odometer in km</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>beltStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the seat belts</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>bodyInformation</td>
+ * <td>Boolean</td>
+ * <td>The body information including ignition status and internal temp</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>deviceStatus</td>
+ * <td>Boolean</td>
+ * <td>The device status including signal and battery strength</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>driverBraking</td>
+ * <td>Boolean</td>
+ * <td>The status of the brake pedal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>wiperStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the wipers</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>headLampStatus</td>
+ * <td>Boolean</td>
+ * <td>Status of the head lamps</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>engineTorque</td>
+ * <td>Boolean</td>
+ * <td>Torque value for engine (in Nm) on non-diesel variants</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>engineOilLife</td>
+ * <td>Boolean</td>
+ * <td>The estimated percentage of remaining oil life of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0 </td>
+ * </tr>
+ * <tr>
+ * <td>accPedalPosition</td>
+ * <td>Boolean</td>
+ * <td>Accelerator pedal position (percentage depressed)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>steeringWheelAngle</td>
+ * <td>Boolean</td>
+ * <td>Current angle of the steering wheel (in deg)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>eCallInfo</td>
+ * <td>Boolean</td>
+ * <td>Emergency Call notification and confirmation data.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>airbagStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the air bags.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>emergencyEvent</td>
+ * <td>Boolean</td>
+ * <td>Information related to an emergency event (and if it occurred).</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>clusterModeStatus</td>
+ * <td>Boolean</td>
+ * <td>The status modes of the instrument panel cluster.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>myKey</td>
+ * <td>Boolean</td>
+ * <td>Information related to the MyKey feature.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>turnSignal</td>
+ * <td>Boolean</td>
+ * <td>@see TurnSignal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0 </td>
+ * </tr>
+ * <tr>
+ * <td>cloudAppVehicleID</td>
+ * <td>Boolean</td>
+ * <td>ID for the vehicle when connecting to cloud applications</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.1 </td>
+ * </tr>
+ * </table>
+ *
+ * <p> <b>Response</b></p>
+ *<p><b>Non-default Result Codes:</b></p>
+ *<p>SUCCESS</p>
+ *<p>WARNINGS </p>
+ *<p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>IGNORED </p>
+ * <p>DISALLOWED</p>
+ * <p>USER_DISALLOWED </p>
+ *
+ * @since SmartDeviceLink 2.0
+ * @see UnsubscribeVehicleData
+ * @see GetVehicleData
+ */
+public class SubscribeVehicleData extends RPCRequest {
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new SubscribeVehicleData object
+ */
+ public SubscribeVehicleData() {
+ super(FunctionID.SUBSCRIBE_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new SubscribeVehicleData object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public SubscribeVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes Gps data
+ *
+ * @param gps
+ * a boolean value
+ */
+ public void setGps(Boolean gps) {
+ setParameters(KEY_GPS, gps);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Gps data has been subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Gps data has been
+ * subscribed.
+ */
+ public Boolean getGps() {
+ return getBoolean(KEY_GPS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes speed data
+ *
+ * @param speed
+ * a boolean value
+ */
+ public void setSpeed(Boolean speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Speed data has been subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Speed data has been
+ * subscribed.
+ */
+ public Boolean getSpeed() {
+ return getBoolean(KEY_SPEED);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes rpm data
+ *
+ * @param rpm
+ * a boolean value
+ */
+ public void setRpm(Boolean rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the rpm data has been subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the rpm data has been
+ * subscribed.
+ */
+ public Boolean getRpm() {
+ return getBoolean(KEY_RPM);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes FuelLevel data
+ *
+ * @param fuelLevel
+ * a boolean value
+ */
+ public void setFuelLevel(Boolean fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the FuelLevel data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the FuelLevel data has
+ * been subscribed.
+ */
+ public Boolean getFuelLevel() {
+ return getBoolean(KEY_FUEL_LEVEL);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes fuelLevel_State data
+ *
+ * @param fuelLevel_State
+ * a boolean value
+ */
+ @Deprecated
+ public void setFuelLevel_State(Boolean fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the fuelLevel_State data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the fuelLevel_State data
+ * has been subscribed.
+ */
+ @Deprecated
+ public Boolean getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes fuelLevelState data
+ *
+ * @param fuelLevelState
+ * a boolean value
+ */
+ public void setFuelLevelState(Boolean fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the fuelLevelState data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the fuelLevelState data
+ * has been subscribed.
+ */
+ public Boolean getFuelLevelState() {
+ return getBoolean(KEY_FUEL_LEVEL_STATE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes instantFuelConsumption data
+ *
+ * @param instantFuelConsumption
+ * a boolean value
+ */
+ public void setInstantFuelConsumption(Boolean instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the getInstantFuelConsumption data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the getInstantFuelConsumption data
+ * has been subscribed.
+ */
+ public Boolean getInstantFuelConsumption() {
+ return getBoolean(KEY_INSTANT_FUEL_CONSUMPTION);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes externalTemperature data
+ *
+ * @param externalTemperature
+ * a boolean value
+ */
+ public void setExternalTemperature(Boolean externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the externalTemperature data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the externalTemperature data
+ * has been subscribed.
+ */
+ public Boolean getExternalTemperature() {
+ return getBoolean(KEY_EXTERNAL_TEMPERATURE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes Currently selected gear data
+ *
+ * @param prndl
+ * a boolean value
+ */
+ public void setPrndl(Boolean prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Currently selected gear data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Currently selected gear data
+ * has been subscribed.
+ */
+ public Boolean getPrndl() {
+ return getBoolean(KEY_PRNDL);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes tire pressure status data
+ *
+ * @param tirePressure
+ * a boolean value
+ */
+ public void setTirePressure(Boolean tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the tire pressure status data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the tire pressure status data
+ * has been subscribed.
+ */
+ public Boolean getTirePressure() {
+ return getBoolean(KEY_TIRE_PRESSURE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes odometer data
+ *
+ * @param odometer
+ * a boolean value
+ */
+ public void setOdometer(Boolean odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the odometer data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the odometer data
+ * has been subscribed.
+ */
+ public Boolean getOdometer() {
+ return getBoolean(KEY_ODOMETER);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes belt Status data
+ *
+ * @param beltStatus
+ * a boolean value
+ */
+ public void setBeltStatus(Boolean beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the belt Status data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the belt Status data
+ * has been subscribed.
+ */
+ public Boolean getBeltStatus() {
+ return getBoolean(KEY_BELT_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes body Information data
+ *
+ * @param bodyInformation
+ * a boolean value
+ */
+ public void setBodyInformation(Boolean bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the body Information data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the body Information data
+ * has been subscribed.
+ */
+ public Boolean getBodyInformation() {
+ return getBoolean(KEY_BODY_INFORMATION);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes device Status data
+ *
+ * @param deviceStatus
+ * a boolean value
+ */
+ public void setDeviceStatus(Boolean deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the device Status data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the device Status data
+ * has been subscribed.
+ */
+ public Boolean getDeviceStatus() {
+ return getBoolean(KEY_DEVICE_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes driver Braking data
+ *
+ * @param driverBraking
+ * a boolean value
+ */
+ public void setDriverBraking(Boolean driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the driver Braking data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the driver Braking data
+ * has been subscribed.
+ */
+ public Boolean getDriverBraking() {
+ return getBoolean(KEY_DRIVER_BRAKING);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes wiper Status data
+ *
+ * @param wiperStatus
+ * a boolean value
+ */
+ public void setWiperStatus(Boolean wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the wiper Status data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the wiper Status data
+ * has been subscribed.
+ */
+ public Boolean getWiperStatus() {
+ return getBoolean(KEY_WIPER_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes Head Lamp Status data
+ *
+ * @param headLampStatus
+ * a boolean value
+ */
+ public void setHeadLampStatus(Boolean headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Head Lamp Status data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Head Lamp Status data
+ * has been subscribed.
+ */
+ public Boolean getHeadLampStatus() {
+ return getBoolean(KEY_HEAD_LAMP_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes Engine Torque data
+ *
+ * @param engineTorque
+ * a boolean value
+ */
+ public void setEngineTorque(Boolean engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Engine Oil Life data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Engine Oil Life data
+ * has been subscribed.
+ */
+ public Boolean getEngineOilLife() {
+ return getBoolean(KEY_ENGINE_OIL_LIFE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes Engine Oil Life data
+ *
+ * @param engineOilLife
+ * a boolean value
+ */
+ public void setEngineOilLife(Boolean engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Engine Torque data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Engine Torque data
+ * has been subscribed.
+ */
+ public Boolean getEngineTorque() {
+ return getBoolean(KEY_ENGINE_TORQUE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes accPedalPosition data
+ *
+ * @param accPedalPosition
+ * a boolean value
+ */
+ public void setAccPedalPosition(Boolean accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the accPedalPosition data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the accPedalPosition data
+ * has been subscribed.
+ */
+ public Boolean getAccPedalPosition() {
+ return getBoolean(KEY_ACC_PEDAL_POSITION);
+ }
+
+ public void setSteeringWheelAngle(Boolean steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+
+ public Boolean getSteeringWheelAngle() {
+ return getBoolean(KEY_STEERING_WHEEL_ANGLE);
+ }
+ public void setECallInfo(Boolean eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ public Boolean getECallInfo() {
+ return getBoolean(KEY_E_CALL_INFO);
+ }
+ public void setAirbagStatus(Boolean airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ public Boolean getAirbagStatus() {
+ return getBoolean(KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(Boolean emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ public Boolean getEmergencyEvent() {
+ return getBoolean(KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(Boolean clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ public Boolean getClusterModeStatus() {
+ return getBoolean(KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(Boolean myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ public Boolean getMyKey() {
+ return getBoolean(KEY_MY_KEY);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes fuelRange data
+ *
+ * @param fuelRange
+ * a boolean value
+ */
+ public void setFuelRange(Boolean fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Fuel Range data has been
+ * subscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Fuel Range data
+ * has been subscribed.
+ *
+ */
+ public Boolean getFuelRange() {
+ return getBoolean(KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes turnSignal data
+ * @param turnSignal a boolean value
+ */
+ public void setTurnSignal(Boolean turnSignal) { setParameters(KEY_TURN_SIGNAL, turnSignal); }
+
+ /**
+ * Gets a boolean value. If true, means the turnSignal data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getTurnSignal() { return getBoolean(KEY_TURN_SIGNAL); }
+
+ /**
+ * Sets a boolean value. If true, subscribes electronicParkBrakeStatus data
+ * @param electronicParkBrakeStatus a boolean value
+ */
+ public void setElectronicParkBrakeStatus(boolean electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the electronicParkBrakeStatus data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getElectronicParkBrakeStatus(){
+ return getBoolean(KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes cloudAppVehicleID data
+ * @param cloudAppVehicleID a boolean value
+ */
+ public void setCloudAppVehicleID(boolean cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the cloudAppVehicleDataID data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getCloudAppVehicleID(){
+ return getBoolean(KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java
new file mode 100644
index 000000000..cc27233a8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java
@@ -0,0 +1,486 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * Subscribe Vehicle Data Response is sent, when SubscribeVehicleData has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class SubscribeVehicleDataResponse extends RPCResponse {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new SubscribeVehicleDataResponse object
+ */
+ public SubscribeVehicleDataResponse() {
+ super(FunctionID.SUBSCRIBE_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * <p>Constructs a new SubscribeVehicleDataResponse object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash The Hashtable to use
+ */
+ public SubscribeVehicleDataResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a new SubscribeVehicleDataResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SubscribeVehicleDataResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+ /**
+ * Sets gps
+ * @param gps
+ */
+ public void setGps(VehicleDataResult gps) {
+ setParameters(KEY_GPS, gps);
+ }
+ /**
+ * Gets gps
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getGps() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_GPS);
+ }
+ /**
+ * Sets speed
+ * @param speed
+ */
+ public void setSpeed(VehicleDataResult speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+ /**
+ * Gets speed
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getSpeed() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_SPEED);
+ }
+ /**
+ * Sets rpm
+ * @param rpm
+ */
+ public void setRpm(VehicleDataResult rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+ /**
+ * Gets rpm
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getRpm() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_RPM);
+ }
+ /**
+ * Sets Fuel Level
+ * @param fuelLevel
+ */
+ public void setFuelLevel(VehicleDataResult fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+ /**
+ * Gets Fuel Level
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelLevel() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_LEVEL);
+ }
+ /**
+ * Sets Fuel Level State
+ * @param fuelLevel_State
+ */
+ @Deprecated
+ public void setFuelLevel_State(VehicleDataResult fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+ /**
+ * Gets Fuel Level State
+ * @return VehicleDataResult
+ */
+ @Deprecated
+ public VehicleDataResult getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+ /**
+ * Sets Fuel Level State
+ * @param fuelLevelState
+ */
+ public void setFuelLevelState(VehicleDataResult fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+ /**
+ * Gets Fuel Level State
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelLevelState() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_LEVEL_STATE);
+ }
+ /**
+ * Sets Instant Fuel Comsumption
+ * @param instantFuelConsumption
+ */
+ public void setInstantFuelConsumption(VehicleDataResult instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+ /**
+ * Gets Instant Fuel Consumption
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getInstantFuelConsumption() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_INSTANT_FUEL_CONSUMPTION);
+ }
+ /**
+ * Sets External Temperature
+ * @param externalTemperature
+ */
+ public void setExternalTemperature(VehicleDataResult externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+ /**
+ * Gets External Temperature
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getExternalTemperature() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EXTERNAL_TEMPERATURE);
+ }
+ /**
+ * Sets currently selected gear data
+ * @param prndl
+ */
+ public void setPrndl(VehicleDataResult prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+ /**
+ * Gets currently selected gear data
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getPrndl() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_PRNDL);
+ }
+ /**
+ * Sets Tire Pressure
+ * @param tirePressure
+ */
+ public void setTirePressure(VehicleDataResult tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+ /**
+ * Gets Tire Pressure
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getTirePressure() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_TIRE_PRESSURE);
+ }
+ /**
+ * Sets Odometer
+ * @param odometer
+ */
+ public void setOdometer(VehicleDataResult odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+ /**
+ * Gets Odometer
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getOdometer() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ODOMETER);
+ }
+ /**
+ * Sets Belt Status
+ * @param beltStatus
+ */
+ public void setBeltStatus(VehicleDataResult beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+ /**
+ * Gets Belt Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getBeltStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_BELT_STATUS);
+ }
+ /**
+ * Sets Body Information
+ * @param bodyInformation
+ */
+ public void setBodyInformation(VehicleDataResult bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+ /**
+ * Gets Body Information
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getBodyInformation() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_BODY_INFORMATION);
+ }
+ /**
+ * Sets Device Status
+ * @param deviceStatus
+ */
+ public void setDeviceStatus(VehicleDataResult deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+ /**
+ * Gets Device Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getDeviceStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_DEVICE_STATUS);
+ }
+ /**
+ * Sets Driver Barking
+ * @param driverBraking
+ */
+ public void setDriverBraking(VehicleDataResult driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+ /**
+ * Gets Driver Barking
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getDriverBraking() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_DRIVER_BRAKING);
+ }
+ /**
+ * Sets wiper Status
+ * @param wiperStatus
+ */
+ public void setWiperStatus(VehicleDataResult wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+ /**
+ * Gets Wiper Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getWiperStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_WIPER_STATUS);
+ }
+ /**
+ * Sets Head Lamp Status
+ * @param headLampStatus
+ */
+ public void setHeadLampStatus(VehicleDataResult headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+ /**
+ * Gets Head Lamp Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getHeadLampStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_HEAD_LAMP_STATUS);
+ }
+ /**
+ * Sets Engine Torque
+ * @param engineTorque
+ */
+ public void setEngineTorque(VehicleDataResult engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+ /**
+ * Gets Engine Torque
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEngineTorque() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ENGINE_TORQUE);
+ }
+ /**
+ * Sets Engine Oil Life
+ * @param engineOilLife
+ */
+ public void setEngineOilLife(VehicleDataResult engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+ /**
+ * Gets Engine Oil Life
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEngineOilLife() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ENGINE_OIL_LIFE);
+ }
+ /**
+ * Sets AccPedal Position
+ * @param accPedalPosition
+ */
+ public void setAccPedalPosition(VehicleDataResult accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+ /**
+ * Gets AccPedal Position
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getAccPedalPosition() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ACC_PEDAL_POSITION);
+ }
+
+ public void setSteeringWheelAngle(VehicleDataResult steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getSteeringWheelAngle() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_STEERING_WHEEL_ANGLE);
+ }
+
+ public void setECallInfo(VehicleDataResult eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getECallInfo() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_E_CALL_INFO);
+ }
+ public void setAirbagStatus(VehicleDataResult airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getAirbagStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(VehicleDataResult emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEmergencyEvent() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(VehicleDataResult clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getClusterModeStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(VehicleDataResult myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getMyKey() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_MY_KEY);
+ }
+
+ /**
+ * Sets Fuel Range
+ * @param fuelRange
+ */
+ public void setFuelRange(VehicleDataResult fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets Fuel Range
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelRange() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets turnSignal
+ * @param turnSignal
+ */
+ public void setTurnSignal(VehicleDataResult turnSignal) {
+ setParameters(KEY_TURN_SIGNAL, turnSignal);
+ }
+
+ /**
+ * Gets turnSignal
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getTurnSignal() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_TURN_SIGNAL);
+ }
+
+ /**
+ * Sets electronicParkBrakeStatus
+ * @param electronicParkBrakeStatus
+ */
+ public void setElectronicParkBrakeStatus(VehicleDataResult electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets electronicParkBrakeStatus
+ * @return VehicleDataResult
+ */
+ public VehicleDataResult getElectronicParkBrakeStatus(){
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets cloudAppVehicleID
+ * @param cloudAppVehicleID a boolean value
+ */
+ public void setCloudAppVehicleID(VehicleDataResult cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the cloudAppVehicleDataID data has been subscribed.
+ * @return a Boolean value.
+ */
+ public VehicleDataResult getCloudAppVehicleID(){
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java
new file mode 100644
index 000000000..e0d3627e2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class SubscribeWayPoints extends RPCRequest {
+ public SubscribeWayPoints() {
+ super(FunctionID.SUBSCRIBE_WAY_POINTS.toString());
+ }
+ public SubscribeWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java
new file mode 100644
index 000000000..8ca946c5c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java
@@ -0,0 +1,30 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class SubscribeWayPointsResponse extends RPCResponse {
+
+ public SubscribeWayPointsResponse() {
+ super(FunctionID.SUBSCRIBE_WAY_POINTS.toString());
+ }
+ public SubscribeWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SubscribeWayPointsResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SubscribeWayPointsResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java
new file mode 100644
index 000000000..4450a83d4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java
@@ -0,0 +1,83 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
+
+import java.util.Hashtable;
+
+/**
+ * Struct that indicates the a SystemCapabilityType and houses different structs to describe particular capabilities
+ */
+
+public class SystemCapability extends RPCStruct {
+ public static final String KEY_SYSTEM_CAPABILITY_TYPE = "systemCapabilityType";
+ public static final String KEY_NAVIGATION_CAPABILITY = "navigationCapability";
+ public static final String KEY_PHONE_CAPABILITY = "phoneCapability";
+ public static final String KEY_VIDEO_STREAMING_CAPABILITY = "videoStreamingCapability";
+ public static final String KEY_REMOTE_CONTROL_CAPABILITY = "remoteControlCapability";
+ public static final String KEY_APP_SERVICES_CAPABILITIES = "appServicesCapabilities";
+
+ public SystemCapability(){}
+
+ public SystemCapability(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Create a systemCapability object
+ * @param systemCapabilityType The type
+ */
+ public SystemCapability(@NonNull SystemCapabilityType systemCapabilityType){
+ this();
+ setSystemCapabilityType(systemCapabilityType);
+ }
+
+ /**
+ *
+ * @return The SystemCapabilityType that indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the SystemCapability Type is NAVIGATION then a "navigationCapability" should exist
+ */
+ public SystemCapabilityType getSystemCapabilityType(){
+ return (SystemCapabilityType) getObject(SystemCapabilityType.class, KEY_SYSTEM_CAPABILITY_TYPE);
+ }
+
+ /**
+ * @param value Set the SystemCapabilityType that indicates which type of data should be changed and identifies which data object exists in this struct.
+ */
+ public void setSystemCapabilityType(@NonNull SystemCapabilityType value){
+ setValue(KEY_SYSTEM_CAPABILITY_TYPE, value);
+ }
+
+ public RPCStruct getCapabilityForType(SystemCapabilityType type) {
+ if (type.equals(SystemCapabilityType.NAVIGATION)) {
+ return (RPCStruct) getObject(NavigationCapability.class, KEY_NAVIGATION_CAPABILITY);
+ } else if (type.equals(SystemCapabilityType.PHONE_CALL)) {
+ return (RPCStruct) getObject(PhoneCapability.class, KEY_PHONE_CAPABILITY);
+ } else if (type.equals(SystemCapabilityType.VIDEO_STREAMING)){
+ return (RPCStruct) getObject(VideoStreamingCapability.class, KEY_VIDEO_STREAMING_CAPABILITY);
+ }else if(type.equals(SystemCapabilityType.REMOTE_CONTROL)){
+ return (RPCStruct) getObject(RemoteControlCapabilities.class, KEY_REMOTE_CONTROL_CAPABILITY);
+ }else if(type.equals(SystemCapabilityType.APP_SERVICES)){
+ return (RPCStruct) getObject(AppServicesCapabilities.class, KEY_APP_SERVICES_CAPABILITIES);
+ }else{
+ return null;
+ }
+ }
+
+ public void setCapabilityForType(SystemCapabilityType type, RPCStruct capability){
+ if(type.equals(SystemCapabilityType.NAVIGATION)){
+ setValue(KEY_NAVIGATION_CAPABILITY, capability);
+ }else if(type.equals(SystemCapabilityType.PHONE_CALL)){
+ setValue(KEY_PHONE_CAPABILITY, capability);
+ }else if(type.equals(SystemCapabilityType.VIDEO_STREAMING)){
+ setValue(KEY_VIDEO_STREAMING_CAPABILITY, capability);
+ }else if(type.equals(SystemCapabilityType.REMOTE_CONTROL)){
+ setValue(KEY_REMOTE_CONTROL_CAPABILITY, capability);
+ }else if(type.equals(SystemCapabilityType.APP_SERVICES)){
+ setValue(KEY_APP_SERVICES_CAPABILITIES, capability);
+ }else{
+ return;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequest.java
new file mode 100644
index 000000000..ee7dad05b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequest.java
@@ -0,0 +1,117 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.RequestType;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/** An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as HTTP, Proprietary, or Authentication requests)
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>requestType</td>
+ * <td>RequestType</td>
+ * <td>The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>requestSubType</td>
+ * <td>String</td>
+ * <td>This parameter is filled for supporting OEM proprietary data exchanges.</td>
+ * <td>N</td>
+ * <td>Max Length: 255</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>fileName</td>
+ * <td>String</td>
+ * <td>Filename of HTTP data to store in predefined system staging area. Mandatory if requestType is HTTP. PROPRIETARY requestType should ignore this parameter. </td>
+ * <td>N</td>
+ * <td>Max Length: 255</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 3.0
+ *
+ *
+ *
+ */
+
+public class SystemRequest extends RPCRequest {
+ public static final String KEY_FILE_NAME = "fileName";
+ public static final String KEY_REQUEST_TYPE = "requestType";
+ public static final String KEY_REQUEST_SUB_TYPE = "requestSubType";
+ public static final String KEY_DATA = "data";
+ /**
+ * Constructs a new SystemRequest object
+ */
+
+ public SystemRequest() {
+ super(FunctionID.SYSTEM_REQUEST.toString());
+ }
+
+ public SystemRequest(boolean bLegacy) {
+ super(FunctionID.ENCODED_SYNC_P_DATA.toString());
+ }
+
+ public SystemRequest(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SystemRequest object
+ * @param requestType The type of system request.
+ */
+ public SystemRequest(@NonNull RequestType requestType){
+ this();
+ setRequestType(requestType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getLegacyData() {
+ return (List<String>) getObject(String.class, KEY_DATA);
+ }
+
+ public void setLegacyData( List<String> data ) {
+ setParameters(KEY_DATA, data);
+ }
+
+ public String getFileName() {
+ return getString(KEY_FILE_NAME);
+ }
+
+ public void setFileName(String fileName) {
+ setParameters(KEY_FILE_NAME, fileName);
+ }
+
+ public RequestType getRequestType() {
+ return (RequestType) getObject(RequestType.class, KEY_REQUEST_TYPE);
+ }
+
+ public void setRequestType(@NonNull RequestType requestType) {
+ setParameters(KEY_REQUEST_TYPE, requestType);
+ }
+
+ public String getRequestSubType() {
+ return getString(KEY_REQUEST_SUB_TYPE);
+ }
+
+ public void setRequestSubType(String requestSubType) {
+ setParameters(KEY_REQUEST_SUB_TYPE, requestSubType);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequestResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequestResponse.java
new file mode 100644
index 000000000..fab8b09ba
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemRequestResponse.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * System Request Response is sent, when SystemRequest has been called
+ *
+ * @since SmartDeviceLink 3.0
+ */
+public class SystemRequestResponse extends RPCResponse {
+ public SystemRequestResponse() {
+ super(FunctionID.SYSTEM_REQUEST.toString());
+ }
+
+ public SystemRequestResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new SystemRequestResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public SystemRequestResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TTSChunk.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TTSChunk.java
new file mode 100644
index 000000000..a1e26d6b2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TTSChunk.java
@@ -0,0 +1,95 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities;
+
+import java.util.Hashtable;
+
+/**
+ * <p>Specifies what is to be spoken. This can be simply a text phrase, which SDL will speak according to its own rules.
+ * It can also be phonemes from either the Microsoft SAPI phoneme set, or from the LHPLUS phoneme set.
+ * It can also be a pre-recorded sound in WAV format (either developer-defined, or provided by the SDL platform).</p>
+ *
+ * <p>In SDL, words, and therefore sentences, can be built up from phonemes and are used to explicitly provide the proper pronounciation to the TTS engine.
+ * For example, to have SDL pronounce the word "read" as "red", rather than as when it is pronounced like "reed",
+ * the developer would use phonemes to express this desired pronounciation.</p>
+ * <p>For more information about phonemes, see <a href="http://en.wikipedia.org/wiki/Phoneme">http://en.wikipedia.org/wiki/Phoneme</a></p>.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>text</td>
+ * <td>String</td>
+ * <td>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.</td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>SpeechCapabilities</td>
+ * <td>Indicates the type of information in the "text" field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound). </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ */
+public class TTSChunk extends RPCStruct {
+ public static final String KEY_TEXT = "text";
+ public static final String KEY_TYPE = "type";
+ /**
+ * Constructs a newly allocated TTSChunk object
+ */
+ public TTSChunk() { }
+ /**
+ * Constructs a newly allocated TTSChunk object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public TTSChunk(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a newly allocated TTSChunk object
+ * @param text 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.
+ * @param type Indicates the type of information in the "text" field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).
+ */
+ public TTSChunk(@NonNull String text, @NonNull SpeechCapabilities type){
+ this();
+ setText(text);
+ setType(type);
+ }
+ /**
+ * Get 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.
+ * @return text to be spoken, or a phoneme specification, or the name of a pre-recorded sound
+ */
+ public String getText() {
+ return getString( KEY_TEXT );
+ }
+ /**
+ * Set the 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.
+ * @param text to be spoken, or a phoneme specification, or the name of a pre-recorded sound.
+ */
+ public void setText(@NonNull String text ) {
+ setValue(KEY_TEXT, text);
+ }
+ /**
+ * Get the type of information in the "text" field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).
+ * @return the type of information in the "text" field
+ */
+ public SpeechCapabilities getType() {
+ return (SpeechCapabilities) getObject(SpeechCapabilities.class, KEY_TYPE);
+ }
+ /**
+ * Set the type of information in the "text" field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).
+ * @param type the type of information in the "text" field
+ */
+ public void setType(@NonNull SpeechCapabilities type ) {
+ setValue(KEY_TYPE, type);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Temperature.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Temperature.java
new file mode 100644
index 000000000..87513a3cd
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Temperature.java
@@ -0,0 +1,69 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.TemperatureUnit;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+public class Temperature extends RPCStruct{
+ public static final String KEY_UNIT = "unit";
+ public static final String KEY_VALUE = "value";
+
+ public Temperature() { }
+ public Temperature(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Create the temperature object
+ * @param unit Temperature Unit.
+ * @param value Temperature Value in TemperatureUnit specified unit
+ */
+ public Temperature(@NonNull TemperatureUnit unit, @NonNull Float value){
+ this();
+ setUnit(unit);
+ setValue(value);
+ }
+
+ /**
+ * Sets the unit portion of the Temperature class
+ *
+ * @param unit
+ * Temperature Unit.
+ */
+ public void setUnit(@NonNull TemperatureUnit unit) {
+ setValue(KEY_UNIT, unit);
+ }
+
+ /**
+ * Gets the unit portion of the Temperature class
+ *
+ * @return TemperatureUnit - Temperature Unit.
+ */
+ public TemperatureUnit getUnit() {
+ return (TemperatureUnit) getObject(TemperatureUnit.class, KEY_UNIT);
+ }
+
+ /**
+ * Gets the value portion of the Temperature class
+ *
+ * @return Float - Temperature Value in TemperatureUnit specified unit. Range depends on OEM and is not checked by SDL.
+ */
+ public Float getValue() {
+ Object value = getValue(KEY_VALUE);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ /**
+ * Sets the value portion of the Temperature class
+ *
+ * @param value
+ * Temperature Value in TemperatureUnit specified unit. Range depends on OEM and is not checked by SDL.
+ */
+ public void setValue(@NonNull Float value) {
+ setValue(KEY_VALUE, value);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateColorScheme.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateColorScheme.java
new file mode 100644
index 000000000..db915a4eb
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateColorScheme.java
@@ -0,0 +1,111 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import java.util.Hashtable;
+
+/**
+ * A color scheme for all display layout templates.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>primaryColor</td>
+ * <td>RGBColor</td>
+ * <td>The primary "accent" color</td>
+ * <td>N</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>secondaryColor</td>
+ * <td>RGBColor</td>
+ * <td>The secondary "accent" color</td>
+ * <td>N</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * <tr>
+ * <td>backgroundColor</td>
+ * <td>RGBColor</td>
+ * <td>The color of the background</td>
+ * <td>N</td>
+ * <td>SmartDeviceLink 5.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 5.0
+ */
+public class TemplateColorScheme extends RPCStruct {
+
+ public static final String KEY_PRIMARY_COLOR = "primaryColor";
+ public static final String KEY_SECONDARY_COLOR = "secondaryColor";
+ public static final String KEY_BACKGROUND_COLOR = "backgroundColor";
+
+ /**
+ * Constructs a new TemplateColorScheme object
+ */
+ public TemplateColorScheme(){
+ }
+
+ /**
+ * Constructs a new TemplateColorScheme object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public TemplateColorScheme(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets the primaryColor of the scheme
+ * @param color an RGBColor object representing the primaryColor
+ */
+ public void setPrimaryColor(RGBColor color) {
+ setValue(KEY_PRIMARY_COLOR, color);
+ }
+
+ /**
+ * Gets the primaryColor of the scheme
+ * @return an RGBColor object representing the primaryColor
+ */
+ public RGBColor getPrimaryColor() {
+ return (RGBColor) getObject(RGBColor.class, KEY_PRIMARY_COLOR);
+ }
+
+ /**
+ * Sets the secondaryColor of the scheme
+ * @param color an RGBColor object representing the secondaryColor
+ */
+ public void setSecondaryColor(RGBColor color) {
+ setValue(KEY_SECONDARY_COLOR, color);
+ }
+
+ /**
+ * Gets the secondaryColor of the scheme
+ * @return an RGBColor object representing the secondaryColor
+ */
+ public RGBColor getSecondaryColor() {
+ return (RGBColor) getObject(RGBColor.class, KEY_SECONDARY_COLOR);
+ }
+
+ /**
+ * Sets the backgroundColor of the scheme
+ * @param color an RGBColor object representing the backgroundColor
+ */
+ public void setBackgroundColor(RGBColor color) {
+ setValue(KEY_BACKGROUND_COLOR, color);
+ }
+
+ /**
+ * Gets the backgroundColor of the scheme
+ * @return an RGBColor object representing the backgroundColor
+ */
+ public RGBColor getBackgroundColor() {
+ return (RGBColor) getObject(RGBColor.class, KEY_BACKGROUND_COLOR);
+ }
+}
+
+
+
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TextField.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TextField.java
new file mode 100644
index 000000000..23e5c148f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TextField.java
@@ -0,0 +1,161 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.CharacterSet;
+import com.smartdevicelink.proxy.rpc.enums.TextFieldName;
+
+import java.util.Hashtable;
+
+/**
+ * Struct defining the characteristics of a displayed field on the HMI.
+ * <p><b> Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>name</td>
+ * <td>TextFieldName</td>
+ * <td>Enumeration identifying the field. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>characterSet</td>
+ * <td>CharacterSet</td>
+ * <td>The character set that is supported in this field. </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>width</td>
+ * <td>Integer</td>
+ * <td>The number of characters in one row of this field.
+ * <ul>
+ * <li>Minvalue="1"</li>
+ * <li>maxvalue="500"</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>rows</td>
+ * <td>Integer</td>
+ * <td>The number of rows for this text field.
+ * <ul>
+ * <li>Minvalue="1"</li>
+ * <li>maxvalue="3"</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 1.0
+ *
+ * @see TextFieldName
+ * @see Alert
+ * @see Show
+ * @see PerformInteraction
+ * @see ScrollableMessage
+ * @see PerformAudioPassThru
+ * @see ShowConstantTbt
+ *
+ */
+public class TextField extends RPCStruct {
+ public static final String KEY_WIDTH = "width";
+ public static final String KEY_CHARACTER_SET = "characterSet";
+ public static final String KEY_ROWS = "rows";
+ public static final String KEY_NAME = "name";
+ /**
+ * Constructs a newly allocated TextField object
+ */
+ public TextField() { }
+ /**
+ * Constructs a newly allocated TextField object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public TextField(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Constructs a newly allocated TextField object
+ * @param name Enumeration identifying the field.
+ * @param characterSet The character set that is supported in this field.
+ * @param width The number of characters in one row of this field.
+ * @param rows The number of rows for this text field.
+ */
+ public TextField(@NonNull TextFieldName name, @NonNull CharacterSet characterSet, @NonNull Integer width, @NonNull Integer rows){
+ this();
+ setName(name);
+ setCharacterSet(characterSet);
+ setWidth(width);
+ setRows(rows);
+ }
+ /**
+ * Get the enumeration identifying the field.
+ * @return the name of TextField
+ */
+ public TextFieldName getName() {
+ return (TextFieldName) getObject(TextFieldName.class, KEY_NAME);
+ }
+ /**
+ * Set the enumeration identifying the field.
+ * @param name the name of TextField
+ */
+ public void setName(@NonNull TextFieldName name ) {
+ setValue(KEY_NAME, name);
+ }
+ /**
+ * Get the character set that is supported in this field.
+ * @return the character set
+ */
+ public CharacterSet getCharacterSet() {
+ return (CharacterSet) getObject(CharacterSet.class, KEY_CHARACTER_SET);
+ }
+ /**
+ * Set the character set that is supported in this field.
+ * @param characterSet - the character set
+ */
+ public void setCharacterSet(@NonNull CharacterSet characterSet ) {
+ setValue(KEY_CHARACTER_SET, characterSet);
+ }
+ /**
+ * Get the number of characters in one row of this field.
+ * <ul>
+ * <li>Minvalue="1"</li>
+ * <li>maxvalue="500"</li>
+ * </ul>
+ * @return the number of characters in one row of this field
+ */
+ public Integer getWidth() {
+ return getInteger( KEY_WIDTH );
+ }
+ /**
+ * Set the number of characters in one row of this field.
+ * <ul>
+ * <li>Minvalue="1"</li>
+ * <li>maxvalue="500"</li>
+ * </ul>
+ * @param width the number of characters in one row of this field
+ */
+ public void setWidth(@NonNull Integer width ) {
+ setValue(KEY_WIDTH, width);
+ }
+ /**
+ *Get the number of rows for this text field.
+ * <ul>
+ * <li>Minvalue="1"</li>
+ * <li>maxvalue="3"</li>
+ * </ul>
+ * @return the number of rows for this text field
+ */
+ public Integer getRows() {
+ return getInteger( KEY_ROWS );
+ }
+ public void setRows(@NonNull Integer rows ) {
+ setValue(KEY_ROWS, rows);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TireStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TireStatus.java
new file mode 100644
index 000000000..15028cc9e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TireStatus.java
@@ -0,0 +1,161 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.WarningLightStatus;
+
+import java.util.Hashtable;
+
+/** <p>The status and pressure of the tires.</p>
+ * <p><b> Parameter List:</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>PressureTellTale</td>
+ * <td>WarningLightStatus</td>
+ * <td>Status of the Tire Pressure TellTale</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>LeftFront</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the left front tire.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>RightFront</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the right front tire.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>LeftRear</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the left rear tire.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>RightRear</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the right rear tire</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>InnerLeftRear</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the inner left rear tire.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>InnerRightRear</td>
+ * <td>SingleTireStatus</td>
+ * <td>The status of the inner right rear tire.</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ * @see WarningLightStatus
+ * @see SingleTireStatus
+ * @see GetVehicleData
+ * @see OnVehicleData
+ */
+
+public class TireStatus extends RPCStruct {
+ public static final String KEY_PRESSURE_TELL_TALE = "pressureTellTale";
+ public static final String KEY_LEFT_FRONT = "leftFront";
+ public static final String KEY_RIGHT_FRONT = "rightFront";
+ public static final String KEY_LEFT_REAR = "leftRear";
+ public static final String KEY_INNER_LEFT_REAR = "innerLeftRear";
+ public static final String KEY_INNER_RIGHT_REAR = "innerRightRear";
+ public static final String KEY_RIGHT_REAR = "rightRear";
+
+ public TireStatus() { }
+
+ /**
+ * <p>Constructs a new TireStatus object indicated by the Hashtable parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public TireStatus(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new TireStatus object
+ * @param pressureTellTale Status of the Tire Pressure TellTale
+ * @param leftFront The status of the left front tire.
+ * @param rightFront The status of the right front tire.
+ * @param leftRear The status of the left rear tire.
+ * @param rightRear The status of the right rear tire
+ * @param innerLeftRear The status of the inner left rear tire.
+ * @param innerRightRear The status of the inner right rear tire.
+ */
+ public TireStatus(@NonNull WarningLightStatus pressureTellTale, @NonNull SingleTireStatus leftFront, @NonNull SingleTireStatus rightFront, @NonNull SingleTireStatus leftRear, @NonNull SingleTireStatus rightRear, @NonNull SingleTireStatus innerLeftRear, @NonNull SingleTireStatus innerRightRear){
+ this();
+ setPressureTellTale(pressureTellTale);
+ setLeftFront(leftFront);
+ setRightFront(rightFront);
+ setLeftRear(leftRear);
+ setRightRear(rightRear);
+ setInnerLeftRear(innerLeftRear);
+ setInnerRightRear(innerRightRear);
+ }
+
+ public void setPressureTellTale(@NonNull WarningLightStatus pressureTellTale) {
+ setValue(KEY_PRESSURE_TELL_TALE, pressureTellTale);
+ }
+ public WarningLightStatus getPressureTellTale() {
+ return (WarningLightStatus) getObject(WarningLightStatus.class, KEY_PRESSURE_TELL_TALE);
+ }
+ public void setLeftFront(@NonNull SingleTireStatus leftFront) {
+ setValue(KEY_LEFT_FRONT, leftFront);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getLeftFront() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_LEFT_FRONT);
+ }
+ public void setRightFront(@NonNull SingleTireStatus rightFront) {
+ setValue(KEY_RIGHT_FRONT, rightFront);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getRightFront() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_RIGHT_FRONT);
+ }
+ public void setLeftRear(@NonNull SingleTireStatus leftRear) {
+ setValue(KEY_LEFT_REAR, leftRear);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getLeftRear() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_LEFT_REAR);
+ }
+ public void setRightRear(@NonNull SingleTireStatus rightRear) {
+ setValue(KEY_RIGHT_REAR, rightRear);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getRightRear() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_RIGHT_REAR);
+ }
+ public void setInnerLeftRear(@NonNull SingleTireStatus innerLeftRear) {
+ setValue(KEY_INNER_LEFT_REAR, innerLeftRear);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getInnerLeftRear() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_INNER_LEFT_REAR);
+ }
+ public void setInnerRightRear(@NonNull SingleTireStatus innerRightRear) {
+ setValue(KEY_INNER_RIGHT_REAR, innerRightRear);
+ }
+ @SuppressWarnings("unchecked")
+ public SingleTireStatus getInnerRightRear() {
+ return (SingleTireStatus) getObject(SingleTireStatus.class, KEY_INNER_RIGHT_REAR);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchCoord.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchCoord.java
new file mode 100644
index 000000000..b14dcfaec
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchCoord.java
@@ -0,0 +1,89 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ * <p>The x or y coordinate of the touch.</p>
+ *
+ *
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th> Version</th>
+ * </tr>
+ * <tr>
+ * <td>x</td>
+ * <td>Integer</td>
+ * <td>The x coordinate of the touch.</td>
+ * <td>Y</td>
+ * <td>minvalue = 0; maxvalue = 10000</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>y</td>
+ * <td>Integer</td>
+ * <td>The y coordinate of the touch.</td>
+ * <td>Y</td>
+ * <td>minvalue = 0; maxvalue = 10000</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ *@see SoftButtonCapabilities
+ *@see ButtonCapabilities
+ *@see OnButtonPress
+ *
+ *@since SmartDeviceLink 3.0
+ */
+
+public class TouchCoord extends RPCStruct {
+ public static final String KEY_X = "x";
+ public static final String KEY_Y = "y";
+
+ public TouchCoord() {}
+
+ /**
+ * <p>Constructs a new TouchCoord object indicated by the Hashtable parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public TouchCoord(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new TouchCoord object
+ * @param x The x coordinate of the touch.
+ * @param y The y coordinate of the touch.
+ */
+ public TouchCoord(@NonNull Integer x, @NonNull Integer y){
+ this();
+ setX(x);
+ setY(y);
+ }
+
+ public void setX(@NonNull Integer x) {
+ setValue(KEY_X, x);
+ }
+
+ public Integer getX() {
+ return getInteger(KEY_X);
+ }
+
+ public void setY(@NonNull Integer y) {
+ setValue(KEY_Y, y);
+ }
+
+ public Integer getY() {
+ return getInteger(KEY_Y);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEvent.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEvent.java
new file mode 100644
index 000000000..0abb75062
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEvent.java
@@ -0,0 +1,169 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * <p>For touchscreen interactions, the mode of how the choices are presented.</p>
+ *
+ * <p><b>Parameter List</b></p>
+ *
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>id</td>
+ * <td>Integer</td>
+ * <td> A touch's unique identifier. The application can track the current touch events by id. If a touch event has type begin, the id should be added to the set of touches. If a touch event has type end, the id should be removed from the set of touches.</td>
+ * <td>N</td>
+ * <td>Min Value: 0; Max Value: 9</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>ts</td>
+ * <td>Float</td>
+ * <td>The time that the touch was recorded. <p> This number can the time since the beginning of the session or something else as long as the units are in milliseconds.</p>
+ * <p>The timestamp is used to determined the rate of change of position of a touch.</p><p>The application also uses the time to verify whether two touches,with different ids, are part of a single action by the user.</p>
+ * <p>If there is only a single timestamp in this array,</p> it is the same for every coordinate in the coordinates array.</td>
+ * <td>Y</td>
+ * <td>minvalue="0" maxvalue="5000000000" minsize="1" maxsize="1000"</td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>c</td>
+ * <td>Integer</td>
+ * <td>The coordinates of the screen area where the touch event occurred.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 3.0
+ *
+ * @see SoftButtonCapabilities
+ * @see ButtonCapabilities
+ * @see OnButtonPress
+ */
+
+public class TouchEvent extends RPCStruct {
+ public static final String KEY_ID = "id";
+ public static final String KEY_TS = "ts";
+ public static final String KEY_C = "c";
+
+ public TouchEvent() { }
+ /**
+ * <p>Constructs a new TouchEvent object indicated by the Hashtable parameter</p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public TouchEvent(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new TouchEvent object
+ * @param id A touch's unique identifier.
+ * @param ts The time that the touch was recorded.
+ * @param c The coordinates of the screen area where the touch event occurred.
+ */
+ public TouchEvent(@NonNull Integer id, @NonNull List<Long> ts, @NonNull List<TouchCoord> c){
+ this();
+ setId(id);
+ setTimestamps(ts);
+ setTouchCoordinates(c);
+ }
+
+ public void setId(@NonNull Integer id) {
+ setValue(KEY_ID, id);
+ }
+
+ public Integer getId() {
+ return getInteger(KEY_ID);
+ }
+
+ /**
+ * Use getTimestamps
+ * @deprecated 4.0.2
+ * @return
+ */
+ @Deprecated
+ public List<Long> getTs() {
+ return getTimestamps();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Long> getTimestamps() {
+ if(getValue(KEY_TS) instanceof List<?>){
+ List<?> list = (List<?>) getValue(KEY_TS);
+ if(list != null && list.size()>0){
+ Object obj = list.get(0);
+ if(obj instanceof Integer){ //Backwards case
+ int size = list.size();
+ List<Integer> listOfInt = (List<Integer>) list;
+ List<Long> listofLongs = new ArrayList<Long>(size);
+ for(int i = 0; i<size;i++){
+ listofLongs.add(listOfInt.get(i).longValue());
+ }
+ return listofLongs;
+ }else if(obj instanceof Long){
+ return (List<Long>) list;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void setTimestamps(@NonNull List<Long> ts){
+ setValue(KEY_TS, ts);
+ }
+
+ /**
+ * Use setTimestamps.
+ * @deprecated 4.0.2
+ * @param ts
+ */
+ @Deprecated
+ public void setTs(List<Long> ts) {
+ setTimestamps(ts);
+ }
+
+ /**
+ * Use getTouchCoordinates
+ * @deprecated 4.0.2
+ * @return
+ */
+ @Deprecated
+ public List<TouchCoord> getC() {
+ return getTouchCoordinates();
+ }
+ @SuppressWarnings("unchecked")
+ public List<TouchCoord> getTouchCoordinates() {
+ return (List<TouchCoord>) getObject(TouchCoord.class, KEY_C);
+ }
+
+ /**
+ * Use setTouchCoordinates
+ * @deprecated 4.0.2
+ * @return
+ */
+ @Deprecated
+ public void setC( List<TouchCoord> c ) {
+ setTouchCoordinates(c);
+ }
+
+ public void setTouchCoordinates(@NonNull List<TouchCoord> c ) {
+ setValue(KEY_C, c);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEventCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEventCapabilities.java
new file mode 100644
index 000000000..c8c441158
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TouchEventCapabilities.java
@@ -0,0 +1,94 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ * Types of screen touch events available in screen area.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>SmartDeviceLink Version</th>
+ * </tr>
+ * <tr>
+ * <td>pressAvailable</td>
+ * <td>Boolean</td>
+ * <td></td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>multiTouchAvailable</td>
+ * <td>Boolean</td>
+ * <td></td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * <tr>
+ * <td>doublePressAvailable</td>
+ * <td>Boolean</td>
+ * <td></td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 3.0 </td>
+ * </tr>
+ * </table>
+ *
+ */
+public class TouchEventCapabilities extends RPCStruct {
+ public static final String KEY_PRESS_AVAILABLE = "pressAvailable";
+ public static final String KEY_MULTI_TOUCH_AVAILABLE = "multiTouchAvailable";
+ public static final String KEY_DOUBLE_PRESS_AVAILABLE = "doublePressAvailable";
+ public TouchEventCapabilities() {}
+
+ public TouchEventCapabilities(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Types of screen touch events available in screen area.
+ * @param pressAvailable if press is available
+ * @param multiTouchAvailable if multi touch is available
+ * @param doublePressAvailable if double press is available
+ */
+ public TouchEventCapabilities(@NonNull Boolean pressAvailable, @NonNull Boolean multiTouchAvailable, @NonNull Boolean doublePressAvailable){
+ this();
+ setPressAvailable(pressAvailable);
+ setMultiTouchAvailable(multiTouchAvailable);
+ setDoublePressAvailable(doublePressAvailable);
+ }
+
+ public void setPressAvailable(@NonNull Boolean pressAvailable) {
+ setValue(KEY_PRESS_AVAILABLE, pressAvailable);
+ }
+
+ public Boolean getPressAvailable() {
+ return getBoolean(KEY_PRESS_AVAILABLE);
+ }
+
+ public void setMultiTouchAvailable(@NonNull Boolean multiTouchAvailable) {
+ setValue(KEY_MULTI_TOUCH_AVAILABLE, multiTouchAvailable);
+ }
+
+ public Boolean getMultiTouchAvailable() {
+ return getBoolean(KEY_MULTI_TOUCH_AVAILABLE);
+ }
+
+ public void setDoublePressAvailable(@NonNull Boolean doublePressAvailable) {
+ setValue(KEY_DOUBLE_PRESS_AVAILABLE, doublePressAvailable);
+ }
+
+ public Boolean getDoublePressAvailable() {
+ return getBoolean(KEY_DOUBLE_PRESS_AVAILABLE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/Turn.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/Turn.java
new file mode 100644
index 000000000..323974019
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/Turn.java
@@ -0,0 +1,86 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Describes a navigation turn including an optional icon
+ *
+ * <p><b>Parameter List</p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>navigationText</td>
+ * <td>String</td>
+ * <td>Text to describe the turn (e.g. streetname)
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>turnIcon</td>
+ * <td>Image</td>
+ * <td>Image to be shown for a turn</td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class Turn extends RPCStruct{
+ public static final String KEY_NAVIGATION_TEXT = "navigationText";
+ public static final String KEY_TURN_IMAGE = "turnIcon";
+
+ public Turn() { }
+ public Turn(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * set the text to describe the turn (e.g. streetname)
+ *
+ * @param navigationText
+ * the text to describe the turn (e.g. streetname)
+ */
+ public void setNavigationText(String navigationText){
+ setValue(KEY_NAVIGATION_TEXT, navigationText);
+ }
+
+ /**
+ * get the text to describe the turn (e.g. streetname)
+ *
+ * @return the text to describe the turn (e.g. streetname)
+ */
+ public String getNavigationText(){
+ return getString(KEY_NAVIGATION_TEXT);
+ }
+
+ /**
+ * set Image to be shown for a turn
+ *
+ * @param turnIcon
+ * the image to be shown for a turn
+ */
+ public void setTurnIcon(Image turnIcon){
+ setValue(KEY_TURN_IMAGE, turnIcon);
+ }
+
+ /**
+ * get the image to be shown for a turn
+ *
+ * @return the image to be shown for a turn
+ */
+ @SuppressWarnings("unchecked")
+ public Image getTurnIcon(){
+ return (Image) getObject(Image.class, KEY_TURN_IMAGE);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterface.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterface.java
new file mode 100644
index 000000000..b832d81c4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterface.java
@@ -0,0 +1,39 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+/**
+ * Terminates an application's interface registration. This causes SDL&reg; to
+ * dispose of all resources associated with the application's interface
+ * registration (e.g. Command Menu items, Choice Sets, button subscriptions,
+ * etc.)
+ *
+ * <p>After the UnregisterAppInterface operation is performed, no other operations
+ * can be performed until a new app interface registration is established by
+ * calling <i>{@linkplain RegisterAppInterface}</i></p>
+ *
+ * @see RegisterAppInterface
+ * @see OnAppInterfaceUnregistered
+ */
+public class UnregisterAppInterface extends RPCRequest {
+ /**
+ * Constructs a new UnregisterAppInterface object
+ */
+ public UnregisterAppInterface() {
+ super(FunctionID.UNREGISTER_APP_INTERFACE.toString());
+ }
+ /**
+ * <p>Constructs a new UnregisterAppInterface object indicated by the Hashtable
+ * parameter</p>
+ *
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public UnregisterAppInterface(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterfaceResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterfaceResponse.java
new file mode 100644
index 000000000..4660dc24e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnregisterAppInterfaceResponse.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Unregister AppInterface Response is sent, when UnregisterAppInterface has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class UnregisterAppInterfaceResponse extends RPCResponse {
+
+ /**
+ * Constructs a new UnregisterAppInterfaceResponse object
+ */
+ public UnregisterAppInterfaceResponse() {
+ super(FunctionID.UNREGISTER_APP_INTERFACE.toString());
+ }
+
+ /**
+ * Constructs a new UnregisterAppInterfaceResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public UnregisterAppInterfaceResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new UnregisterAppInterfaceResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public UnregisterAppInterfaceResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButton.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButton.java
new file mode 100644
index 000000000..53a4e9162
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButton.java
@@ -0,0 +1,99 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.ButtonName;
+
+import java.util.Hashtable;
+
+/**
+ * Deletes a subscription to button notifications for the specified button. For
+ * more information about button subscriptions, see {@linkplain SubscribeButton}
+ *
+ * <p>Application can unsubscribe from a button that is currently being pressed
+ * (i.e. has not yet been released), but app will not get button event</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>buttonName</td>
+ * <td>ButtonName</td>
+ * <td>Name of the button to unsubscribe.</td>
+ * <td>Y</td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ * <p> <b>Response</b></p>
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR </p>
+ * <p>UNSUPPORTED_RESOURCE</p>
+ * <p>IGNORED</p>
+ * <p>REJECTED</p>
+ * @since SmartDeviceLink 1.0
+ * @see SubscribeButton
+ */
+public class UnsubscribeButton extends RPCRequest {
+ public static final String KEY_BUTTON_NAME = "buttonName";
+
+ /**
+ * Constructs a new UnsubscribeButton object
+ */
+ public UnsubscribeButton() {
+ super(FunctionID.UNSUBSCRIBE_BUTTON.toString());
+ }
+ /**
+ * Constructs a new UnsubscribeButton object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public UnsubscribeButton(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new UnsubscribeButton object
+ * @param buttonName Name of the button to unsubscribe.
+ */
+ public UnsubscribeButton(@NonNull ButtonName buttonName){
+ this();
+ setButtonName(buttonName);
+ }
+
+ /**
+ * Gets a name of the button to unsubscribe from
+ *
+ * @return ButtonName -an Enumeration value, see <i> {@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonName}</i>
+ */
+ public ButtonName getButtonName() {
+ return (ButtonName) getObject(ButtonName.class, KEY_BUTTON_NAME);
+ }
+ /**
+ * Sets the name of the button to unsubscribe from
+ *
+ * @param buttonName an enum value, see <i> {@linkplain com.smartdevicelink.proxy.rpc.enums.ButtonName}</i>
+ */
+ public void setButtonName(@NonNull ButtonName buttonName ) {
+ setParameters(KEY_BUTTON_NAME, buttonName);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButtonResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButtonResponse.java
new file mode 100644
index 000000000..5d6bd8579
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeButtonResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Unsubscribe Button Response is sent, when UnsubscribeButton has been called
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public class UnsubscribeButtonResponse extends RPCResponse {
+
+ /**
+ * Constructs a new UnsubscribeButtonResponse object
+ */
+ public UnsubscribeButtonResponse() {
+ super(FunctionID.UNSUBSCRIBE_BUTTON.toString());
+ }
+
+ /**
+ * Constructs a new UnsubscribeButtonResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash The Hashtable to use
+ */
+ public UnsubscribeButtonResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new UnsubscribeButtonResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public UnsubscribeButtonResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java
new file mode 100644
index 000000000..e682fa518
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java
@@ -0,0 +1,822 @@
+package com.smartdevicelink.proxy.rpc;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+/**
+ * This function is used to unsubscribe the notifications from the
+ * subscribeVehicleData function
+ * <p>Function Group: Location, VehicleInfo and DrivingChara</p>
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>Reg.</th>
+ * <th>Notes</th>
+ * <th>Version</th>
+ * </tr>
+ * <tr>
+ * <td>gps</td>
+ * <td>Boolean</td>
+ * <td>GPS data. See {@linkplain GPSdata} for details</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>speed</td>
+ * <td>Boolean</td>
+ * <td>The vehicle speed in kilometers per hour</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>rpm</td>
+ * <td>Boolean</td>
+ * <td>The number of revolutions per minute of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel</td>
+ * <td>Boolean</td>
+ * <td>The fuel level in the tank (percentage)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>fuelLevel_State</td>
+ * <td>Boolean</td>
+ * <td>The fuel level state</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>instantFuelConsumption</td>
+ * <td>Boolean</td>
+ * <td>The instantaneous fuel consumption in microlitres</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>externalTemperature</td>
+ * <td>Boolean</td>
+ * <td>The external temperature in degrees celsius</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>prndl</td>
+ * <td>Boolean</td>
+ * <td>Currently selected gear.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>tirePressure</td>
+ * <td>Boolean</td>
+ * <td>Tire pressure status</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>odometer</td>
+ * <td>Boolean</td>
+ * <td>Odometer in km</td>
+ * <td>N</td>
+ * <td>Max Length: 500</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>beltStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the seat belts</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>bodyInformation</td>
+ * <td>Boolean</td>
+ * <td>The body information including ignition status and internal temp</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>deviceStatus</td>
+ * <td>Boolean</td>
+ * <td>The device status including signal and battery strength</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>driverBraking</td>
+ * <td>Boolean</td>
+ * <td>The status of the brake pedal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>wiperStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the wipers</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>headLampStatus</td>
+ * <td>Boolean</td>
+ * <td>Status of the head lamps</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>engineTorque</td>
+ * <td>Boolean</td>
+ * <td>Torque value for engine (in Nm) on non-diesel variants</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>engineOilLife</td>
+ * <td>Boolean</td>
+ * <td>The estimated percentage of remaining oil life of the engine</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0 </td>
+ * </tr>
+ * <tr>
+ * <td>accPedalPosition</td>
+ * <td>Boolean</td>
+ * <td>Accelerator pedal position (percentage depressed)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>steeringWheelAngle</td>
+ * <td>Boolean</td>
+ * <td>Current angle of the steering wheel (in deg)</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>eCallInfo</td>
+ * <td>Boolean</td>
+ * <td>Emergency Call notification and confirmation data.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>airbagStatus</td>
+ * <td>Boolean</td>
+ * <td>The status of the air bags.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>emergencyEvent</td>
+ * <td>Boolean</td>
+ * <td>Information related to an emergency event (and if it occurred).</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>clusterModeStatus</td>
+ * <td>Boolean</td>
+ * <td>The status modes of the instrument panel cluster.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>myKey</td>
+ * <td>Boolean</td>
+ * <td>Information related to the MyKey feature.</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 2.0 </td>
+ * </tr>
+ * <tr>
+ * <td>turnSignal</td>
+ * <td>Boolean</td>
+ * <td>@see TurnSignal</td>
+ * <td>N</td>
+ * <td>Subscribable</td>
+ * <td>SmartDeviceLink 5.0 </td>
+ * </tr>
+ * </table>
+ * <p><b> Response</b></p>
+ * <p><b>Non-default Result Codes:</b></p>
+ * <p>SUCCESS</p>
+ * <p>WARNINGS</p>
+ * <p>INVALID_DATA</p>
+ * <p>OUT_OF_MEMORY</p>
+ * <p>TOO_MANY_PENDING_REQUESTS</p>
+ * <p>APPLICATION_NOT_REGISTERED</p>
+ * <p>GENERIC_ERROR</p>
+ * <p>IGNORED</p>
+ * <p>DISALLOWED</p>
+ *
+ * @since SmartDeviceLink 2.0
+ * @see SubscribeVehicleData
+ * @see GetVehicleData
+ */
+public class UnsubscribeVehicleData extends RPCRequest {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new UnsubscribeVehicleData object
+ */
+ public UnsubscribeVehicleData() {
+ super(FunctionID.UNSUBSCRIBE_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * Constructs a new UnsubscribeVehicleData object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public UnsubscribeVehicleData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes Gps data
+ *
+ * @param gps
+ * a boolean value
+ */
+ public void setGps(Boolean gps) {
+ setParameters(KEY_GPS, gps);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Gps data has been unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Gps data has been
+ * unsubscribed.
+ */
+ public Boolean getGps() {
+ return getBoolean(KEY_GPS);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes speed data
+ *
+ * @param speed
+ * a boolean value
+ */
+ public void setSpeed(Boolean speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Speed data has been unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Speed data has been
+ * unsubscribed.
+ */
+ public Boolean getSpeed() {
+ return getBoolean(KEY_SPEED);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribe data
+ *
+ * @param rpm
+ * a boolean value
+ */
+ public void setRpm(Boolean rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the rpm data has been unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the rpm data has been
+ * unsubscribed.
+ */
+ public Boolean getRpm() {
+ return getBoolean(KEY_RPM);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes FuelLevel data
+ *
+ * @param fuelLevel
+ * a boolean value
+ */
+ public void setFuelLevel(Boolean fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the FuelLevel data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the FuelLevel data has
+ * been unsubscribed.
+ */
+ public Boolean getFuelLevel() {
+ return getBoolean(KEY_FUEL_LEVEL);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes fuelLevel_State data
+ *
+ * @param fuelLevel_State
+ * a boolean value
+ */
+ @Deprecated
+ public void setFuelLevel_State(Boolean fuelLevel_State) {
+ setFuelLevelState(fuelLevel_State);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the fuelLevel_State data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the fuelLevel_State data
+ * has been unsubscribed.
+ */
+ @Deprecated
+ public Boolean getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes fuelLevelState data
+ *
+ * @param fuelLevelState
+ * a boolean value
+ */
+ public void setFuelLevelState(Boolean fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the fuelLevel_State data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the fuelLevelState data
+ * has been unsubscribed.
+ */
+ public Boolean getFuelLevelState() {
+ return getBoolean(KEY_FUEL_LEVEL_STATE);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes instantFuelConsumption data
+ *
+ * @param instantFuelConsumption
+ * a boolean value
+ */
+ public void setInstantFuelConsumption(Boolean instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the getInstantFuelConsumption data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the getInstantFuelConsumption data
+ * has been unsubscribed.
+ */
+ public Boolean getInstantFuelConsumption() {
+ return getBoolean(KEY_INSTANT_FUEL_CONSUMPTION);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes externalTemperature data
+ *
+ * @param externalTemperature
+ * a boolean value
+ */
+ public void setExternalTemperature(Boolean externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the externalTemperature data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the externalTemperature data
+ * has been unsubscribed.
+ */
+ public Boolean getExternalTemperature() {
+ return getBoolean(KEY_EXTERNAL_TEMPERATURE);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes Currently selected gear data
+ *
+ * @param prndl
+ * a boolean value
+ */
+ public void setPrndl(Boolean prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Currently selected gear data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Currently selected gear data
+ * has been unsubscribed.
+ */
+ public Boolean getPrndl() {
+ return getBoolean(KEY_PRNDL);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes tire pressure status data
+ *
+ * @param tirePressure
+ * a boolean value
+ */
+ public void setTirePressure(Boolean tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the tire pressure status data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the tire pressure status data
+ * has been unsubscribed.
+ */
+ public Boolean getTirePressure() {
+ return getBoolean(KEY_TIRE_PRESSURE);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes odometer data
+ *
+ * @param odometer
+ * a boolean value
+ */
+ public void setOdometer(Boolean odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the odometer data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the odometer data
+ * has been unsubscribed.
+ */
+ public Boolean getOdometer() {
+ return getBoolean(KEY_ODOMETER);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes belt Status data
+ *
+ * @param beltStatus
+ * a boolean value
+ */
+ public void setBeltStatus(Boolean beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the belt Status data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the belt Status data
+ * has been unsubscribed.
+ */
+ public Boolean getBeltStatus() {
+ return getBoolean(KEY_BELT_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes body Information data
+ *
+ * @param bodyInformation
+ * a boolean value
+ */
+ public void setBodyInformation(Boolean bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the body Information data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the body Information data
+ * has been unsubscribed.
+ */
+ public Boolean getBodyInformation() {
+ return getBoolean(KEY_BODY_INFORMATION);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes device Status data
+ *
+ * @param deviceStatus
+ * a boolean value
+ */
+ public void setDeviceStatus(Boolean deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the device Status data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the device Status data
+ * has been unsubscribed.
+ */
+ public Boolean getDeviceStatus() {
+ return getBoolean(KEY_DEVICE_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes driver Braking data
+ *
+ * @param driverBraking
+ * a boolean value
+ */
+ public void setDriverBraking(Boolean driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the driver Braking data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the driver Braking data
+ * has been unsubscribed.
+ */
+ public Boolean getDriverBraking() {
+ return getBoolean(KEY_DRIVER_BRAKING);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes wiper Status data
+ *
+ * @param wiperStatus
+ * a boolean value
+ */
+ public void setWiperStatus(Boolean wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the wiper Status data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the wiper Status data
+ * has been unsubscribed.
+ */
+ public Boolean getWiperStatus() {
+ return getBoolean(KEY_WIPER_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes Head Lamp Status data
+ *
+ * @param headLampStatus
+ * a boolean value
+ */
+ public void setHeadLampStatus(Boolean headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Head Lamp Status data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Head Lamp Status data
+ * has been unsubscribed.
+ */
+ public Boolean getHeadLampStatus() {
+ return getBoolean(KEY_HEAD_LAMP_STATUS);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes Engine Torque data
+ *
+ * @param engineTorque
+ * a boolean value
+ */
+ public void setEngineTorque(Boolean engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Engine Torque data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Engine Torque data
+ * has been unsubscribed.
+ */
+ public Boolean getEngineTorque() {
+ return getBoolean(KEY_ENGINE_TORQUE);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes Engine Oil Life data
+ *
+ * @param engineOilLife
+ * a boolean value
+ */
+ public void setEngineOilLife(Boolean engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the Engine Oil Life data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the Engine Oil Life data
+ * has been unsubscribed.
+ */
+ public Boolean getEngineOilLife() {
+ return getBoolean(KEY_ENGINE_OIL_LIFE);
+ }
+
+
+ /**
+ * Sets a boolean value. If true, unsubscribes accPedalPosition data
+ *
+ * @param accPedalPosition
+ * a boolean value
+ */
+ public void setAccPedalPosition(Boolean accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the accPedalPosition data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the accPedalPosition data
+ * has been unsubscribed.
+ */
+ public Boolean getAccPedalPosition() {
+ return getBoolean(KEY_ACC_PEDAL_POSITION);
+ }
+
+ public void setSteeringWheelAngle(Boolean steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+
+ public Boolean getSteeringWheelAngle() {
+ return getBoolean(KEY_STEERING_WHEEL_ANGLE);
+ }
+
+ public void setECallInfo(Boolean eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ public Boolean getECallInfo() {
+ return getBoolean(KEY_E_CALL_INFO);
+ }
+ public void setAirbagStatus(Boolean airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ public Boolean getAirbagStatus() {
+ return getBoolean(KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(Boolean emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ public Boolean getEmergencyEvent() {
+ return getBoolean(KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(Boolean clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ public Boolean getClusterModeStatus() {
+ return getBoolean(KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(Boolean myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ public Boolean getMyKey() {
+ return getBoolean(KEY_MY_KEY);
+ }
+
+ /**
+ * Sets a boolean value. If true, unsubscribes fuelRange data
+ *
+ * @param fuelRange
+ * a boolean value
+ */
+ public void setFuelRange(Boolean fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the fuelRange data has been
+ * unsubscribed.
+ *
+ * @return Boolean -a Boolean value. If true, means the fuelRange data
+ * has been unsubscribed.
+ */
+ public Boolean getFuelRange() {
+ return getBoolean(KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets a boolean value. If true, subscribes turnSignal data
+ * @param turnSignal a boolean value
+ */
+ public void setTurnSignal(Boolean turnSignal) { setParameters(KEY_TURN_SIGNAL, turnSignal); }
+
+ /**
+ * Gets a boolean value. If true, means the turnSignal data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getTurnSignal() { return getBoolean(KEY_TURN_SIGNAL); }
+
+ /**
+ * Sets a boolean value. If true, subscribes electronicParkBrakeStatus data
+ * @param electronicParkBrakeStatus a boolean value
+ */
+ public void setElectronicParkBrakeStatus(Boolean electronicParkBrakeStatus) {
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the electronicParkBrakeStatus data has been subscribed.
+ * @return a Boolean value.
+ */
+ public Boolean getElectronicParkBrakeStatus() {
+ return getBoolean(KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets cloudAppVehicleID
+ * @param cloudAppVehicleID a boolean value
+ */
+ public void setCloudAppVehicleID(VehicleDataResult cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the cloudAppVehicleDataID data should be unsubscribed.
+ * @return a Boolean value.
+ */
+ public VehicleDataResult getCloudAppVehicleID(){
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java
new file mode 100644
index 000000000..c2ba69cfa
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java
@@ -0,0 +1,488 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+/**
+ * Unsubscribe Vehicle Data Response is sent, when UnsubscribeVehicleData has been called.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class UnsubscribeVehicleDataResponse extends RPCResponse {
+ public static final String KEY_SPEED = "speed";
+ public static final String KEY_RPM = "rpm";
+ public static final String KEY_FUEL_LEVEL = "fuelLevel";
+ public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
+ public static final String KEY_PRNDL = "prndl";
+ public static final String KEY_TIRE_PRESSURE = "tirePressure";
+ public static final String KEY_ENGINE_TORQUE = "engineTorque";
+ public static final String KEY_ENGINE_OIL_LIFE = "engineOilLife";
+ public static final String KEY_ODOMETER = "odometer";
+ public static final String KEY_GPS = "gps";
+ public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
+ public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
+ public static final String KEY_BELT_STATUS = "beltStatus";
+ public static final String KEY_BODY_INFORMATION = "bodyInformation";
+ public static final String KEY_DEVICE_STATUS = "deviceStatus";
+ public static final String KEY_DRIVER_BRAKING = "driverBraking";
+ public static final String KEY_WIPER_STATUS = "wiperStatus";
+ public static final String KEY_HEAD_LAMP_STATUS = "headLampStatus";
+ public static final String KEY_ACC_PEDAL_POSITION = "accPedalPosition";
+ public static final String KEY_STEERING_WHEEL_ANGLE = "steeringWheelAngle";
+ public static final String KEY_E_CALL_INFO = "eCallInfo";
+ public static final String KEY_AIRBAG_STATUS = "airbagStatus";
+ public static final String KEY_EMERGENCY_EVENT = "emergencyEvent";
+ public static final String KEY_CLUSTER_MODE_STATUS = "clusterModeStatus";
+ public static final String KEY_MY_KEY = "myKey";
+ public static final String KEY_FUEL_RANGE = "fuelRange";
+ public static final String KEY_TURN_SIGNAL = "turnSignal";
+ public static final String KEY_ELECTRONIC_PARK_BRAKE_STATUS = "electronicParkBrakeStatus";
+ public static final String KEY_CLOUD_APP_VEHICLE_ID = "cloudAppVehicleID";
+
+ /**
+ * Constructs a new UnsubscribeVehicleDataResponse object
+ */
+ public UnsubscribeVehicleDataResponse() {
+ super(FunctionID.UNSUBSCRIBE_VEHICLE_DATA.toString());
+ }
+
+ /**
+ * Constructs a new UnsubscribeVehicleDataResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public UnsubscribeVehicleDataResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+ /**
+ * Constructs a new UnsubscribeVehicleDataResponse object indicated by the Hashtable
+ * parameter
+ * <p></p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public UnsubscribeVehicleDataResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+ /**
+ * Sets Gps
+ * @param gps
+ */
+ public void setGps(VehicleDataResult gps) {
+ setParameters(KEY_GPS, gps);
+ }
+ /**
+ * Gets Gps
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getGps() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_GPS);
+ }
+ /**
+ * Sets Speed
+ * @param speed
+ */
+ public void setSpeed(VehicleDataResult speed) {
+ setParameters(KEY_SPEED, speed);
+ }
+ /**
+ * Gets Speed
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getSpeed() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_SPEED);
+ }
+ /**
+ * Sets rpm
+ * @param rpm
+ */
+ public void setRpm(VehicleDataResult rpm) {
+ setParameters(KEY_RPM, rpm);
+ }
+ /**
+ * Gets rpm
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getRpm() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_RPM);
+ }
+ /**
+ * Sets Fuel Level
+ * @param fuelLevel
+ */
+ public void setFuelLevel(VehicleDataResult fuelLevel) {
+ setParameters(KEY_FUEL_LEVEL, fuelLevel);
+ }
+ /**
+ * Gets Fuel Level
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelLevel() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_LEVEL);
+ }
+ /**
+ * Sets Fuel Level State
+ * @param fuelLevel_State
+ */
+ @Deprecated
+ public void setFuelLevel_State(VehicleDataResult fuelLevel_State) {
+ setFuelLevel(fuelLevel_State);
+ }
+ /**
+ * Gets Fuel Level State
+ * @return VehicleDataResult
+ */
+ @Deprecated
+ public VehicleDataResult getFuelLevel_State() {
+ return getFuelLevelState();
+ }
+ /**
+ * Sets Fuel Level State
+ * @param fuelLevelState
+ */
+ public void setFuelLevelState(VehicleDataResult fuelLevelState) {
+ setParameters(KEY_FUEL_LEVEL_STATE, fuelLevelState);
+ }
+ /**
+ * Gets Fuel Level State
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelLevelState() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_LEVEL_STATE);
+ }
+ /**
+ * Sets Instant Fuel Comsumption
+ * @param instantFuelConsumption
+ */
+ public void setInstantFuelConsumption(VehicleDataResult instantFuelConsumption) {
+ setParameters(KEY_INSTANT_FUEL_CONSUMPTION, instantFuelConsumption);
+ }
+ /**
+ * Gets Instant Fuel Comsumption
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getInstantFuelConsumption() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_INSTANT_FUEL_CONSUMPTION);
+ }
+ /**
+ * Sets External Temperature
+ * @param externalTemperature
+ */
+ public void setExternalTemperature(VehicleDataResult externalTemperature) {
+ setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
+ }
+ /**
+ * Gets External Temperature
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getExternalTemperature() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EXTERNAL_TEMPERATURE);
+ }
+ /**
+ * Gets currently selected gear data
+ * @param prndl
+ */
+ public void setPrndl(VehicleDataResult prndl) {
+ setParameters(KEY_PRNDL, prndl);
+ }
+ /**
+ * Gets currently selected gear data
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getPrndl() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_PRNDL);
+ }
+ /**
+ * Sets Tire Pressure
+ * @param tirePressure
+ */
+ public void setTirePressure(VehicleDataResult tirePressure) {
+ setParameters(KEY_TIRE_PRESSURE, tirePressure);
+ }
+ /**
+ * Gets Tire Pressure
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getTirePressure() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_TIRE_PRESSURE);
+ }
+ /**
+ * Sets Odometer
+ * @param odometer
+ */
+ public void setOdometer(VehicleDataResult odometer) {
+ setParameters(KEY_ODOMETER, odometer);
+ }
+ /**
+ * Gets Odometer
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getOdometer() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ODOMETER);
+ }
+ /**
+ * Sets Belt Status
+ * @param beltStatus
+ */
+ public void setBeltStatus(VehicleDataResult beltStatus) {
+ setParameters(KEY_BELT_STATUS, beltStatus);
+ }
+ /**
+ * Gets Belt Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getBeltStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_BELT_STATUS);
+ }
+ /**
+ * Sets Body Information
+ * @param bodyInformation
+ */
+ public void setBodyInformation(VehicleDataResult bodyInformation) {
+ setParameters(KEY_BODY_INFORMATION, bodyInformation);
+ }
+ /**
+ * Gets Body Information
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getBodyInformation() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_BODY_INFORMATION);
+ }
+ /**
+ * Sets Device Status
+ * @param deviceStatus
+ */
+ public void setDeviceStatus(VehicleDataResult deviceStatus) {
+ setParameters(KEY_DEVICE_STATUS, deviceStatus);
+ }
+ /**
+ * Gets Device Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getDeviceStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_DEVICE_STATUS);
+ }
+ /**
+ * Sets Driver Braking
+ * @param driverBraking
+ */
+ public void setDriverBraking(VehicleDataResult driverBraking) {
+ setParameters(KEY_DRIVER_BRAKING, driverBraking);
+ }
+ /**
+ * Gets Driver Braking
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getDriverBraking() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_DRIVER_BRAKING);
+ }
+ /**
+ * Sets Wiper Status
+ * @param wiperStatus
+ */
+ public void setWiperStatus(VehicleDataResult wiperStatus) {
+ setParameters(KEY_WIPER_STATUS, wiperStatus);
+ }
+ /**
+ * Gets Wiper Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getWiperStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_WIPER_STATUS);
+ }
+ /**
+ * Sets Head Lamp Status
+ * @param headLampStatus
+ */
+ public void setHeadLampStatus(VehicleDataResult headLampStatus) {
+ setParameters(KEY_HEAD_LAMP_STATUS, headLampStatus);
+ }
+ /**
+ * Gets Head Lamp Status
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getHeadLampStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_HEAD_LAMP_STATUS);
+ }
+ /**
+ * Sets Engine Torque
+ * @param engineTorque
+ */
+ public void setEngineTorque(VehicleDataResult engineTorque) {
+ setParameters(KEY_ENGINE_TORQUE, engineTorque);
+ }
+ /**
+ * Gets Engine Torque
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEngineTorque() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ENGINE_TORQUE);
+ }
+ /**
+ * Sets Engine Oil Life
+ * @param engineOilLife
+ */
+ public void setEngineOilLife(VehicleDataResult engineOilLife) {
+ setParameters(KEY_ENGINE_OIL_LIFE, engineOilLife);
+ }
+ /**
+ * Gets Engine Oil Life
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEngineOilLife() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ENGINE_OIL_LIFE);
+ }
+ /**
+ * Sets AccPedal Position
+ * @param accPedalPosition
+ */
+ public void setAccPedalPosition(VehicleDataResult accPedalPosition) {
+ setParameters(KEY_ACC_PEDAL_POSITION, accPedalPosition);
+ }
+ /**
+ * Gets AccPedal Position
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getAccPedalPosition() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ACC_PEDAL_POSITION);
+ }
+
+ public void setSteeringWheelAngle(VehicleDataResult steeringWheelAngle) {
+ setParameters(KEY_STEERING_WHEEL_ANGLE, steeringWheelAngle);
+ }
+
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getSteeringWheelAngle() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_STEERING_WHEEL_ANGLE);
+ }
+
+ public void setECallInfo(VehicleDataResult eCallInfo) {
+ setParameters(KEY_E_CALL_INFO, eCallInfo);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getECallInfo() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_E_CALL_INFO);
+ }
+ public void setAirbagStatus(VehicleDataResult airbagStatus) {
+ setParameters(KEY_AIRBAG_STATUS, airbagStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getAirbagStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_AIRBAG_STATUS);
+ }
+ public void setEmergencyEvent(VehicleDataResult emergencyEvent) {
+ setParameters(KEY_EMERGENCY_EVENT, emergencyEvent);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getEmergencyEvent() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EMERGENCY_EVENT);
+ }
+ public void setClusterModeStatus(VehicleDataResult clusterModeStatus) {
+ setParameters(KEY_CLUSTER_MODE_STATUS, clusterModeStatus);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getClusterModeStatus() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLUSTER_MODE_STATUS);
+ }
+ public void setMyKey(VehicleDataResult myKey) {
+ setParameters(KEY_MY_KEY, myKey);
+ }
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getMyKey() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_MY_KEY);
+ }
+
+ /**
+ * Sets Fuel Range
+ * @param fuelRange
+ */
+ public void setFuelRange(VehicleDataResult fuelRange) {
+ setParameters(KEY_FUEL_RANGE, fuelRange);
+ }
+
+ /**
+ * Gets Fuel Range
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getFuelRange() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_FUEL_RANGE);
+ }
+
+ /**
+ * Sets turnSignal
+ * @param turnSignal
+ */
+ public void setTurnSignal(VehicleDataResult turnSignal) {
+ setParameters(KEY_TURN_SIGNAL, turnSignal);
+ }
+
+ /**
+ * Gets turnSignal
+ * @return VehicleDataResult
+ */
+ @SuppressWarnings("unchecked")
+ public VehicleDataResult getTurnSignal() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_TURN_SIGNAL);
+ }
+
+ /**
+ * Sets electronicParkBrakeStatus
+ * @param electronicParkBrakeStatus
+ */
+ public void setElectronicParkBrakeStatus(VehicleDataResult electronicParkBrakeStatus){
+ setParameters(KEY_ELECTRONIC_PARK_BRAKE_STATUS, electronicParkBrakeStatus);
+ }
+
+ /**
+ * Gets electronicParkBrakeStatus
+ * @return VehicleDataResult
+ */
+ public VehicleDataResult getElectronicParkBrakeStatus(){
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_ELECTRONIC_PARK_BRAKE_STATUS);
+ }
+
+ /**
+ * Sets cloudAppVehicleID
+ * @param cloudAppVehicleID a boolean value
+ */
+ public void setCloudAppVehicleID(VehicleDataResult cloudAppVehicleID){
+ setParameters(KEY_CLOUD_APP_VEHICLE_ID, cloudAppVehicleID);
+ }
+
+ /**
+ * Gets a boolean value. If true, means the cloudAppVehicleDataID data has been unsubscribed.
+ * @return a Boolean value.
+ */
+ public VehicleDataResult getCloudAppVehicleID(){
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLOUD_APP_VEHICLE_ID);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java
new file mode 100644
index 000000000..b748ef673
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class UnsubscribeWayPoints extends RPCRequest {
+ public UnsubscribeWayPoints() {
+ super(FunctionID.UNSUBSCRIBE_WAY_POINTS.toString());
+ }
+ public UnsubscribeWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java
new file mode 100644
index 000000000..b7feef73e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java
@@ -0,0 +1,30 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Hashtable;
+
+public class UnsubscribeWayPointsResponse extends RPCResponse {
+
+ public UnsubscribeWayPointsResponse() {
+ super(FunctionID.UNSUBSCRIBE_WAY_POINTS.toString());
+ }
+ public UnsubscribeWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new UnsubscribeWayPointsResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public UnsubscribeWayPointsResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnList.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnList.java
new file mode 100644
index 000000000..cb1dde7e4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnList.java
@@ -0,0 +1,97 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Updates the list of next maneuvers, which can be requested by the user pressing the softbutton "Turns" on the
+ * Navigation base screen. Three softbuttons are predefined by the system: Up, Down, Close
+ *
+ * <p>Function Group: Navigation</p>
+ *
+ * <p><b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b></p>
+ *
+ *
+ * @since SmartDeviceLink 2.0
+ * @see ShowConstantTbt
+ */
+public class UpdateTurnList extends RPCRequest{
+ public static final String KEY_TURN_LIST = "turnList";
+ public static final String KEY_SOFT_BUTTONS = "softButtons";
+
+ /**
+ * Constructs a new UpdateTurnList object
+ */
+ public UpdateTurnList() {
+ super(FunctionID.UPDATE_TURN_LIST.toString());
+ }
+
+ /**
+ * <p>
+ * Constructs a new UpdateTurnList object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash
+ * The Hashtable to use
+ */
+ public UpdateTurnList(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Sets a list of turns to be shown to the user
+ *
+ * @param turnList
+ * a List<Turn> value representing a list of turns to be shown to the user
+ * <p>
+ * <b>Notes: </b>Minsize=1; Maxsize=100</p>
+ */
+ public void setTurnList(List<Turn> turnList){
+ setParameters(KEY_TURN_LIST, turnList);
+ }
+
+ /**
+ * Gets a list of turns to be shown to the user
+ *
+ * @return List<Turn> -a List value representing a list of turns
+ */
+ @SuppressWarnings("unchecked")
+ public List<Turn> getTurnList(){
+ return (List<Turn>) getObject(Turn.class, KEY_TURN_LIST);
+ }
+
+ /**
+ * Gets the SoftButton List object
+ *
+ * @return List<SoftButton> -a List<SoftButton> representing the List object
+ * @since SmartDeviceLink 2.0
+ */
+ @SuppressWarnings("unchecked")
+ public List<SoftButton> getSoftButtons(){
+ return (List<SoftButton>) getObject(SoftButton.class, KEY_SOFT_BUTTONS);
+ }
+
+ /**
+ * Sets the SoftButtons
+ *
+ * @param softButtons
+ * a List<SoftButton> value
+ * <p>
+ * <b>Notes: </b></p>
+ * <ul>
+ * <li>If omitted on supported displays, the alert will not have any SoftButton</li>
+ * <li>ArrayMin: 0</li>
+ * <li>ArrayMax: 4</li>
+ * </ul>
+ * @since SmartDeviceLink 2.0
+ */
+
+ public void setSoftButtons(List<SoftButton> softButtons){
+ setParameters(KEY_SOFT_BUTTONS, softButtons);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnListResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnListResponse.java
new file mode 100644
index 000000000..5b0fbabf7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UpdateTurnListResponse.java
@@ -0,0 +1,40 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+/**
+ * Update Turn List Response is sent, when UpdateTurnList has been called
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public class UpdateTurnListResponse extends RPCResponse{
+
+ /**
+ * Constructs a new UpdateTurnListResponse object
+ */
+ public UpdateTurnListResponse() {
+ super(FunctionID.UPDATE_TURN_LIST.toString());
+ }
+
+ public UpdateTurnListResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Constructs a new UpdateTurnListResponse object
+ * @param success whether the request is successfully processed
+ * @param resultCode whether the request is successfully processed
+ */
+ public UpdateTurnListResponse(@NonNull Boolean success, @NonNull Result resultCode) {
+ this();
+ setSuccess(success);
+ setResultCode(resultCode);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleDataResult.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleDataResult.java
new file mode 100644
index 000000000..10860deab
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleDataResult.java
@@ -0,0 +1,83 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import java.util.Hashtable;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataResultCode;
+import com.smartdevicelink.proxy.rpc.enums.VehicleDataType;
+/**
+ *
+ * Individual published data request result.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>dataType</td>
+ * <td>VehicleDataType</td>
+ * <td>Defined published data element type.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * <tr>
+ * <td>resultCode</td>
+ * <td>VehicleDataResultCode</td>
+ * <td>Published data result code.</td>
+ * <td></td>
+ * <td></td>
+ * <td>SmartDeviceLink 1.0</td>
+ * </tr>
+ * </table>
+ *
+ */
+public class VehicleDataResult extends RPCStruct {
+ public static final String KEY_DATA_TYPE = "dataType";
+ public static final String KEY_RESULT_CODE = "resultCode";
+
+ public VehicleDataResult() { }
+ /**
+ * <p>
+ * Constructs a new VehicleDataResult object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash the Hashtable to use
+ */
+ public VehicleDataResult(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * Individual published data request result.
+ * @param dataType Defined published data element type.
+ * @param resultCode Published data result code.
+ */
+ public VehicleDataResult(@NonNull VehicleDataType dataType, @NonNull VehicleDataResultCode resultCode){
+ this();
+ setDataType(dataType);
+ setResultCode(resultCode);
+ }
+
+ public void setDataType(@NonNull VehicleDataType dataType) {
+ setValue(KEY_DATA_TYPE, dataType);
+ }
+ public VehicleDataType getDataType() {
+ return (VehicleDataType) getObject(VehicleDataType.class, KEY_DATA_TYPE);
+ }
+ public void setResultCode(@NonNull VehicleDataResultCode resultCode) {
+ setValue(KEY_RESULT_CODE, resultCode);
+ }
+ public VehicleDataResultCode getResultCode() {
+ return (VehicleDataResultCode) getObject(VehicleDataResultCode.class, KEY_RESULT_CODE);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleType.java
new file mode 100644
index 000000000..e6f860007
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/VehicleType.java
@@ -0,0 +1,142 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+/**
+ * Describes the type of vehicle the mobile phone is connected with.
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th>SmartDeviceLink Ver. Available</th>
+ * </tr>
+ * <tr>
+ * <td>make</td>
+ * <td>String</td>
+ * <td>Make of the vehicle
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>Model</td>
+ * <td>String</td>
+ * <td>Model of the vehicle, e.g. Fiesta
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>modelYear</td>
+ * <td>String</td>
+ * <td>Model Year of the vehicle, e.g. 2013
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * <tr>
+ * <td>trim</td>
+ * <td>String</td>
+ * <td>Trim of the vehicle, e.g. SE
+ * <ul>
+ * <li>Maxlength = 500</li>
+ * </ul>
+ * </td>
+ * <td>SmartDeviceLink 2.0</td>
+ * </tr>
+ * </table>
+ * @since SmartDeviceLink 2.0
+ */
+public class VehicleType extends RPCStruct {
+ public static final String KEY_MAKE = "make";
+ public static final String KEY_MODEL = "model";
+ public static final String KEY_MODEL_YEAR = "modelYear";
+ public static final String KEY_TRIM = "trim";
+
+ /**
+ * Constructs a newly allocated VehicleType object
+ */
+ public VehicleType() { }
+
+ /**
+ * Constructs a newly allocated VehicleType object indicated by the Hashtable parameter
+ * @param hash The Hashtable to use
+ */
+ public VehicleType(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * get the make of the vehicle
+ * @return the make of the vehicle
+ */
+ public String getMake() {
+ return getString(KEY_MAKE);
+ }
+
+ /**
+ * set the make of the vehicle
+ *@param make the make of the vehicle
+ */
+ public void setMake(String make) {
+ setValue(KEY_MAKE, make);
+ }
+
+ /**
+ * get the model of the vehicle
+ * @return the model of the vehicle
+ */
+ public String getModel() {
+ return getString(KEY_MODEL);
+ }
+
+ /**
+ * set the model of the vehicle
+ * @param model the model of the vehicle
+ */
+ public void setModel(String model) {
+ setValue(KEY_MODEL, model);
+ }
+
+ /**
+ * get the model year of the vehicle
+ * @return the model year of the vehicle
+ */
+ public String getModelYear() {
+ return getString(KEY_MODEL_YEAR);
+ }
+
+ /**
+ * set the model year of the vehicle
+ * @param modelYear the model year of the vehicle
+ */
+ public void setModelYear(String modelYear) {
+ setValue(KEY_MODEL_YEAR, modelYear);
+ }
+
+ /**
+ * get the trim of the vehicle
+ * @return the trim of the vehicle
+ */
+ public String getTrim() {
+ return getString(KEY_TRIM);
+ }
+
+ /**
+ * set the trim of the vehicle
+ * @param trim the trim of the vehicle
+ */
+ public void setTrim(String trim) {
+ setValue(KEY_TRIM, trim);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingCapability.java
new file mode 100644
index 000000000..c558673e5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingCapability.java
@@ -0,0 +1,64 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * Contains information about this system's video streaming capabilities.
+ */
+
+public class VideoStreamingCapability extends RPCStruct {
+ public static final String KEY_PREFERRED_RESOLUTION = "preferredResolution";
+ public static final String KEY_MAX_BITRATE = "maxBitrate";
+ public static final String KEY_SUPPORTED_FORMATS = "supportedFormats";
+ public static final String KEY_HAPTIC_SPATIAL_DATA_SUPPORTED = "hapticSpatialDataSupported";
+
+ public VideoStreamingCapability(){}
+ public VideoStreamingCapability(Hashtable<String, Object> hash){super(hash);}
+
+ public void setPreferredResolution(ImageResolution res){
+ setValue(KEY_PREFERRED_RESOLUTION, res);
+ }
+
+ public ImageResolution getPreferredResolution(){
+ return (ImageResolution) getObject(ImageResolution.class, KEY_PREFERRED_RESOLUTION);
+ }
+
+ /**
+ * Set the max bitrate supported by this module.
+ *
+ * <b>NOTE: </b> Unit is in kbps.
+ * @param maxBitrate in kbps
+ */
+ public void setMaxBitrate(Integer maxBitrate){
+ setValue(KEY_MAX_BITRATE, maxBitrate);
+ }
+
+ /**
+ * Retrieves the max bitrate supported by this module.
+ *
+ * <b>NOTE: </b> Unit is in kbps.
+ * @return max bitrate in kbps
+ */
+ public Integer getMaxBitrate(){
+ return getInteger(KEY_MAX_BITRATE);
+ }
+
+ public void setSupportedFormats(List<VideoStreamingFormat> formats){
+ setValue(KEY_SUPPORTED_FORMATS, formats);
+ }
+
+ public List<VideoStreamingFormat> getSupportedFormats(){
+ return (List<VideoStreamingFormat>) getObject(VideoStreamingFormat.class, KEY_SUPPORTED_FORMATS);
+ }
+
+ public Boolean getIsHapticSpatialDataSupported() {
+ return getBoolean(KEY_HAPTIC_SPATIAL_DATA_SUPPORTED);
+ }
+
+ public void setIsHapticSpatialDataSupported(Boolean hapticSpatialDataSupported) {
+ setValue(KEY_HAPTIC_SPATIAL_DATA_SUPPORTED, hapticSpatialDataSupported);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingFormat.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingFormat.java
new file mode 100644
index 000000000..0ddfec2ef
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/VideoStreamingFormat.java
@@ -0,0 +1,54 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.proxy.rpc.enums.VideoStreamingCodec;
+import com.smartdevicelink.proxy.rpc.enums.VideoStreamingProtocol;
+
+import java.util.Hashtable;
+
+/**
+ * Video streaming formats and their specifications.
+ */
+
+public class VideoStreamingFormat extends RPCStruct {
+ public static final String KEY_PROTOCOL = "protocol";
+ public static final String KEY_CODEC = "codec";
+
+ public VideoStreamingFormat(){}
+ public VideoStreamingFormat(Hashtable<String, Object> hash){super(hash);}
+
+ /**
+ * Create the VideoStreamingFormat object
+ * @param protocol The protocol used
+ * @param codec The codec used
+ */
+ public VideoStreamingFormat(@NonNull VideoStreamingProtocol protocol, @NonNull VideoStreamingCodec codec){
+ this();
+ setProtocol(protocol);
+ setCodec(codec);
+ }
+
+ public void setProtocol(@NonNull VideoStreamingProtocol protocol){
+ setValue(KEY_PROTOCOL, protocol);
+ }
+
+ public VideoStreamingProtocol getProtocol(){
+ return (VideoStreamingProtocol) getObject(VideoStreamingProtocol.class, KEY_PROTOCOL);
+ }
+
+ public void setCodec(@NonNull VideoStreamingCodec codec){
+ setValue(KEY_CODEC, codec);
+ }
+
+ public VideoStreamingCodec getCodec(){
+ return (VideoStreamingCodec) getObject(VideoStreamingCodec.class, KEY_CODEC);
+ }
+
+ @Override
+ public String toString() {
+ return "codec=" + String.valueOf(getCodec()) +
+ ", protocol=" + String.valueOf(getProtocol());
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/VrHelpItem.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/VrHelpItem.java
new file mode 100644
index 000000000..39fb08b8b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/VrHelpItem.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+/**
+ *
+ * VR help items i.e. the text strings to be displayed, and when pronounced by the user the recognition of any of which must trigger the corresponding VR command.
+ *
+ * <p><b>Parameter List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Param Name</th>
+ * <th>Type</th>
+ * <th>Description</th>
+ * <th> Req.</th>
+ * <th>Notes</th>
+ * <th>Version Available</th>
+ * </tr>
+ * <tr>
+ * <td>text</td>
+ * <td>String</td>
+ * <td>Text to display for VR Help item</td>
+ * <td>Y</td>
+ * <td>maxlength: 500</td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>image</td>
+ * <td>Image</td>
+ * <td>Image struct for VR Help item</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * <tr>
+ * <td>position</td>
+ * <td>Integer</td>
+ * <td>Position to display item in VR Help list</td>
+ * <td>N</td>
+ * <td> minvalue=1; maxvalue=100</td>
+ * <td>SmartDeviceLink 2.3.2</td>
+ * </tr>
+ * </table>
+ *
+ */
+public class VrHelpItem extends RPCStruct {
+ public static final String KEY_POSITION = "position";
+ public static final String KEY_TEXT = "text";
+ public static final String KEY_IMAGE = "image";
+
+ public VrHelpItem() { }
+ /**
+ * <p>
+ * Constructs a new VrHelpItem object indicated by the Hashtable
+ * parameter
+ * </p>
+ *
+ * @param hash -The Hashtable to use
+ */
+ public VrHelpItem(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ /**
+ * VR help items i.e. the text strings to be displayed, and when pronounced
+ * by the user the recognition of any of which must trigger the corresponding VR command.
+ * @param text Text to display for VR Help item
+ * @param position Position to display item in VR Help list
+ */
+ public VrHelpItem(@NonNull String text, @NonNull Integer position){
+ this();
+ setText(text);
+ setPosition(position);
+ }
+
+ public void setText(@NonNull String text) {
+ setValue(KEY_TEXT, text);
+ }
+ public String getText() {
+ return getString(KEY_TEXT);
+ }
+ public void setImage(Image image) {
+ setValue(KEY_IMAGE, image);
+ }
+ @SuppressWarnings("unchecked")
+ public Image getImage() {
+ return (Image) getObject(Image.class, KEY_IMAGE);
+ }
+ public void setPosition(@NonNull Integer position) {
+ setValue(KEY_POSITION, position);
+ }
+ public Integer getPosition() {
+ return getInteger(KEY_POSITION);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherAlert.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherAlert.java
new file mode 100644
index 000000000..3131b0998
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherAlert.java
@@ -0,0 +1,121 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+
+public class WeatherAlert extends RPCStruct {
+
+ public static final String KEY_TITLE = "title";
+ public static final String KEY_SUMMARY = "summary";
+ public static final String KEY_EXPIRES = "expires";
+ public static final String KEY_REGIONS = "regions";
+ public static final String KEY_SEVERITY = "severity";
+ public static final String KEY_TIME_ISSUED = "timeIssued";
+
+ // Constructors
+
+ public WeatherAlert() { }
+
+ public WeatherAlert(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public WeatherAlert(@NonNull List<String> regions) {
+ this();
+ setRegions(regions);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param title -
+ */
+ public void setTitle(String title) {
+ setValue(KEY_TITLE, title);
+ }
+
+ /**
+ * @return title
+ */
+ public String getTitle() {
+ return getString(KEY_TITLE);
+ }
+
+ /**
+ * @param summary -
+ */
+ public void setSummary(String summary) {
+ setValue(KEY_SUMMARY, summary);
+ }
+
+ /**
+ * @return summary
+ */
+ public String getSummary() {
+ return getString(KEY_SUMMARY);
+ }
+
+ /**
+ * @param severity -
+ */
+ public void setSeverity(String severity) {
+ setValue(KEY_SEVERITY, severity);
+ }
+
+ /**
+ * @return severity
+ */
+ public String getSeverity() {
+ return getString(KEY_SEVERITY);
+ }
+
+ /**
+ * Min Size: 1, Max Size: 99
+ * @param regions -
+ */
+ public void setRegions(@NonNull List<String> regions) {
+ setValue(KEY_REGIONS, regions);
+ }
+
+ /**
+ * @return regions list
+ */
+ @SuppressWarnings("unchecked")
+ public List<String> getRegions(){
+ return (List<String>) getObject(String.class,KEY_REGIONS);
+ }
+
+ /**
+ * @param expires -
+ */
+ public void setExpires(DateTime expires) {
+ setValue(KEY_EXPIRES, expires);
+ }
+
+ /**
+ * @return expires
+ */
+ public DateTime getExpires() {
+ return (DateTime) getObject(DateTime.class,KEY_EXPIRES);
+ }
+
+ /**
+ * @param timeIssued -
+ */
+ public void setTimeIssued(DateTime timeIssued) {
+ setValue(KEY_TIME_ISSUED, timeIssued);
+ }
+
+ /**
+ * @return timeIssued
+ */
+ public DateTime getTimeIssued() {
+ return (DateTime) getObject(DateTime.class,KEY_TIME_ISSUED);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherData.java
new file mode 100644
index 000000000..a71261902
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherData.java
@@ -0,0 +1,350 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class WeatherData extends RPCStruct {
+
+ public static final String KEY_CURRENT_TEMPERATURE = "currentTemperature";
+ public static final String KEY_TEMPERATURE_HIGH = "temperatureHigh";
+ public static final String KEY_TEMPERATURE_LOW = "temperatureLow";
+ public static final String KEY_APPARENT_TEMPERATURE = "apparentTemperature";
+ public static final String KEY_APPARENT_TEMPERATURE_HIGH = "apparentTemperatureHigh";
+ public static final String KEY_APPARENT_TEMPERATURE_LOW = "apparentTemperatureLow";
+ public static final String KEY_WEATHER_SUMMARY = "weatherSummary";
+ public static final String KEY_TIME = "time";
+ public static final String KEY_HUMIDITY = "humidity";
+ public static final String KEY_CLOUD_COVER = "cloudCover";
+ public static final String KEY_MOON_PHASE = "moonPhase";
+ public static final String KEY_WIND_BEARING = "windBearing";
+ public static final String KEY_WIND_GUST = "windGust";
+ public static final String KEY_WIND_SPEED = "windSpeed";
+ public static final String KEY_NEAREST_STORM_BEARING = "nearestStormBearing";
+ public static final String KEY_NEAREST_STORM_DISTANCE = "nearestStormDistance";
+ public static final String KEY_PRECIP_ACCUMULATION = "precipAccumulation";
+ public static final String KEY_PRECIP_INTENSITY = "precipIntensity";
+ public static final String KEY_PRECIP_PROBABILITY = "precipProbability";
+ public static final String KEY_PRECIP_TYPE = "precipType";
+ public static final String KEY_VISIBILITY = "visibility";
+ public static final String KEY_WEATHER_ICON_IMAGE_NAME = "weatherIconImageName";
+
+ // Constructors
+
+ public WeatherData() { }
+
+ public WeatherData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param currentTemperature -
+ */
+ public void setCurrentTemperature(Temperature currentTemperature) {
+ setValue(KEY_CURRENT_TEMPERATURE, currentTemperature);
+ }
+
+ /**
+ * @return currentTemperature
+ */
+ public Temperature getCurrentTemperature() {
+ return (Temperature) getObject(Temperature.class,KEY_CURRENT_TEMPERATURE);
+ }
+
+ /**
+ * @param temperatureHigh -
+ */
+ public void setTemperatureHigh(Temperature temperatureHigh) {
+ setValue(KEY_TEMPERATURE_HIGH, temperatureHigh);
+ }
+
+ /**
+ * @return temperatureHigh
+ */
+ public Temperature getTemperatureHigh() {
+ return (Temperature) getObject(Temperature.class,KEY_TEMPERATURE_HIGH);
+ }
+
+ /**
+ * @param temperatureLow -
+ */
+ public void setTemperatureLow(Temperature temperatureLow) {
+ setValue(KEY_TEMPERATURE_LOW, temperatureLow);
+ }
+
+ /**
+ * @return temperatureLow
+ */
+ public Temperature getTemperatureLow() {
+ return (Temperature) getObject(Temperature.class,KEY_TEMPERATURE_LOW);
+ }
+
+ /**
+ * @param apparentTemperature -
+ */
+ public void setApparentTemperature(Temperature apparentTemperature) {
+ setValue(KEY_APPARENT_TEMPERATURE, apparentTemperature);
+ }
+
+ /**
+ * @return apparentTemperature
+ */
+ public Temperature getApparentTemperature() {
+ return (Temperature) getObject(Temperature.class,KEY_APPARENT_TEMPERATURE);
+ }
+
+ /**
+ * @param apparentTemperatureHigh -
+ */
+ public void setApparentTemperatureHigh(Temperature apparentTemperatureHigh) {
+ setValue(KEY_APPARENT_TEMPERATURE_HIGH, apparentTemperatureHigh);
+ }
+
+ /**
+ * @return apparentTemperatureHigh
+ */
+ public Temperature getApparentTemperatureHigh() {
+ return (Temperature) getObject(Temperature.class,KEY_APPARENT_TEMPERATURE_HIGH);
+ }
+
+ /**
+ * @param apparentTemperatureLow -
+ */
+ public void setApparentTemperatureLow(Temperature apparentTemperatureLow) {
+ setValue(KEY_APPARENT_TEMPERATURE_LOW, apparentTemperatureLow);
+ }
+
+ /**
+ * @return apparentTemperatureLow
+ */
+ public Temperature getApparentTemperatureLow() {
+ return (Temperature) getObject(Temperature.class,KEY_APPARENT_TEMPERATURE_LOW);
+ }
+
+ /**
+ * @param weatherSummary -
+ */
+ public void setWeatherSummary(String weatherSummary) {
+ setValue(KEY_WEATHER_SUMMARY, weatherSummary);
+ }
+
+ /**
+ * @return weatherSummary
+ */
+ public String getWeatherSummary() {
+ return getString(KEY_WEATHER_SUMMARY);
+ }
+
+ /**
+ * @param time -
+ */
+ public void setTime(DateTime time) {
+ setValue(KEY_TIME, time);
+ }
+
+ /**
+ * @return time
+ */
+ public DateTime getTime() {
+ return (DateTime) getObject(DateTime.class,KEY_TIME);
+ }
+
+ /**
+ * @param humidity - 0 to 1, percentage humidity
+ */
+ public void setHumidity(Float humidity) {
+ setValue(KEY_HUMIDITY, humidity);
+ }
+
+ /**
+ * @return humidity - 0 to 1, percentage humidity
+ */
+ public Float getHumidity() {
+ return getFloat(KEY_HUMIDITY);
+ }
+
+ /**
+ * @param cloudCover - 0 to 1, cloud cover
+ */
+ public void setCloudCover(Float cloudCover) {
+ setValue(KEY_CLOUD_COVER, cloudCover);
+ }
+
+ /**
+ * @return cloudCover - 0 to 1, cloud cover
+ */
+ public Float getCloudCover() {
+ return getFloat(KEY_CLOUD_COVER);
+ }
+
+ /**
+ * @param moonPhase - 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon
+ */
+ public void setMoonPhase(Float moonPhase) {
+ setValue(KEY_MOON_PHASE, moonPhase);
+ }
+
+ /**
+ * @return moonPhase - 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon
+ */
+ public Float getMoonPhase() {
+ return getFloat(KEY_MOON_PHASE);
+ }
+
+ /**
+ * @param windBearing - In degrees, true north at 0 degrees
+ */
+ public void setWindBearing(Integer windBearing) {
+ setValue(KEY_WIND_BEARING, windBearing);
+ }
+
+ /**
+ * @return windBearing - In degrees, true north at 0 degrees
+ */
+ public Integer getWindBearing() {
+ return getInteger(KEY_WIND_BEARING);
+ }
+
+ /**
+ * @param windGust - km/hr
+ */
+ public void setWindGust(Float windGust) {
+ setValue(KEY_WIND_GUST, windGust);
+ }
+
+ /**
+ * @return windGust - km/hr
+ */
+ public Float getWindGust() {
+ return getFloat(KEY_WIND_GUST);
+ }
+
+ /**
+ * @param windSpeed - km/hr
+ */
+ public void setWindSpeed(Float windSpeed) {
+ setValue(KEY_WIND_SPEED, windSpeed);
+ }
+
+ /**
+ * @return windSpeed - km/hr
+ */
+ public Float getWindSpeed() {
+ return getFloat(KEY_WIND_SPEED);
+ }
+
+ /**
+ * @param nearestStormBearing - In degrees, true north at 0 degrees
+ */
+ public void setNearestStormBearing(Integer nearestStormBearing) {
+ setValue(KEY_NEAREST_STORM_BEARING, nearestStormBearing);
+ }
+
+ /**
+ * @return nearestStormBearing - In degrees, true north at 0 degrees
+ */
+ public Integer getNearestStormBearing() {
+ return getInteger(KEY_NEAREST_STORM_BEARING);
+ }
+
+ /**
+ * @param nearestStormDistance - In km
+ */
+ public void setNearestStormDistance(Integer nearestStormDistance) {
+ setValue(KEY_NEAREST_STORM_DISTANCE, nearestStormDistance);
+ }
+
+ /**
+ * @return nearestStormDistance - In km
+ */
+ public Integer getNearestStormDistance() {
+ return getInteger(KEY_NEAREST_STORM_DISTANCE);
+ }
+
+ /**
+ * @param precipAccumulation - cm
+ */
+ public void setPrecipAccumulation(Float precipAccumulation) {
+ setValue(KEY_PRECIP_ACCUMULATION, precipAccumulation);
+ }
+
+ /**
+ * @return precipAccumulation - cm
+ */
+ public Float getPrecipAccumulation() {
+ return getFloat(KEY_PRECIP_ACCUMULATION);
+ }
+
+ /**
+ * @param precipIntensity - cm of water per hour
+ */
+ public void setPrecipIntensity(Float precipIntensity) {
+ setValue(KEY_PRECIP_INTENSITY, precipIntensity);
+ }
+
+ /**
+ * @return precipIntensity - cm of water per hour
+ */
+ public Float getPrecipIntensity() {
+ return getFloat(KEY_PRECIP_INTENSITY);
+ }
+
+ /**
+ * @param precipProbability - 0 to 1, percentage chance
+ */
+ public void setPrecipProbability(Float precipProbability) {
+ setValue(KEY_PRECIP_PROBABILITY, precipProbability);
+ }
+
+ /**
+ * @return precipProbability - 0 to 1, percentage chance
+ */
+ public Float getPrecipProbability() {
+ return getFloat(KEY_PRECIP_PROBABILITY);
+ }
+
+ /**
+ * @param precipType - e.g. "rain", "snow", "sleet", "hail"
+ */
+ public void setPrecipType(String precipType) {
+ setValue(KEY_PRECIP_TYPE, precipType);
+ }
+
+ /**
+ * @return precipType - e.g. "rain", "snow", "sleet", "hail"
+ */
+ public String getPrecipType() {
+ return getString(KEY_PRECIP_TYPE);
+ }
+
+ /**
+ * @param weatherIconImageName -
+ */
+ public void setWeatherIconImageName(String weatherIconImageName) {
+ setValue(KEY_WEATHER_ICON_IMAGE_NAME, weatherIconImageName);
+ }
+
+ /**
+ * @return weatherIconImageName
+ */
+ public String getWeatherIconImageName() {
+ return getString(KEY_WEATHER_ICON_IMAGE_NAME);
+ }
+
+ /**
+ * @param visibility - In km
+ */
+ public void setVisibility(Float visibility) {
+ setValue(KEY_VISIBILITY, visibility);
+ }
+
+ /**
+ * @return visibility - In km
+ */
+ public Float getVisibility() {
+ return getFloat(KEY_VISIBILITY);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceData.java
new file mode 100644
index 000000000..07a0b99a8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceData.java
@@ -0,0 +1,133 @@
+package com.smartdevicelink.proxy.rpc;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+import java.util.List;
+
+/**
+ * This data is related to what a weather service would provide
+ */
+public class WeatherServiceData extends RPCStruct {
+
+ public static final String KEY_LOCATION = "location";
+ public static final String KEY_CURRENT_FORECAST = "currentForecast";
+ public static final String KEY_MINUTE_FORECAST = "minuteForecast";
+ public static final String KEY_HOURLY_FORECAST = "hourlyForecast";
+ public static final String KEY_MULTIDAY_FORECAST = "multidayForecast";
+ public static final String KEY_ALERTS = "alerts";
+
+ // Constructors
+
+ public WeatherServiceData() { }
+
+ public WeatherServiceData(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public WeatherServiceData(@NonNull LocationDetails location) {
+ this();
+ setLocation(location);
+ }
+
+ // Setters and Getters
+
+ /**
+ * @param location -
+ */
+ public void setLocation(@NonNull LocationDetails location) {
+ setValue(KEY_LOCATION, location);
+ }
+
+ /**
+ * @return location
+ */
+ public LocationDetails getLocation() {
+ return (LocationDetails) getObject(LocationDetails.class,KEY_LOCATION);
+ }
+
+ /**
+ * @param currentForecast -
+ */
+ public void setCurrentForecast(WeatherData currentForecast) {
+ setValue(KEY_CURRENT_FORECAST, currentForecast);
+ }
+
+ /**
+ * @return currentForecast
+ */
+ public WeatherData getCurrentForecast() {
+ return (WeatherData) getObject(WeatherData.class,KEY_CURRENT_FORECAST);
+ }
+
+ /**
+ * minsize: 15, maxsize: 60
+ * @param minuteForecast -
+ */
+ public void setMinuteForecast(List<WeatherData> minuteForecast){
+ setValue(KEY_MINUTE_FORECAST, minuteForecast);
+ }
+
+ /**
+ * minsize: 15, maxsize: 60
+ * @return minuteForecast
+ */
+ @SuppressWarnings("unchecked")
+ public List<WeatherData> getMinuteForecast(){
+ return (List<WeatherData>) getObject(WeatherData.class,KEY_MINUTE_FORECAST);
+ }
+
+ /**
+ * minsize: 1, maxsize: 96
+ * @param hourlyForecast -
+ */
+ public void setHourlyForecast(List<WeatherData> hourlyForecast){
+ setValue(KEY_HOURLY_FORECAST, hourlyForecast);
+ }
+
+ /**
+ * minsize: 1, maxsize: 96
+ * @return hourlyForecast
+ */
+ @SuppressWarnings("unchecked")
+ public List<WeatherData> getHourlyForecast(){
+ return (List<WeatherData>) getObject(WeatherData.class,KEY_HOURLY_FORECAST);
+ }
+
+ /**
+ * minsize: 1, maxsize: 30
+ * @param multidayForecast -
+ */
+ public void setMultidayForecast(List<WeatherData> multidayForecast){
+ setValue(KEY_MULTIDAY_FORECAST, multidayForecast);
+ }
+
+ /**
+ * minsize: 1, maxsize: 30
+ * @return multidayForecast
+ */
+ @SuppressWarnings("unchecked")
+ public List<WeatherData> getMultidayForecast(){
+ return (List<WeatherData>) getObject(WeatherData.class,KEY_MULTIDAY_FORECAST);
+ }
+
+ /**
+ * minsize: 1, maxsize: 10
+ * @param alerts -
+ */
+ public void setAlerts(List<WeatherAlert> alerts){
+ setValue(KEY_ALERTS, alerts);
+ }
+
+ /**
+ * minsize: 1, maxsize: 10
+ * @return alerts
+ */
+ @SuppressWarnings("unchecked")
+ public List<WeatherAlert> getAlerts(){
+ return (List<WeatherAlert>) getObject(WeatherAlert.class,KEY_ALERTS);
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceManifest.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceManifest.java
new file mode 100644
index 000000000..874b37e69
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/WeatherServiceManifest.java
@@ -0,0 +1,103 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class WeatherServiceManifest extends RPCStruct {
+
+ public static final String KEY_CURRENT_FORECAST_SUPPORTED = "currentForecastSupported";
+ public static final String KEY_MAX_MULTIDAY_FORECAST_AMOUNT = "maxMultidayForecastAmount";
+ public static final String KEY_MAX_HOURLY_FORECAST_AMOUNT = "maxHourlyForecastAmount";
+ public static final String KEY_MAX_MINUTELY_FORECAST_AMOUNT = "maxMinutelyForecastAmount";
+ public static final String KEY_WEATHER_FOR_LOCATION_SUPPORTED = "weatherForLocationSupported";
+
+ // Constructors
+
+ public WeatherServiceManifest() { }
+
+ public WeatherServiceManifest(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ // Setters and Getters
+ /**
+ * Set whether the current forecast is supported
+ * @param currentForecastSupported -
+ */
+ public void setCurrentForecastSupported(Boolean currentForecastSupported){
+ setValue(KEY_CURRENT_FORECAST_SUPPORTED, currentForecastSupported);
+ }
+
+ /**
+ * Get whether the current forecast is supported
+ * @return currentForecastSupported
+ */
+ public Boolean getCurrentForecastSupported(){
+ return getBoolean(KEY_CURRENT_FORECAST_SUPPORTED);
+ }
+
+ /**
+ * Set the max multi day forecast amount
+ * @param maxMultidayForecastAmount -
+ */
+ public void setMaxMultidayForecastAmount(Integer maxMultidayForecastAmount){
+ setValue(KEY_MAX_MULTIDAY_FORECAST_AMOUNT, maxMultidayForecastAmount);
+ }
+
+ /**
+ * Get the max multi day forecast amount
+ * @return maxMultidayForecastAmount
+ */
+ public Integer getMaxMultidayForecastAmount(){
+ return getInteger(KEY_MAX_MULTIDAY_FORECAST_AMOUNT);
+ }
+
+ /**
+ * Set the max hourly forecast amount
+ * @param maxHourlyForecastAmount -
+ */
+ public void setMaxHourlyForecastAmount(Integer maxHourlyForecastAmount){
+ setValue(KEY_MAX_HOURLY_FORECAST_AMOUNT, maxHourlyForecastAmount);
+ }
+
+ /**
+ * Get the max hourly forecast amount
+ * @return maxHourlyForecastAmount
+ */
+ public Integer getMaxHourlyForecastAmount(){
+ return getInteger(KEY_MAX_HOURLY_FORECAST_AMOUNT);
+ }
+
+ /**
+ * Set the max minutely forecast amount
+ * @param maxMinutelyForecastAmount -
+ */
+ public void setMaxMinutelyForecastAmount(Integer maxMinutelyForecastAmount){
+ setValue(KEY_MAX_MINUTELY_FORECAST_AMOUNT, maxMinutelyForecastAmount);
+ }
+
+ /**
+ * Get the max minutely forecast amount
+ * @return maxMinutelyForecastAmount
+ */
+ public Integer getMaxMinutelyForecastAmount(){
+ return getInteger(KEY_MAX_MINUTELY_FORECAST_AMOUNT);
+ }
+
+ /**
+ * Set whether the weather is supported for the current location
+ * @param weatherForLocationSupported -
+ */
+ public void setWeatherForLocationSupported(Boolean weatherForLocationSupported){
+ setValue(KEY_WEATHER_FOR_LOCATION_SUPPORTED, weatherForLocationSupported);
+ }
+
+ /**
+ * Get whether the weather is supported for the current location
+ * @return weatherForLocationSupported
+ */
+ public Boolean getWeatherForLocationSupported(){
+ return getBoolean(KEY_WEATHER_FOR_LOCATION_SUPPORTED);
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AmbientLightStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AmbientLightStatus.java
new file mode 100644
index 000000000..3f4076b11
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AmbientLightStatus.java
@@ -0,0 +1,34 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Reflects the status of the ambient light sensor.
+ *
+ * @since SmartDeviceLink 2.3.2
+ *
+ * @see SoftButtonCapabilities
+ * @see ButtonCapabilities
+ * @see OnButtonPress
+ *
+ */
+
+public enum AmbientLightStatus {
+ NIGHT,
+ TWILIGHT_1,
+ TWILIGHT_2,
+ TWILIGHT_3,
+ TWILIGHT_4,
+ DAY,
+ UNKNOWN,
+ INVALID;
+ /**
+ * Convert String to AmbientLightStatus
+ * @param value String
+ * @return AmbientLightStatus
+ */
+
+ public static AmbientLightStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppHMIType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppHMIType.java
new file mode 100644
index 000000000..1bb045006
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppHMIType.java
@@ -0,0 +1,67 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration listing possible app hmi types.
+ * @since SmartDeviceLink 2.0
+ */
+public enum AppHMIType {
+ /**
+ * The App will have default rights.
+ */
+ DEFAULT,
+ /**
+ * Communication type of App
+ */
+ COMMUNICATION,
+ /**
+ * App dealing with Media
+ */
+ MEDIA,
+ /**
+ * Messaging App
+ */
+ MESSAGING,
+ /**
+ * Navigation App
+ */
+ NAVIGATION,
+ /**
+ * Information App
+ */
+ INFORMATION,
+ /**
+ * App dealing with social media
+ */
+ SOCIAL,
+ BACKGROUND_PROCESS,
+ /**
+ * App only for Testing purposes
+ */
+ TESTING,
+ /**
+ * Custom App Interfaces
+ */
+ PROJECTION,
+ /**
+ * System App
+ */
+ SYSTEM,
+ /**
+ * Remote Control
+ */
+ REMOTE_CONTROL,
+ ;
+
+ /**
+ * Convert String to AppHMIType
+ * @param value String
+ * @return AppHMIType
+ */
+ public static AppHMIType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppInterfaceUnregisteredReason.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppInterfaceUnregisteredReason.java
new file mode 100644
index 000000000..d4a7ff103
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppInterfaceUnregisteredReason.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Indicates reason why app interface was unregistered. The application is being
+ * disconnected by SDL.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum AppInterfaceUnregisteredReason {
+ USER_EXIT,
+ /**
+ * Vehicle ignition turned off.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ IGNITION_OFF,
+ /**
+ * Bluetooth was turned off, causing termination of a necessary Bluetooth
+ * connection.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ BLUETOOTH_OFF,
+ /**
+ * USB was disconnected, causing termination of a necessary iAP connection.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ USB_DISCONNECTED,
+ /**
+ * Application attempted SmartDeviceLink RPC request while {@linkplain HMILevel}
+ * =NONE. App must have HMILevel other than NONE to issue RPC requests or
+ * get notifications or RPC responses.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ REQUEST_WHILE_IN_NONE_HMI_LEVEL,
+ /**
+ * Either too many -- or too many per unit of time -- requests were made by
+ * the application.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ TOO_MANY_REQUESTS,
+ /**
+ * The application has issued requests which cause driver distraction rules
+ * to be violated.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ DRIVER_DISTRACTION_VIOLATION,
+ /**
+ * The user has changed the language in effect on the SDL platform to a
+ * language that is incompatible with the language declared by the
+ * application in its RegisterAppInterface request.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ LANGUAGE_CHANGE,
+ /**
+ * The user performed a MASTER RESET on the SDL platform, causing removal
+ * of a necessary Bluetooth pairing.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ MASTER_RESET,
+ /**
+ * The user restored settings to FACTORY DEFAULTS on the SDL platform.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ FACTORY_DEFAULTS,
+ /**
+ * The app is not being authorized to be connected to SDL.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ APP_UNAUTHORIZED,
+ /**
+ * The app has committed a protocol violation.
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ PROTOCOL_VIOLATION,
+ ;
+ /**
+ * Convert String to AppInterfaceUnregisteredReason
+ * @param value String
+ * @return AppInterfaceUnregisteredReason
+ */
+ public static AppInterfaceUnregisteredReason valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppServiceType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppServiceType.java
new file mode 100644
index 000000000..a4b8e16c2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AppServiceType.java
@@ -0,0 +1,28 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration listing possible app service types.
+ */
+public enum AppServiceType {
+
+ MEDIA,
+
+ WEATHER,
+
+ NAVIGATION,
+
+ ;
+
+ /**
+ * Convert String to AppServiceType
+ * @param value String
+ * @return AppServiceType
+ */
+ public static AppServiceType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingIndicator.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingIndicator.java
new file mode 100644
index 000000000..00a15d9f0
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingIndicator.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Identifies the playback status of a media app
+ *
+ * @since SmartDeviceLink 5.0
+ */
+public enum AudioStreamingIndicator {
+ /**
+ * Default playback indicator.
+ *
+ * @since SmartDeviceLink 5.0
+ */
+ PLAY_PAUSE,
+
+ /**
+ * Indicates that a button press of the Play/Pause button would start the playback.
+ *
+ * @since SmartDeviceLink 5.0
+ */
+ PLAY,
+ /**
+ * Indicates that a button press of the Play/Pause button would pause the current playback.
+ *
+ * @since SmartDeviceLink 5.0
+ */
+ PAUSE,
+ /**
+ * Indicates that a button press of the Play/Pause button would stop the current playback.
+ *
+ * @since SmartDeviceLink 5.0
+ */
+ STOP,
+ ;
+
+ /**
+ * Convert String to AudioStreamingIndicator
+ * @param value String
+ * @return AudioStreamingIndicator
+ */
+ public static AudioStreamingIndicator valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingState.java
new file mode 100644
index 000000000..50accb6bf
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioStreamingState.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Describes whether or not streaming audio is currently audible to the user.
+ * Though provided in every OnHMIStatus notification, this information is only
+ * relevant for applications that declare themselves as media apps in
+ * RegisterAppInterface
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum AudioStreamingState {
+ /**
+ * Currently streaming audio, if any, is audible to user.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ AUDIBLE,
+
+ /**
+ * Some kind of audio mixing is taking place. Currently streaming audio, if
+ * any, is audible to the user at a lowered volume.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ ATTENUATED,
+ /**
+ * Currently streaming audio, if any, is not audible to user. made via VR
+ * session.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ NOT_AUDIBLE;
+ /**
+ * Convert String to AudioStreamingState
+ * @param value String
+ * @return AudioStreamingState
+ */
+
+ public static AudioStreamingState valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioType.java
new file mode 100644
index 000000000..d340e0e4c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/AudioType.java
@@ -0,0 +1,32 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Describes different audio type options for PerformAudioPassThru
+ *
+ * @see SoftButtonCapabilities
+ * @see ButtonCapabilities
+ * @see OnButtonPress
+ * @since SmartDeviceLink 2.0
+
+ */
+public enum AudioType {
+ /**
+ * PCM raw audio
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ PCM;
+ /**
+ * Convert String to AudioType
+ * @param value String
+ * @return AudioType
+ */
+
+ public static AudioType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/BitsPerSample.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/BitsPerSample.java
new file mode 100644
index 000000000..b21e138a9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/BitsPerSample.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Describes different bit depth options for PerformAudioPassThru.
+ * @see PerformAudioPassThru
+ * @since SmartDeviceLink 2.0
+ */
+public enum BitsPerSample {
+ /**
+ * 8 bits per sample
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _8_BIT("8_BIT"),
+ /**
+ * 16 bits per sample
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _16_BIT("16_BIT");
+
+ private final String INTERNAL_NAME;
+
+ private BitsPerSample(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static BitsPerSample valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (BitsPerSample anEnum : EnumSet.allOf(BitsPerSample.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonEventMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonEventMode.java
new file mode 100644
index 000000000..33f1f0f49
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonEventMode.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Indicates whether the button was depressed or released. A BUTTONUP event will
+ * always be preceded by a BUTTONDOWN event
+ *
+ * @see SoftButtonCapabilities
+ * @see OnButtonEvent
+ * @since SmartDeviceLink 1.0
+ */
+public enum ButtonEventMode {
+ /**
+ * The button was released
+ */
+ BUTTONUP,
+ /**
+ * The button was depressed
+ */
+ BUTTONDOWN;
+
+ /**
+ * Returns a ButtonEventMode (BUTTONUP or BUTTONDOWN)
+ *
+ * @param value
+ * a String
+ * @return ButtonEventMode -BUTTONUP or BUTTONDOWN
+ */
+
+ public static ButtonEventMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonName.java
new file mode 100644
index 000000000..6d4cecffc
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonName.java
@@ -0,0 +1,224 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * <p>
+ * Defines logical buttons which, on a given SDL unit, would correspond to
+ * either physical or soft (touchscreen) buttons. These logical buttons present
+ * a standard functional abstraction which the developer can rely upon,
+ * independent of the SDL unit. For example, the developer can rely upon the OK
+ * button having the same meaning to the user across SDL platforms.
+ * </p>
+ * <p>
+ * The preset buttons (0-9) can typically be interpreted by the application as
+ * corresponding to some user-configured choices, though the application is free
+ * to interpret these button presses as it sees fit.
+ * </p>
+ * <p>
+ * The application can discover which buttons a given SDL unit implements by
+ * interrogating the ButtonCapabilities parameter of the
+ * RegisterAppInterface response.
+ * </p>
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum ButtonName{
+ /**
+ * <br><b>THIS ENUM VALUE WILL CHANGE IN FUNCITONALITY DURING THE NEXT MAJOR RELEASE!</b>
+ * <br><br>
+ * This ButtonName value originally was used for both the OK button and PLAY_PAUSE button. As of
+ * SmartDeviceLink 5.0.0, the functionality was broken out into the OK and PLAY_PAUSE buttons.
+ * <br><br> For this version of the library OK will be received for both OK and PLAY_PAUSE to
+ * mitigate a potential break in functionliaty. If the desire is only for the OK functionality,
+ * this button should still be used. If the desired functionality was actually for the play/pause
+ * toggle, then the new PLAY_PAUSE should be used.
+ * <br><br>
+ * Represents the button usually labeled "OK". A typical use of this button
+ * is for the user to press it to make a selection (and until a major library version release,
+ * play pause toggle).
+ *
+ * @since SmartDeviceLink 1.0
+ * @see #PLAY_PAUSE
+ */
+ OK,
+ /**
+ * Represents the seek-left button. A typical use of this button is for the
+ * user to scroll to the left through menu choices one menu item per press.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ SEEKLEFT,
+ /**
+ * Represents the seek-right button. A typical use of this button is for the
+ * user to scroll to the right through menu choices one menu item per press.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ SEEKRIGHT,
+ /**
+ * Represents a turn of the tuner knob in the clockwise direction one tick.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ TUNEUP,
+ /**
+ * Represents a turn of the tuner knob in the counter-clockwise direction
+ * one tick.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ TUNEDOWN,
+ /**
+ * Represents the preset 0 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_0,
+ /**
+ * Represents the preset 1 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_1,
+ /**
+ * Represents the preset 2 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_2,
+ /**
+ * Represents the preset 3 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_3,
+ /**
+ * Represents the preset 4 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_4,
+ /**
+ * Represents the preset 5 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_5,
+ /**
+ * Represents the preset 6 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_6,
+ /**
+ * Represents the preset 7 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_7,
+ /**
+ * Represents the preset 8 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_8,
+ /**
+ * Represents the preset 9 button.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ PRESET_9,
+ CUSTOM_BUTTON,
+ SEARCH,
+ AC_MAX,
+ AC,
+ RECIRCULATE,
+ FAN_UP,
+ FAN_DOWN,
+ TEMP_UP,
+ TEMP_DOWN,
+ DEFROST_MAX,
+ DEFROST,
+ DEFROST_REAR,
+ UPPER_VENT,
+ LOWER_VENT,
+ VOLUME_UP,
+ VOLUME_DOWN,
+ EJECT,
+ SOURCE,
+ SHUFFLE,
+ REPEAT,
+ /**
+ * Represents the play/pause button. A typical use of this button
+ * is for the user to press it to toggle between media playing and pausing.
+ *
+ * <br><br><b>NOTE:</b> This functionality used to be represented by the OK button.
+ *
+ * @since SmartDeviceLink 5.0
+ * @see #OK
+ */
+ PLAY_PAUSE,
+
+ ;
+
+ public static ButtonName valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+
+ /**
+ * indexForPresetButton returns the integer index for preset buttons
+ * which match the preset order. E.G.: indexForPresetButton(PRESET_1)
+ * returns the value 1. If the buttonName given is not a preset button,
+ * the method will return null.
+ *
+ * @param buttonName
+ * @return Integer
+ */
+ public static Integer indexForPresetButton(ButtonName buttonName) {
+ if(buttonName == null){
+ return null;
+ }
+
+ Integer returnIndex = null;
+
+ switch(buttonName) {
+ case PRESET_0:
+ returnIndex = 0;
+ break;
+ case PRESET_1:
+ returnIndex = 1;
+ break;
+ case PRESET_2:
+ returnIndex = 2;
+ break;
+ case PRESET_3:
+ returnIndex = 3;
+ break;
+ case PRESET_4:
+ returnIndex = 4;
+ break;
+ case PRESET_5:
+ returnIndex = 5;
+ break;
+ case PRESET_6:
+ returnIndex = 6;
+ break;
+ case PRESET_7:
+ returnIndex = 7;
+ break;
+ case PRESET_8:
+ returnIndex = 8;
+ break;
+ case PRESET_9:
+ returnIndex = 9;
+ break;
+ default:
+ break;
+ }
+
+ return returnIndex;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonPressMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonPressMode.java
new file mode 100644
index 000000000..cc2852526
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ButtonPressMode.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Indicates whether this is a LONG or SHORT button press.
+ * <p></p>
+ *@see ButtonEventMode
+ *@since SmartDeviceLink 1.0
+ */
+public enum ButtonPressMode {
+ /**
+ * The button has been depressed for 2 seconds. The button may remain
+ * depressed after receiving this event
+ */
+ LONG,
+ /**
+ * The button was released before the 2-second long-press interval had
+ * elapsed
+ */
+ SHORT;
+ /**
+ * Returns a ButtonPressMode (LONG or SHORT)
+ *
+ * @param value
+ * a String
+ * @return ButtonPressMode -LONG or SHORT
+ */
+
+ public static ButtonPressMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CarModeStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CarModeStatus.java
new file mode 100644
index 000000000..c44b457ec
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CarModeStatus.java
@@ -0,0 +1,39 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Describes the carmode the vehicle is in.
+ * @see SoftButtonCapabilities
+ * @see ButtonCapabilities
+ * @see OnButtonPress
+ * @since SmartDeviceLink 2.0
+ */
+
+public enum CarModeStatus {
+ /** Provides carmode NORMAL to each module.
+ */
+
+ NORMAL,
+ /** Provides carmode FACTORY to each module.
+ */
+
+ FACTORY,
+ /** Provides carmode TRANSPORT to each module.
+ */
+
+ TRANSPORT,
+ /** Provides carmode CRASH to each module.
+ */
+
+
+ CRASH;
+ /** Convert String to CarModeStatus
+ * @param value String
+ * @return CarModeStatus
+ */
+
+ public static CarModeStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CharacterSet.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CharacterSet.java
new file mode 100644
index 000000000..b8c4c9535
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CharacterSet.java
@@ -0,0 +1,24 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Character sets supported by SDL.
+ * @since SmartDeviceLink 1.0
+ */
+public enum CharacterSet {
+ TYPE2SET,
+ TYPE5SET,
+ CID1SET,
+ CID2SET;
+
+ /**
+ * Convert String to CharacterSet
+ * @param value String
+ * @return CharacterSet
+ */
+ public static CharacterSet valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CompassDirection.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CompassDirection.java
new file mode 100644
index 000000000..a450bf6ed
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/CompassDirection.java
@@ -0,0 +1,53 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * The list of potential compass directions
+ * @since SmartDeviceLink 2.0
+ */
+public enum CompassDirection {
+ /**
+ * Direction North
+ */
+ NORTH,
+ /**
+ * Direction Northwest
+ */
+ NORTHWEST,
+ /**
+ * Direction West
+ */
+ WEST,
+ /**
+ * Direction Southwest
+ */
+ SOUTHWEST,
+ /**
+ * Direction South
+ */
+ SOUTH,
+ /**
+ * Direction Southeast
+ */
+ SOUTHEAST,
+ /**
+ * Direction East
+ */
+ EAST,
+ /**
+ * Direction Northeast
+ */
+ NORTHEAST;
+
+ /**
+ * Convert String to CompassDirection
+ * @param value String
+ * @return CompassDirection
+ */
+ public static CompassDirection valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ComponentVolumeStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ComponentVolumeStatus.java
new file mode 100644
index 000000000..64d5515ad
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ComponentVolumeStatus.java
@@ -0,0 +1,45 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * The volume status of a vehicle component
+ * @since SmartDeviceLink 2.0
+ */
+public enum ComponentVolumeStatus {
+ /**
+ * Unknown
+ */
+ UNKNOWN,
+ /**
+ * Normal
+ */
+ NORMAL,
+ /**
+ * Low
+ */
+ LOW,
+ /**
+ * Fault
+ */
+ FAULT,
+ /**
+ * Alert
+ */
+ ALERT,
+ /**
+ * Not supported
+ */
+ NOT_SUPPORTED;
+
+ /**
+ * Convert String to ComponentVolumeStatus
+ * @param value String
+ * @return ComponentVolumeStatus
+ */
+ public static ComponentVolumeStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DefrostZone.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DefrostZone.java
new file mode 100644
index 000000000..4c6b15e85
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DefrostZone.java
@@ -0,0 +1,17 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum DefrostZone {
+ FRONT,
+ REAR,
+ ALL,
+ NONE,
+ ;
+
+ public static DefrostZone valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeliveryMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeliveryMode.java
new file mode 100644
index 000000000..52361a97d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeliveryMode.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum DeliveryMode {
+ PROMPT,
+ DESTINATION,
+ QUEUE,
+ ;
+
+ public static DeliveryMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeviceLevelStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeviceLevelStatus.java
new file mode 100644
index 000000000..273dc83d3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DeviceLevelStatus.java
@@ -0,0 +1,45 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the reported battery status of the connected device, if reported.
+ * @since SmartDeviceLink 2.0
+ */
+public enum DeviceLevelStatus {
+ /**
+ * Zero level bars
+ */
+ ZERO_LEVEL_BARS,
+ /**
+ * One level bars
+ */
+ ONE_LEVEL_BARS,
+ /**
+ * Two level bars
+ */
+ TWO_LEVEL_BARS,
+ /**
+ * Three level bars
+ */
+ THREE_LEVEL_BARS,
+ /**
+ * Four level bars
+ */
+ FOUR_LEVEL_BARS,
+ /**
+ * Not provided
+ */
+ NOT_PROVIDED;
+
+ /**
+ * Convert String to DeviceLevelStatus
+ * @param value String
+ * @return DeviceLevelStatus
+ */
+ public static DeviceLevelStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Dimension.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Dimension.java
new file mode 100644
index 000000000..012803510
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Dimension.java
@@ -0,0 +1,50 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * The supported dimensions of the GPS.
+ * @since SmartDeviceLink 2.0
+ */
+public enum Dimension {
+ /**
+ * No GPS at all
+ */
+ NO_FIX("NO_FIX"),
+ /**
+ * Longitude and latitude
+ */
+ _2D("2D"),
+ /**
+ * Longitude and latitude and altitude
+ */
+ _3D("3D");
+
+ private final String INTERNAL_NAME;
+
+ private Dimension(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ /**
+ * Convert String to Dimension
+ * @param value String
+ * @return Dimension
+ */
+ public static Dimension valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (Dimension anEnum : EnumSet.allOf(Dimension.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Direction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Direction.java
new file mode 100644
index 000000000..546d1316c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Direction.java
@@ -0,0 +1,18 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum Direction {
+
+ LEFT,
+
+ RIGHT,
+
+ ;
+
+ public static Direction valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayMode.java
new file mode 100644
index 000000000..5a0c0c7e4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayMode.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum DisplayMode {
+ DAY,
+ NIGHT,
+ AUTO,
+ ;
+
+ public static DisplayMode valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayType.java
new file mode 100644
index 000000000..2a2996762
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DisplayType.java
@@ -0,0 +1,95 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** The type of the display.
+ *
+ *
+ * @since SmartDevcieLink 1.0
+ *
+ */
+
+public enum DisplayType {
+ /**
+ * Center Information Display.
+ *This display type provides a 2-line x 20 character "dot matrix" display.
+ *
+ */
+
+ CID("CID"),
+ /** TYPE II display.
+ 1 line older radio head unit. */
+
+ TYPE2("TYPE2"),
+ /**
+ * TYPE V display
+ Old radio head unit.
+
+ */
+
+ TYPE5("TYPE5"),
+ /**
+ * Next Generation Navigation display.
+ */
+
+ NGN("NGN"),
+ /**
+ * GEN-2, 8 inch display.
+ */
+
+ GEN2_8_DMA("GEN2_8_DMA"),
+ /**
+ * GEN-2, 6 inch display.
+ */
+
+ GEN2_6_DMA("GEN2_6_DMA"),
+ /**
+ * 3 inch GEN1.1 display.
+ */
+
+ MFD3("MFD3"),
+ /**
+ * 4 inch GEN1.1 display
+ */
+
+ MFD4("MFD4"),
+ /**
+ * 5 inch GEN1.1 display.
+ */
+
+ MFD5("MFD5"),
+ /**
+ * GEN-3, 8 inch display.
+ */
+
+ GEN3_8_INCH("GEN3_8-INCH"),
+
+ /**
+ * SDL_GENERIC display type. Used for most SDL integrations.
+ */
+ SDL_GENERIC("SDL_GENERIC"),
+
+ ;
+
+ private final String INTERNAL_NAME;
+
+ private DisplayType(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public static DisplayType valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (DisplayType type : DisplayType.values()) {
+ if (type.toString().equals(value)) {
+ return type;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return INTERNAL_NAME;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DistanceUnit.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DistanceUnit.java
new file mode 100644
index 000000000..36e103bf3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DistanceUnit.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum DistanceUnit {
+ MILES,
+ KILOMETERS,
+ ;
+
+ public static DistanceUnit valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DriverDistractionState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DriverDistractionState.java
new file mode 100644
index 000000000..890488c5e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/DriverDistractionState.java
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration that describes possible states of driver distraction.
+ * @since SmartDeviceLink 1.0
+ */
+public enum DriverDistractionState {
+ /**
+ * Driver distraction rules are in effect.
+ */
+ DD_ON,
+ /**
+ * Driver distraction rules are NOT in effect.
+ */
+ DD_OFF;
+
+ /**
+ * Convert String to DriverDistractionState
+ * @param value String
+ * @return DriverDistractionState
+ */
+ public static DriverDistractionState valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ECallConfirmationStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ECallConfirmationStatus.java
new file mode 100644
index 000000000..b7a341d9e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ECallConfirmationStatus.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Reflects the status of the eCall Notification.
+ * <p>
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+
+public enum ECallConfirmationStatus {
+ /**
+ * No E-Call signal triggered.
+ */
+ NORMAL,
+ /**
+ * An E-Call is being in progress.
+ */
+ CALL_IN_PROGRESS,
+ /**
+ * An E-Call was cancelled by the user.
+ */
+ CALL_CANCELLED,
+ /**
+ * The E-Call sequence is completed.
+ */
+ CALL_COMPLETED,
+ /**
+ * An E-Call could not be connected.
+ */
+ CALL_UNSUCCESSFUL,
+ /**
+ * E-Call is not configured on this vehicle.
+ */
+ ECALL_CONFIGURED_OFF,
+ /**
+ * E-Call is considered to be complete without Emergency Operator contact.
+ */
+ CALL_COMPLETE_DTMF_TIMEOUT;
+
+ public static ECallConfirmationStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ElectronicParkBrakeStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ElectronicParkBrakeStatus.java
new file mode 100644
index 000000000..f3951c7a1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ElectronicParkBrakeStatus.java
@@ -0,0 +1,38 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum ElectronicParkBrakeStatus {
+ /**
+ * Park brake actuators have been fully applied.
+ */
+ CLOSED,
+ /**
+ * Park brake actuators are transitioning to either Apply/Closed or Release/Open state.
+ */
+ TRANSITION,
+ /**
+ * Park brake actuators are released.
+ */
+ OPEN,
+ /**
+ * When driver pulls the Electronic Park Brake switch while driving "at speed".
+ */
+ DRIVE_ACTIVE,
+ /**
+ * When system has a fault or is under maintenance.
+ */
+ FAULT,
+ ;
+
+ /**
+ * Convert String to ElectronicParkBrakeStatus
+ * @param value String
+ * @return ElectronicParkBrakeStatus
+ */
+ public static ElectronicParkBrakeStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/EmergencyEventType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/EmergencyEventType.java
new file mode 100644
index 000000000..374a6c7e2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/EmergencyEventType.java
@@ -0,0 +1,41 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ *
+ * Reflects the emergency event status of the vehicle.
+ *
+ */
+public enum EmergencyEventType {
+ /** No emergency event has happened.
+ */
+ NO_EVENT,
+ /** Frontal collision has happened.
+ */
+ FRONTAL,
+ /** Side collision has happened.
+ */
+ SIDE,
+ /**Rear collision has happened.
+ */
+ REAR,
+ /** A rollover event has happened.
+ */
+ ROLLOVER,
+ /** The signal is not supported
+ */
+ NOT_SUPPORTED,
+ /** Emergency status cannot be determined
+ */
+ FAULT;
+ /**
+ * Convert String to EmergencyEventType
+ * @param value String
+ * @return EmergencyEventTpe
+ */
+ public static EmergencyEventType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FileType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FileType.java
new file mode 100644
index 000000000..54e5ce8b8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FileType.java
@@ -0,0 +1,44 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration listing possible file types.
+ * @since SmartDeviceLink 2.0
+ */
+public enum FileType {
+ /**
+ * BMP
+ */
+ GRAPHIC_BMP,
+ /**
+ * JPEG
+ */
+ GRAPHIC_JPEG,
+ /**
+ * PNG
+ */
+ GRAPHIC_PNG,
+ /**
+ * WAVE
+ */
+ AUDIO_WAVE,
+ AUDIO_AAC,
+ /**
+ * MP3
+ */
+ AUDIO_MP3,
+ BINARY,
+ JSON;
+
+ /**
+ * Convert String to FileType
+ * @param value String
+ * @return FileType
+ */
+ public static FileType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelCutoffStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelCutoffStatus.java
new file mode 100644
index 000000000..266f13afb
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelCutoffStatus.java
@@ -0,0 +1,32 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Reflects the status of the Restraints Control Module fuel pump cutoff.<br> The fuel pump is cut off typically after the vehicle has had a collision.
+ * <p>
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+public enum FuelCutoffStatus {
+ /** Fuel is cut off
+ */
+ TERMINATE_FUEL,
+ /** Fuel is not cut off
+ *
+ */
+ NORMAL_OPERATION,
+ /** Status of the fuel pump cannot be determined
+ *
+ */
+ FAULT;
+ /**
+ * Convert String to FuelCutoffStatus
+ * @param value String
+ * @return FuelCuttoffStatus
+ */
+ public static FuelCutoffStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelType.java
new file mode 100644
index 000000000..8241ebd45
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/FuelType.java
@@ -0,0 +1,31 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum FuelType {
+ GASOLINE,
+ DIESEL,
+ /**
+ * For vehicles using compressed natural gas.
+ */
+ CNG,
+ /**
+ * For vehicles using liquefied petroleum gas.
+ */
+ LPG,
+ /**
+ * For FCEV (fuel cell electric vehicle).
+ */
+ HYDROGEN,
+ /**
+ * For BEV (Battery Electric Vehicle), PHEV (Plug-in Hybrid Electric Vehicle), solar vehicles and other vehicles which run on a battery.
+ */
+ BATTERY,
+ ;
+
+ public static FuelType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/GlobalProperty.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/GlobalProperty.java
new file mode 100644
index 000000000..a54d53d1d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/GlobalProperty.java
@@ -0,0 +1,54 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button).
+ * @since SmartDeviceLink 1.0
+ */
+public enum GlobalProperty{
+ /**
+ * The help prompt to be spoken if the user needs assistance during a user-initiated interaction.
+ */
+ HELPPROMPT,
+ /**
+ * The prompt to be spoken if the user-initiated interaction times out waiting for the user's verbal input.
+ */
+ TIMEOUTPROMPT,
+ /**
+ * The property vrHelpTitle of setGlobalProperties
+ */
+
+ VRHELPTITLE,
+ /**
+ * The property array of vrHelp of setGlobalProperties
+ */
+
+ VRHELPITEMS,
+ /**
+ * The property in-app menu name of setGlobalProperties
+ */
+
+ MENUNAME,
+ /**
+ * The property in-app menu icon of setGlobalProperties
+ */
+
+ MENUICON,
+ /**
+ * The on-screen keyboard configuration of setGlobalProperties
+ */
+
+ KEYBOARDPROPERTIES;
+
+ /**
+ * Convert String to GlobalProperty
+ * @param value String
+ * @return GlobalProperty
+ */
+ public static GlobalProperty valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HMILevel.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HMILevel.java
new file mode 100644
index 000000000..8757a26ec
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HMILevel.java
@@ -0,0 +1,70 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Specifies current level of the HMI. An HMI level indicates the degree of user interaction possible through the HMI (e.g. TTS only, display only, VR, etc.). The HMI level varies for an application based on the type of display (i.e. Nav or non-Nav) and the user directing "focus" to other applications (e.g. phone, other mobile applications, etc.)
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum HMILevel {
+ /**
+ * The application has full use of the SDL HMI. The app may output via TTS, display, or streaming audio and may gather input via VR, Menu, and button presses
+ */
+ HMI_FULL("FULL"),
+ /**
+ * This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application's {@linkplain com.smartdevicelink.proxy.rpc.Show} text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)
+ */
+ HMI_LIMITED("LIMITED"),
+ /**
+ * App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:
+ * <ul>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.AddCommand}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.DeleteCommand}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.AddSubMenu}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.DeleteSubMenu}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.CreateInteractionChoiceSet}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.DeleteInteractionChoiceSet}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.SubscribeButton}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.UnsubscribeButton}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.Show}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.UnregisterAppInterface}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.ResetGlobalProperties}</li>
+ * <li>Operation {@linkplain com.smartdevicelink.proxy.rpc.SetGlobalProperties}</li>
+ * </ul>
+ */
+ HMI_BACKGROUND("BACKGROUND"),
+ /**
+ * Application has been discovered by SDL, but application cannot send any requests or receive any notifications
+ * An HMILevel of NONE can also mean that the user has exited the application by saying "exit appname" or selecting "exit" from the application's menu. When this happens, the application still has an active interface registration with SDL and all SDL resources the application has created (e.g. Choice Sets, subscriptions, etc.) still exist. But while the HMILevel is NONE, the application cannot send any messages to SDL, except <i>{@linkplain com.smartdevicelink.proxy.rpc.UnregisterAppInterface}</li>
+ */
+ HMI_NONE("NONE");
+
+ private final String INTERNAL_NAME;
+
+ private HMILevel(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ /**
+ * Returns a HMILevel Status (FULL, LIMITED, BACKGROUND or NONE)
+ * @param value a String
+ * @return HMILevel -a String value (FULL, LIMITED, BACKGROUND or NONE)
+ */
+ public static HMILevel valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (HMILevel anEnum : EnumSet.allOf(HMILevel.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HmiZoneCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HmiZoneCapabilities.java
new file mode 100644
index 000000000..4725b4ff4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HmiZoneCapabilities.java
@@ -0,0 +1,34 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Specifies HMI Zones in the vehicle.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum HmiZoneCapabilities {
+ /**
+ * Indicates HMI available for front seat passengers.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ FRONT,
+ /**
+ * Indicates HMI available for rear seat passengers.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ BACK;
+ /**
+ * Convert String to HMIZoneCapabilities
+ * @param value String
+ * @return HMIZoneCapabilities
+ */
+
+ public static HmiZoneCapabilities valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HybridAppPreference.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HybridAppPreference.java
new file mode 100644
index 000000000..16732e9c3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/HybridAppPreference.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum HybridAppPreference {
+
+ MOBILE,
+ CLOUD,
+ BOTH;
+
+ public static HybridAppPreference valueForString(String value){
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStableStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStableStatus.java
new file mode 100644
index 000000000..91d6ecf8e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStableStatus.java
@@ -0,0 +1,30 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the ignition switch stability.
+ * @since SmartDeviceLink 2.0
+ */
+public enum IgnitionStableStatus {
+ /**
+ * The current ignition switch status is considered not to be stable.
+ */
+ IGNITION_SWITCH_NOT_STABLE,
+ /**
+ * The current ignition switch status is considered to be stable.
+ */
+ IGNITION_SWITCH_STABLE,
+ MISSING_FROM_TRANSMITTER;
+
+ /**
+ * Convert String to IgnitionStableStatus
+ * @param value String
+ * @return IgnitionStableStatus
+ */
+ public static IgnitionStableStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStatus.java
new file mode 100644
index 000000000..b17ccf1cf
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/IgnitionStatus.java
@@ -0,0 +1,45 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the status of ignition.
+ * @since SmartDeviceLink 2.0
+ */
+public enum IgnitionStatus {
+ /**
+ * Ignition status currently unknown
+ */
+ UNKNOWN,
+ /**
+ * Ignition is off
+ */
+ OFF,
+ /**
+ * Ignition is in mode accessory
+ */
+ ACCESSORY,
+ /**
+ * Ignition is in mode run
+ */
+ RUN,
+ /**
+ * Ignition is in mode run
+ */
+ START,
+ /**
+ * Signal is invalid
+ */
+ INVALID;
+
+ /**
+ * Convert String to IgnitionStatus
+ * @param value String
+ * @return IgnitionStatus
+ */
+ public static IgnitionStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageFieldName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageFieldName.java
new file mode 100644
index 000000000..799b1e99d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageFieldName.java
@@ -0,0 +1,89 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * The name that identifies the field.
+ *
+ * @since SmartDeviceLink 2.3.2
+ */
+public enum ImageFieldName {
+ /** The image field for SoftButton
+ *
+ */
+
+ softButtonImage,
+ /** The first image field for Choice.
+ *
+ */
+
+ choiceImage,
+ /** The secondary image field for Choice.
+ *
+ */
+
+ choiceSecondaryImage,
+ /** The image field for vrHelpItem.
+ *
+ */
+
+ vrHelpItem,
+ /** The image field for Turn.
+ *
+ */
+
+ turnIcon,
+ /** The image field for the menu icon in SetGlobalProperties.
+ *
+ */
+
+ menuIcon,
+ /** The image filed for AddCommand.
+ *
+ */
+
+ cmdIcon,
+ /** The image field for the app icon ( set by setAppIcon).
+ *
+ */
+
+ appIcon,
+ /** The image filed for Show.
+ *
+ */
+
+ graphic,
+ /** The primary image field for ShowConstant TBT.
+ *
+ */
+
+ showConstantTBTIcon,
+
+ /** The secondary image field for ShowConstant TBT.
+ *
+ */
+ showConstantTBTNextTurnIcon,
+ /**
+ * The optional image of a destination / location
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ locationImage,
+ /**
+ * The secondary graphic image field
+ *
+ * @since SmartDeviceLink 5.0
+ */
+ secondaryGraphic,
+ ;
+
+ /**
+ * Convert String to ImageFieldName
+ * @param value String
+ * @return ImageFieldName
+ */
+ public static ImageFieldName valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageType.java
new file mode 100644
index 000000000..5b79257e1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ImageType.java
@@ -0,0 +1,29 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Contains information about the type of image.
+ * @since SmartDeviceLink 2.0
+ */
+public enum ImageType {
+ /**
+ * Just the static hex icon value to be used
+ */
+ STATIC,
+ /**
+ * Binary image file to be used (identifier to be sent by PutFile)
+ */
+ DYNAMIC;
+
+ /**
+ * Convert String to ImageType
+ * @param value String
+ * @return ImageType
+ */
+ public static ImageType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/InteractionMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/InteractionMode.java
new file mode 100644
index 000000000..98b61a1f2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/InteractionMode.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * For application-initiated interactions (<i>{@linkplain com.smartdevicelink.proxy.rpc.PerformInteraction}</i>), this specifies
+ * the mode by which the user is prompted and by which the user's selection is
+ * indicated
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum InteractionMode {
+ /**
+ * This mode causes the interaction to occur only on the display, meaning
+ * the choices are presented and selected only via the display. Selections
+ * are viewed with the SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN buttons. User's
+ * selection is indicated with the OK button
+ */
+ MANUAL_ONLY,
+ /**
+ * This mode causes the interaction to occur only through TTS and VR. The
+ * user is prompted via TTS to select a choice by saying one of the choice's
+ * synonyms
+ */
+ VR_ONLY,
+ /**
+ * This mode is a combination of MANUAL_ONLY and VR_ONLY, meaning the user
+ * is prompted both visually and audibly. The user can make a selection
+ * either using the mode described in MANUAL_ONLY or using the mode
+ * described in VR_ONLY. If the user views selections as described in
+ * MANUAL_ONLY mode, the interaction becomes strictly, and irreversibly, a
+ * MANUAL_ONLY interaction (i.e. the VR session is cancelled, although the
+ * interaction itself is still in progress). If the user interacts with the
+ * VR session in any way (e.g. speaks a phrase, even if it is not a
+ * recognized choice), the interaction becomes strictly, and irreversibly, a
+ * VR_ONLY interaction (i.e. the MANUAL_ONLY mode forms of interaction will
+ * no longer be honored)
+ *
+ * <p>The TriggerSource parameter of the
+ * {@linkplain com.smartdevicelink.proxy.rpc.PerformInteraction} response will
+ * indicate which interaction mode the user finally chose to attempt the
+ * selection (even if the interaction did not end with a selection being
+ * made)</P>
+ */
+ BOTH;
+
+ /**
+ * Returns InteractionMode (MANUAL_ONLY, VR_ONLY or BOTH)
+ * @param value a String
+ * @return InteractionMode -MANUAL_ONLY, VR_ONLY or BOTH
+ */
+
+ public static InteractionMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Jingle.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Jingle.java
new file mode 100644
index 000000000..85a1e8e67
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Jingle.java
@@ -0,0 +1,31 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+
+public enum Jingle{
+ POSITIVE("POSITIVE_JINGLE"),
+ NEGATIVE("NEGATIVE_JINGLE"),
+ INITIAL("INITIAL_JINGLE"),
+ LISTEN("LISTEN_JINGLE"),
+ HELP("HELP_JINGLE");
+
+ private final String INTERNAL_NAME;
+
+ private Jingle(String name){
+ this.INTERNAL_NAME = name;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static Jingle valueForString(String value) {
+ for (Jingle anEnum : EnumSet.allOf(Jingle.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardEvent.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardEvent.java
new file mode 100644
index 000000000..7a730377d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardEvent.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Enumeration listing possible keyboard events.
+ *
+ *
+ */
+public enum KeyboardEvent {
+ /** The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).
+ *
+ */
+
+ KEYPRESS,
+ /** The User has finished entering text from the keyboard and submitted the entry.
+ *
+ */
+
+ ENTRY_SUBMITTED,
+ /** The User has pressed the HMI-defined "Cancel" button.
+ *
+ */
+
+ ENTRY_CANCELLED,
+ /** The User has not finished entering text and the keyboard is aborted with the event of higher priority.
+ *
+ */
+ ENTRY_ABORTED,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ ENTRY_VOICE,
+ ;
+ /**
+ * Convert String to KeyboardEvent
+ * @param value String
+ * @return KeyboardEvent
+ */
+
+ public static KeyboardEvent valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardLayout.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardLayout.java
new file mode 100644
index 000000000..2cd71b3f3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeyboardLayout.java
@@ -0,0 +1,19 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Enumeration listing possible keyboard layouts.
+ *
+ * @since SmartDeviceLink 2.3.2
+ */
+public enum KeyboardLayout {
+ QWERTY,
+ QWERTZ,
+ AZERTY;
+
+ public static KeyboardLayout valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeypressMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeypressMode.java
new file mode 100644
index 000000000..32e198585
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/KeypressMode.java
@@ -0,0 +1,28 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Enumeration listing possible keyboard events.
+ *
+ *
+ */
+public enum KeypressMode {
+ /**
+ * Each keypress is individually sent as the user presses the keyboard keys.
+ */
+ SINGLE_KEYPRESS,
+ /**
+ * The keypresses are queued and a string is eventually sent once the user chooses to submit their entry.
+ */
+ QUEUE_KEYPRESSES,
+ /**
+ * The keypresses are queue and a string is sent each time the user presses a keyboard key; the string contains the entire current entry.
+ */
+ RESEND_CURRENT_ENTRY;
+
+ public static KeypressMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Language.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Language.java
new file mode 100644
index 000000000..4ac4f6264
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Language.java
@@ -0,0 +1,250 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Specifies the language to be used for TTS, VR, displayed messages/menus
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ */
+public enum Language {
+ /**
+ * English - SA
+ */
+
+ EN_SA("EN-SA"),
+
+ /**
+ * Hebrew - IL
+ */
+
+ HE_IL("HE-IL"),
+
+ /**
+ * Romanian - RO
+ */
+
+ RO_RO("RO-RO"),
+
+ /**
+ * Ukrainian - UA
+ */
+
+ UK_UA("UK-UA"),
+
+ /**
+ * Indonesian - ID
+ */
+
+ ID_ID("ID-ID"),
+
+ /**
+ * Vietnamese - VN
+ */
+
+ VI_VN("VI-VN"),
+
+ /**
+ * Malay - MY
+ */
+
+ MS_MY("MS-MY"),
+
+ /**
+ * Hindi - IN
+ */
+
+ HI_IN("HI-IN"),
+
+ /**
+ * Dutch - BE
+ */
+
+ NL_BE("NL-BE"),
+
+ /**
+ * Greek - GR
+ */
+
+ EL_GR("EL-GR"),
+
+ /**
+ * Hungarian - HU
+ */
+
+ HU_HU("HU-HU"),
+
+ /**
+ * Finnish - FI
+ */
+
+ FI_FI("FI-FI"),
+
+ /**
+ * Slovak - SK
+ */
+
+ SK_SK("SK-SK"),
+ /**
+ * English - US
+ */
+
+ EN_US("EN-US"),
+ /**
+ * Spanish - Mexico
+ */
+
+ ES_MX("ES-MX"),
+ /**
+ * French - Canada
+ */
+
+ FR_CA("FR-CA"),
+ /**
+ * German - Germany
+ */
+
+ DE_DE("DE-DE"),
+ /**
+ * Spanish - Spain
+ */
+
+ ES_ES("ES-ES"),
+ /**
+ * English - GB
+ */
+
+ EN_GB("EN-GB"),
+ /**
+ * Russian - Russia
+ */
+
+ RU_RU("RU-RU"),
+ /**
+ * Turkish - Turkey
+ */
+
+ TR_TR("TR-TR"),
+ /**
+ * Polish - Poland
+ */
+
+ PL_PL("PL-PL"),
+ /**
+ * French - France
+ */
+
+ FR_FR("FR-FR"),
+ /**
+ * Italian - Italy
+ */
+
+ IT_IT("IT-IT"),
+ /**
+ * Swedish - Sweden
+ */
+
+ SV_SE("SV-SE"),
+ /**
+ * Portuguese - Portugal
+ */
+
+ PT_PT("PT-PT"),
+ /**
+ * Dutch (Standard) - Netherlands
+ */
+
+ NL_NL("NL-NL"),
+ /**
+ * English - Australia
+ */
+
+ EN_AU("EN-AU"),
+ /**
+ * Mandarin - China
+ */
+
+ ZH_CN("ZH-CN"),
+ /**
+ * Mandarin - Taiwan
+ */
+
+ ZH_TW("ZH-TW"),
+ /**
+ * Japanese - Japan
+ */
+
+ JA_JP("JA-JP"),
+ /**
+ * Arabic - Saudi Arabia
+ */
+
+ AR_SA("AR-SA"),
+ /**
+ * Korean - South Korea
+ */
+
+ KO_KR("KO-KR"),
+ /**
+ * Portuguese - Brazil
+ */
+
+ PT_BR("PT-BR"),
+ /**
+ * Czech - Czech Republic
+ */
+
+ CS_CZ("CS-CZ"),
+ /**
+ * Danish - Denmark
+ */
+
+ DA_DK("DA-DK"),
+ /**
+ * Norwegian - Norway
+ */
+
+ NO_NO("NO-NO"),
+ /**
+ * English - India
+ */
+
+ EN_IN("EN-IN"),
+ /**
+ * Thai - Thailand
+ */
+
+ TH_TH("TH-TH");
+
+ private final String INTERNAL_NAME;
+
+ private Language(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+ /**
+ * Returns a String representing a kind of Language
+ */
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ /**
+ * Returns a Language's name
+ * @param value a String
+ * @return Language -EN-US, ES-MX or FR-CA
+ */
+ public static Language valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (Language anEnum : EnumSet.allOf(Language.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LayoutMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LayoutMode.java
new file mode 100644
index 000000000..b64cf1bb3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LayoutMode.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * For touchscreen interactions, the mode of how the choices are presented.
+ *
+ *
+ */
+public enum LayoutMode {
+ /**
+ * This mode causes the interaction to display the previous set of choices as icons.
+ */
+ ICON_ONLY,
+ /**
+ * This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.
+ */
+ ICON_WITH_SEARCH,
+ /**
+ * This mode causes the interaction to display the previous set of choices as a list
+ */
+ LIST_ONLY,
+ /**
+ * This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.
+ */
+ LIST_WITH_SEARCH,
+ /**
+ * This mode causes the interaction to immediately display a keyboard entry through the HMI.
+ */
+ KEYBOARD;
+
+ public static LayoutMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightName.java
new file mode 100644
index 000000000..c3812f2da
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightName.java
@@ -0,0 +1,134 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum LightName {
+ /*Common Single Light*/
+ FRONT_LEFT_HIGH_BEAM,
+ FRONT_RIGHT_HIGH_BEAM,
+ FRONT_LEFT_LOW_BEAM,
+ FRONT_RIGHT_LOW_BEAM,
+ FRONT_LEFT_PARKING_LIGHT,
+ FRONT_RIGHT_PARKING_LIGHT,
+ FRONT_LEFT_FOG_LIGHT,
+ FRONT_RIGHT_FOG_LIGHT,
+ FRONT_LEFT_DAYTIME_RUNNING_LIGHT,
+ FRONT_RIGHT_DAYTIME_RUNNING_LIGHT,
+ FRONT_LEFT_TURN_LIGHT,
+ FRONT_RIGHT_TURN_LIGHT,
+ REAR_LEFT_FOG_LIGHT,
+ REAR_RIGHT_FOG_LIGHT,
+ REAR_LEFT_TAIL_LIGHT,
+ REAR_RIGHT_TAIL_LIGHT,
+ REAR_LEFT_BRAKE_LIGHT,
+ REAR_RIGHT_BRAKE_LIGHT,
+ REAR_LEFT_TURN_LIGHT,
+ REAR_RIGHT_TURN_LIGHT,
+ REAR_REGISTRATION_PLATE_LIGHT,
+
+ /**
+ * Include all high beam lights: front_left and front_right.
+ */
+ HIGH_BEAMS,
+ /**
+ * Include all low beam lights: front_left and front_right.
+ */
+ LOW_BEAMS,
+ /**
+ * Include all fog lights: front_left, front_right, rear_left and rear_right.
+ */
+ FOG_LIGHTS,
+ /**
+ * Include all daytime running lights: front_left and front_right.
+ */
+ RUNNING_LIGHTS,
+ /**
+ * Include all parking lights: front_left and front_right.
+ */
+ PARKING_LIGHTS,
+ /**
+ * Include all brake lights: rear_left and rear_right.
+ */
+ BRAKE_LIGHTS,
+ REAR_REVERSING_LIGHTS,
+ SIDE_MARKER_LIGHTS,
+
+ /**
+ * Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.
+ */
+ LEFT_TURN_LIGHTS,
+ /**
+ * Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.
+ */
+ RIGHT_TURN_LIGHTS,
+ /**
+ * Include all hazard lights: front_left, front_right, rear_left and rear_right.
+ */
+ HAZARD_LIGHTS,
+ /**
+ * Cargo lamps illuminate the cargo area.
+ */
+ REAR_CARGO_LIGHTS,
+ /**
+ * Truck bed lamps light up the bed of the truck.
+ */
+ REAR_TRUCK_BED_LIGHTS,
+ /**
+ * Trailer lights are lamps mounted on a trailer hitch.
+ */
+ REAR_TRAILER_LIGHTS,
+ /**
+ * It is the spotlights mounted on the left side of a vehicle.
+ */
+ LEFT_SPOT_LIGHTS,
+ /**
+ * It is the spotlights mounted on the right side of a vehicle.
+ */
+ RIGHT_SPOT_LIGHTS,
+ /**
+ * Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.
+ */
+ LEFT_PUDDLE_LIGHTS,
+ /**
+ * Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.
+ */
+ RIGHT_PUDDLE_LIGHTS,
+
+ /*Interior Lights by common function groups*/
+
+ AMBIENT_LIGHTS,
+ OVERHEAD_LIGHTS,
+ READING_LIGHTS,
+ TRUNK_LIGHTS,
+
+
+ /*Lights by location*/
+
+ /**
+ * Include exterior lights located in front of the vehicle. For example, fog lights and low beams.
+ */
+ EXTERIOR_FRONT_LIGHTS,
+ /**
+ * 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.
+ */
+ EXTERIOR_REAR_LIGHTS,
+ /**
+ * Include exterior lights located at the left side of the vehicle. For example, left puddle lights and spot lights.
+ */
+ EXTERIOR_LEFT_LIGHTS,
+ /**
+ * Include exterior lights located at the right side of the vehicle. For example, right puddle lights and spot lights.
+ */
+ EXTERIOR_RIGHT_LIGHTS,
+ /**
+ * Include all exterior lights around the vehicle.
+ */
+ EXTERIOR_ALL_LIGHTS,
+ ;
+
+ public static LightName valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightStatus.java
new file mode 100644
index 000000000..98c4b175c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LightStatus.java
@@ -0,0 +1,19 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum LightStatus {
+ ON,
+ OFF,
+ RAMP_UP,
+ RAMP_DOWN,
+ UNKNOWN,
+ INVALID,
+ ;
+
+ public static LightStatus valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LockScreenStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LockScreenStatus.java
new file mode 100644
index 000000000..ba25a3024
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/LockScreenStatus.java
@@ -0,0 +1,31 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ *
+ * Status of the Lock Screen.
+ *
+ */
+public enum LockScreenStatus {
+ /**
+ * LockScreen is Required
+ */
+
+ REQUIRED,
+ /**
+ * LockScreen is Optional
+ */
+
+ OPTIONAL,
+ /**
+ * LockScreen is Not Required
+ */
+
+ OFF;
+
+ public static LockScreenStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageCushion.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageCushion.java
new file mode 100644
index 000000000..ed23b4899
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageCushion.java
@@ -0,0 +1,21 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * List possible cushions of a multi-contour massage seat.
+ */
+public enum MassageCushion {
+ TOP_LUMBAR,
+ MIDDLE_LUMBAR,
+ BOTTOM_LUMBAR,
+ BACK_BOLSTERS,
+ SEAT_BOLSTERS,
+ ;
+
+ public static MassageCushion valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageMode.java
new file mode 100644
index 000000000..59a200bdb
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageMode.java
@@ -0,0 +1,19 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * List possible modes of a massage zone.
+ */
+public enum MassageMode {
+ OFF,
+ LOW,
+ HIGH,
+ ;
+
+ public static MassageMode valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageZone.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageZone.java
new file mode 100644
index 000000000..9f0e23ffe
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MassageZone.java
@@ -0,0 +1,24 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * List possible zones of a multi-contour massage seat.
+ */
+public enum MassageZone {
+ /**
+ * The back of a multi-contour massage seat. or SEAT_BACK
+ */
+ LUMBAR,
+ /**
+ * The bottom a multi-contour massage seat. or SEAT_BOTTOM
+ */
+ SEAT_CUSHION,
+ ;
+
+ public static MassageZone valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaClockFormat.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaClockFormat.java
new file mode 100644
index 000000000..2bf84744a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaClockFormat.java
@@ -0,0 +1,126 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Indicates the format of the time displayed on the connected SDL unit.Format
+ * description follows the following nomenclature:<p> Sp = Space</p> <p>| = or </p><p>c =
+ * character</p>
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum MediaClockFormat {
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>maxHours = 19</li>
+ * <li>maxMinutes = 59</li>
+ * <li>maxSeconds = 59</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ */
+ CLOCK1,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>maxHours = 59</li>
+ * <li>maxMinutes = 59</li>
+ * <li>maxSeconds = 59</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ */
+ CLOCK2,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>maxHours = 9</li>
+ * <li>maxMinutes = 59</li>
+ * <li>maxSeconds = 59</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+ CLOCK3,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>5 characters possible</li>
+ * <li>Format: 1|sp c :|sp c c</li>
+ * <li>1|sp : digit "1" or space</li>
+ * <li>c : character out of following character set: sp|0-9|[letters, see
+ * TypeII column in XLS.</li>
+ * <li>:|sp : colon or space</li>
+ * <li>used for Type II headunit</li>
+ * </ul>
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ CLOCKTEXT1,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>5 characters possible</li>
+ * <li>Format: 1|sp c :|sp c c</li>
+ * <li>1|sp : digit "1" or space</li>
+ * <li>c : character out of following character set: sp|0-9|[letters, see
+ * CID column in XLS.</li>
+ * <li>:|sp : colon or space</li>
+ * <li>used for CID headunit</li>
+ * </ul>
+ * difference between CLOCKTEXT1 and CLOCKTEXT2 is the supported character
+ * set
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ CLOCKTEXT2,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>6 chars possible</li>
+ * <li>Format: 1|sp c c :|sp c c</li>
+ * <li>1|sp : digit "1" or space</li>
+ * <li>c : character out of following character set: sp|0-9|[letters, see
+ * Type 5 column in XLS].</li>
+ * <li>:|sp : colon or space</li>
+ * <li>used for Type V headunit</li>
+ * </ul>
+ * difference between CLOCKTEXT1 and CLOCKTEXT2 is the supported character
+ * set
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ CLOCKTEXT3,
+ /**
+ * <p>
+ * </p>
+ * <ul>
+ * <li>6 chars possible</li>
+ * <li>Format: c :|sp c c : c c</li>
+ * <li>:|sp : colon or space</li>
+ * <li>c : character out of following character set: sp|0-9|[letters]</li>
+ * <li>used for MFD3/4/5 headunits</li>
+ * </ul>
+ *
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ CLOCKTEXT4;
+
+ public static MediaClockFormat valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaType.java
new file mode 100644
index 000000000..f28face34
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MediaType.java
@@ -0,0 +1,23 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+
+public enum MediaType {
+
+ MUSIC,
+
+ PODCAST,
+
+ AUDIOBOOK,
+
+ OTHER,
+
+ ;
+
+ public static MediaType valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MetadataType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MetadataType.java
new file mode 100644
index 000000000..9f51a6437
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/MetadataType.java
@@ -0,0 +1,96 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Defines the metadata types that can be applied to text fields
+ *
+ */
+public enum MetadataType {
+
+ /**
+ * The data in this field contains the title of the currently playing audio track.
+ */
+ MEDIA_TITLE("mediaTitle"),
+
+ /**
+ * The data in this field contains the artist or creator of the currently playing audio track.
+ */
+ MEDIA_ARTIST("mediaArtist"),
+
+ /**
+ * The data in this field contains the album title of the currently playing audio track.
+ */
+ MEDIA_ALBUM("mediaAlbum"),
+
+ /**
+ * The data in this field contains the creation year of the currently playing audio track.
+ */
+ MEDIA_YEAR("mediaYear"),
+
+ /**
+ * The data in this field contains the genre of the currently playing audio track.
+ */
+ MEDIA_GENRE("mediaGenre"),
+
+ /**
+ * The data in this field contains the name of the current source for the media.
+ */
+ MEDIA_STATION("mediaStation"),
+
+ /**
+ * The data in this field is a rating.
+ */
+ RATING("rating"),
+
+ /**
+ * The data in this field is the current temperature.
+ */
+ CURRENT_TEMPERATURE("currentTemperature"),
+
+ /**
+ * The data in this field is the maximum temperature for the day.
+ */
+ MAXIMUM_TEMPERATURE("maximumTemperature"),
+
+ /**
+ * The data in this field is the minimum temperature for the day.
+ */
+ MINIMUM_TEMPERATURE("minimumTemperature"),
+
+ /**
+ * The data in this field describes the current weather (ex. cloudy, clear, etc.).
+ */
+ WEATHER_TERM("weatherTerm"),
+
+ /**
+ * The data in this field describes the current humidity value.
+ */
+ HUMIDITY("humidity"),
+
+
+ ;
+
+ private final String internalName;
+
+ private MetadataType(String internalName) {
+ this.internalName = internalName;
+ }
+
+ public String toString() {
+ return this.internalName;
+ }
+
+ public static MetadataType valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (MetadataType anEnum : EnumSet.allOf(MetadataType.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ModuleType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ModuleType.java
new file mode 100644
index 000000000..c4bedfd46
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ModuleType.java
@@ -0,0 +1,19 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum ModuleType {
+ CLIMATE,
+ RADIO,
+ SEAT,
+ AUDIO,
+ LIGHT,
+ HMI_SETTINGS,
+ ;
+
+ public static ModuleType valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationAction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationAction.java
new file mode 100644
index 000000000..2619b5505
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationAction.java
@@ -0,0 +1,31 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum NavigationAction {
+
+ /**
+ * Using this action plus a supplied direction can give the type of turn.
+ */
+ TURN,
+
+ EXIT,
+
+ STAY,
+
+ MERGE,
+
+ FERRY,
+
+ CAR_SHUTTLE_TRAIN,
+
+ WAYPOINT,
+
+ ;
+
+ public static NavigationAction valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationJunction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationJunction.java
new file mode 100644
index 000000000..693582a13
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/NavigationJunction.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum NavigationJunction {
+
+ /**
+ * A junction that represents a standard intersection with a single road crossing another.
+ */
+ REGULAR,
+
+ /**
+ * A junction where the road splits off into two paths; a fork in the road.
+ */
+ BIFURCATION,
+
+ /**
+ * A junction that has multiple intersections and paths.
+ */
+ MULTI_CARRIAGEWAY,
+
+ /**
+ * A junction where traffic moves in a single direction around a central, non-traversable point
+ * to reach one of the connecting roads.
+ */
+ ROUNDABOUT,
+
+ /**
+ * Similar to a roundabout, however the center of the roundabout is fully traversable. Also
+ * known as a mini-roundabout.
+ */
+ TRAVERSABLE_ROUNDABOUT,
+
+ /**
+ * A junction where lefts diverge to the right, then curve to the left, converting a left turn
+ * to a crossing maneuver.
+ */
+ JUGHANDLE,
+
+ /**
+ * Multiple way intersection that allows traffic to flow based on priority; most commonly right
+ * of way and first in, first out.
+ */
+ ALL_WAY_YIELD,
+
+ /**
+ * A junction designated for traffic turn arounds.
+ */
+ TURN_AROUND,
+
+ ;
+
+ public static NavigationJunction valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PRNDL.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PRNDL.java
new file mode 100644
index 000000000..965ebb8b4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PRNDL.java
@@ -0,0 +1,70 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * The selected gear.
+ * @since SmartDeviceLink 2.0
+ */
+public enum PRNDL {
+ /**
+ * Parking
+ */
+ PARK,
+ /**
+ * Reverse gear
+ */
+ REVERSE,
+ /**
+ * No gear
+ */
+ NEUTRAL,
+ DRIVE,
+ /**
+ * Drive Sport mode
+ */
+ SPORT,
+ /**
+ * 1st gear hold
+ */
+ LOWGEAR,
+ /**
+ * First gear
+ */
+ FIRST,
+ /**
+ * Second gear
+ */
+ SECOND,
+ /**
+ * Third gear
+ */
+ THIRD,
+ /**
+ * Fourth gear
+ */
+ FOURTH,
+ /**
+ * Fifth gear
+ */
+ FIFTH,
+ /**
+ * Sixth gear
+ */
+ SIXTH,
+ SEVENTH,
+ EIGHTH,
+ UNKNOWN,
+ FAULT;
+
+ /**
+ * Convert String to PRNDL
+ * @param value String
+ * @return PRNDL
+ */
+ public static PRNDL valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeQualificationStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeQualificationStatus.java
new file mode 100644
index 000000000..c268e14aa
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeQualificationStatus.java
@@ -0,0 +1,42 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Reflects the status of the current power mode qualification.
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+
+public enum PowerModeQualificationStatus {
+ /** The power mode of the vehicle is currently considered undefined
+ *
+ */
+
+ POWER_MODE_UNDEFINED,
+ /** The evaluation of the power mode is in progress
+ *
+ */
+
+ POWER_MODE_EVALUATION_IN_PROGRESS,
+ /** Currently undefined
+ *
+ */
+
+ NOT_DEFINED,
+ /** The power mode of the vehicle
+ *
+ */
+
+ POWER_MODE_OK;
+ /**
+ * Convert String to PowerModeQualificationStatus
+ * @param value String
+ * @return PowerModeQualificationStatus
+ */
+
+ public static PowerModeQualificationStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeStatus.java
new file mode 100644
index 000000000..06ed3ba9a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PowerModeStatus.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Reflects the status of the current power mode.
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+public enum PowerModeStatus {
+ /** Key not inserted
+ *
+ */
+ KEY_OUT,
+ /** Key is currently out
+ *
+ */
+ KEY_RECENTLY_OUT,
+
+ KEY_APPROVED_0,
+ POST_ACCESORY_0,
+ /** Key is in accessory positon
+ *
+ */
+
+ ACCESORY_1,
+ POST_IGNITION_1,
+
+ /** Key is in position ignition on
+ *
+ */
+ IGNITION_ON_2,
+ /** Key is in position running
+ *
+ */
+
+ RUNNING_2,
+ /** Key is in crank position
+ *
+ */
+
+ CRANK_3;
+
+ public static PowerModeStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PredefinedLayout.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PredefinedLayout.java
new file mode 100644
index 000000000..458320d1e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PredefinedLayout.java
@@ -0,0 +1,140 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ A template layout an app uses to display information. The broad details of the layout are defined, but the details depend on the IVI system. Used in SetDisplayLayout.
+ */
+public enum PredefinedLayout {
+
+ /**
+ A default layout
+ */
+ DEFAULT("DEFAULT"),
+
+ /**
+ The default media layout
+ */
+ MEDIA("MEDIA"),
+
+ /**
+ The default non-media layout
+ */
+ NON_MEDIA("NON-MEDIA"),
+
+ /**
+ A media layout containing preset buttons
+ */
+ ONSCREEN_PRESETS("ONSCREEN_PRESETS"),
+
+ /**
+ The default navigation layout with a fullscreen map
+ */
+ NAV_FULLSCREEN_MAP("NAV_FULLSCREEN_MAP"),
+
+ /**
+ A list layout used for navigation apps
+ */
+ NAV_LIST("NAV_LIST"),
+
+ /**
+ A keyboard layout used for navigation apps
+ */
+ NAV_KEYBOARD("NAV_KEYBOARD"),
+
+ /**
+ A layout with a single graphic on the left and text on the right
+ */
+ GRAPHIC_WITH_TEXT("GRAPHIC_WITH_TEXT"),
+
+ /**
+ A layout with text on the left and a single graphic on the right
+ */
+ TEXT_WITH_GRAPHIC("TEXT_WITH_GRAPHIC"),
+
+ /**
+ A layout with only softbuttons placed in a tile layout
+ */
+ TILES_ONLY("TILES_ONLY"),
+
+ /**
+ A layout with only soft buttons that only accept text
+ */
+ TEXTBUTTONS_ONLY("TEXTBUTTONS_ONLY"),
+
+ /**
+ A layout with a single graphic on the left and soft buttons in a tile layout on the right
+ */
+ GRAPHIC_WITH_TILES("GRAPHIC_WITH_TILES"),
+
+ /**
+ A layout with soft buttons in a tile layout on the left and a single graphic on the right
+ */
+ TILES_WITH_GRAPHIC("TILES_WITH_GRAPHIC"),
+
+ /**
+ A layout with a single graphic on the left and both text and soft buttons on the right
+ */
+ GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS("GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS"),
+
+ /**
+ A layout with both text and soft buttons on the left and a single graphic on the right
+ */
+ TEXT_AND_SOFTBUTTONS_WITH_GRAPHIC("TEXT_AND_SOFTBUTTONS_WITH_GRAPHIC"),
+
+ /**
+ A layout with a single graphic on the left and text-only soft buttons on the right
+ */
+ GRAPHIC_WITH_TEXTBUTTONS("GRAPHIC_WITH_TEXTBUTTONS"),
+
+ /**
+ A layout with text-only soft buttons on the left and a single graphic on the right
+ */
+ TEXTBUTTONS_WITH_GRAPHIC("TEXTBUTTONS_WITH_GRAPHIC"),
+
+ /**
+ A layout with a single large graphic and soft buttons
+ */
+ LARGE_GRAPHIC_WITH_SOFTBUTTONS("LARGE_GRAPHIC_WITH_SOFTBUTTONS"),
+
+ /**
+ A layout with two graphics and soft buttons
+ */
+ DOUBLE_GRAPHIC_WITH_SOFTBUTTONS("DOUBLE_GRAPHIC_WITH_SOFTBUTTONS"),
+
+ /**
+ A layout with only a single large graphic
+ */
+ LARGE_GRAPHIC_ONLY("LARGE_GRAPHIC_ONLY"),
+ ;
+
+ private final String INTERNAL_NAME;
+
+ private PredefinedLayout(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+ /**
+ * Returns a String representing a PredefinedLayout
+ */
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ /**
+ * Returns a PredefinedLayout
+ * @param value a String
+ * @return PredefinedLayout
+ */
+ public static PredefinedLayout valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (PredefinedLayout anEnum : EnumSet.allOf(PredefinedLayout.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrerecordedSpeech.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrerecordedSpeech.java
new file mode 100644
index 000000000..2b27040a6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrerecordedSpeech.java
@@ -0,0 +1,26 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Contains a list of Pre-recorded speech items present on the platform.
+ *
+ *
+ */
+public enum PrerecordedSpeech {
+ HELP_JINGLE,
+ INITIAL_JINGLE,
+ LISTEN_JINGLE,
+ POSITIVE_JINGLE,
+ NEGATIVE_JINGLE;
+ /**
+ * Convert String to PrerecordedSpeech
+ * @param value String
+ * @return PrerecordedSpeech
+ */
+
+ public static PrerecordedSpeech valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrimaryAudioSource.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrimaryAudioSource.java
new file mode 100644
index 000000000..27f83d7d4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/PrimaryAudioSource.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the current primary audio source of SDL (if selected).
+ * @since SmartDeviceLink 2.0
+ */
+public enum PrimaryAudioSource {
+ /**
+ * Currently no source selected
+ */
+ NO_SOURCE_SELECTED,
+ /**
+ * CD is current source
+ */
+ CD,
+ /**
+ * USB is current source
+ */
+ USB,
+ /**
+ * USB2 is current source
+ */
+ USB2,
+ /**
+ * Bluetooth Stereo is current source
+ */
+ BLUETOOTH_STEREO_BTST,
+ /**
+ * Line in is current source
+ */
+ LINE_IN,
+ /**
+ * iPod is current source
+ */
+ IPOD,
+ /**
+ * Mobile app is current source
+ */
+ MOBILE_APP,
+ AM,
+ FM,
+ XM,
+ DAB,
+ ;
+
+ /**
+ * Convert String to PrimaryAudioSource
+ * @param value String
+ * @return PrimaryAudioSource
+ */
+ public static PrimaryAudioSource valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioBand.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioBand.java
new file mode 100644
index 000000000..2b2c862d8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioBand.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum RadioBand {
+ AM,
+ FM,
+ XM,
+ ;
+
+ public static RadioBand valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioState.java
new file mode 100644
index 000000000..533c86dca
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RadioState.java
@@ -0,0 +1,20 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * List possible states of a remote control radio module.
+ */
+public enum RadioState {
+ ACQUIRING,
+ ACQUIRED,
+ MULTICAST,
+ NOT_FOUND,
+ ;
+
+ public static RadioState valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RequestType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RequestType.java
new file mode 100644
index 000000000..e6fbab6df
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/RequestType.java
@@ -0,0 +1,92 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Enumeration listing possible asynchronous requests.
+ *
+ *
+ */
+public enum RequestType {
+
+ HTTP,
+ FILE_RESUME,
+ AUTH_REQUEST,
+ AUTH_CHALLENGE,
+ AUTH_ACK,
+ PROPRIETARY,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ QUERY_APPS,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ LAUNCH_APP,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ LOCK_SCREEN_ICON_URL,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ TRAFFIC_MESSAGE_CHANNEL,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ DRIVER_PROFILE,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ VOICE_SEARCH,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ NAVIGATION,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ PHONE,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ CLIMATE,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ SETTINGS,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ VEHICLE_DIAGNOSTICS,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ EMERGENCY,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ MEDIA,
+ /**
+ * @since SmartDeviceLink 4.0
+ */
+ FOTA,
+ /**
+ * @since SmartDeviceLink 5.0
+ */
+ OEM_SPECIFIC,
+ /**
+ * @since SmartDeviceLink 5.1
+ */
+ ICON_URL,
+ ;
+ /**
+ * Convert String to RequestType
+ * @param value String
+ * @return RequestType
+ */
+ public static RequestType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Result.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Result.java
new file mode 100644
index 000000000..25b9a16f5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/Result.java
@@ -0,0 +1,199 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Defines the possible result codes returned by SDL to the application in a
+ * Response to a requested operation
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum Result {
+ /**
+ * The request succeeded
+ */
+ SUCCESS,
+ /**
+ * <p>The data sent is invalid. For example:</p>
+ * <ul>
+ * <li>Invalid Json syntax</li>
+ * <li>Parameters out of bounds (number or enum range)</li>
+ * <li>Mandatory parameters not provided</li>
+ * <li>Parameter provided with wrong type</li>
+ * <li>Invalid characters</li>
+ * <li>Empty string</li>
+ * </ul>
+ */
+ INVALID_DATA,
+ /**
+ * The request is not supported by SDL
+ */
+ UNSUPPORTED_REQUEST,
+ /**
+ * The system could not process the request because the necessary memory
+ * couldn't be allocated
+ */
+ OUT_OF_MEMORY,
+ /**
+ * There are too many requests pending (means that the response has not been
+ * delivered yet). There is a limit of 1000 pending requests at a time
+ */
+ TOO_MANY_PENDING_REQUESTS,
+ /**
+ * <p>One of the provided IDs is not valid. For example:</p>
+ * <ul>
+ * <li>CorrelationID</li>
+ * <li>CommandID</li>
+ * <li>MenuID</li>
+ * </ul>
+ */
+ INVALID_ID,
+ /**
+ * The provided name or synonym is a duplicate of some already-defined name
+ * or synonym
+ */
+ DUPLICATE_NAME,
+ /**
+ * Specified application name is already associated with an active interface
+ * registration. Attempts at doing a second <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.RegisterAppInterface}</i> on a
+ * given protocol session will also cause this
+ */
+ TOO_MANY_APPLICATIONS,
+ /**
+ * SDL does not support the interface version requested by the mobile
+ * application
+ */
+ APPLICATION_REGISTERED_ALREADY,
+ /**
+ * The requested language is currently not supported. Might be because of a
+ * mismatch of the currently active language
+ */
+ UNSUPPORTED_VERSION,
+ /**
+ * The request cannot be executed because no application interface has been
+ * registered via <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.RegisterAppInterface}</i>
+ */
+ WRONG_LANGUAGE,
+ /**
+ * The request cannot be executed because no application interface has been
+ * registered via <i>
+ * {@linkplain com.smartdevicelink.proxy.rpc.RegisterAppInterface}</i>
+ */
+ APPLICATION_NOT_REGISTERED,
+ /**
+ * The data may not be changed, because it is currently in use. For example,
+ * when trying to delete a Choice Set that is currently involved in an
+ * interaction
+ */
+ IN_USE,
+ /**
+ *The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.
+ */
+ VEHICLE_DATA_NOT_ALLOWED,
+ /**
+ * The requested vehicle data is not available on this vehicle or is not published.
+ */
+ VEHICLE_DATA_NOT_AVAILABLE,
+ /**
+ * The requested operation was rejected. No attempt was made to perform the
+ * operation
+ */
+ REJECTED,
+ /**
+ * The requested operation was aborted due to some pre-empting event (e.g.
+ * button push, <i>{@linkplain com.smartdevicelink.proxy.rpc.Alert}</i>
+ * pre-empts <i>{@linkplain com.smartdevicelink.proxy.rpc.Speak}</i>, etc.)
+ */
+ ABORTED,
+ /**
+ * The requested operation was ignored because it was determined to be
+ * redundant (e.g. pause media clock when already paused)
+ */
+ IGNORED,
+ /**
+ * A button that was requested for subscription is not supported on the
+ * currently connected SDL platform. See DisplayCapabilities for further
+ * information on supported buttons on the currently connected SDL platform
+ */
+ UNSUPPORTED_RESOURCE,
+ /**
+ * A specified file could not be found on Sync.
+ */
+ FILE_NOT_FOUND,
+ /**
+ * Provided data is valid but something went wrong in the lower layers.
+ */
+ GENERIC_ERROR,
+ /**
+ * RPC is not authorized in local policy table.
+ */
+ DISALLOWED,
+ /**
+ * RPC is included in a functional group explicitly blocked by the user.
+ */
+ USER_DISALLOWED,
+ /**
+ * Overlay reached the maximum timeout and closed.
+ */
+ TIMED_OUT,
+ /**
+ * User selected to Cancel Route.
+ */
+ CANCEL_ROUTE,
+ /**
+ * The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.
+ */
+ TRUNCATED_DATA,
+ /**
+ * The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.
+ */
+ RETRY,
+ /**
+ * The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.
+ */
+ WARNINGS,
+ /**
+ * The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.
+ */
+ SAVED,
+ /**
+ * The certificate provided during authentication is invalid.
+ */
+ INVALID_CERT,
+ /**
+ * The certificate provided during authentication is expired.
+ */
+ EXPIRED_CERT,
+ /**
+ * The provided hash ID does not match the hash of the current set of registered data or the core could not resume the previous data.
+ */
+ RESUME_FAILED,
+ /**
+ * The requested data is not available on this vehicle or is not published for the connected app.
+ */
+ DATA_NOT_AVAILABLE,
+ /**
+ * The requested data is read only thus cannot be change via remote control
+ */
+ READ_ONLY,
+ /**
+ * The data sent failed to pass CRC check in receiver end
+ */
+ CORRUPTED_DATA,
+
+ ;
+ /**
+ * Convert String to Result
+ * @param value String
+ * @return Result
+ */
+
+ public static Result valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SamplingRate.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SamplingRate.java
new file mode 100644
index 000000000..e659ff165
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SamplingRate.java
@@ -0,0 +1,58 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Describes different sampling rates for PerformAudioPassThru
+ * @since SmartDeviceLink 2.0
+ */
+public enum SamplingRate {
+
+ /**
+ * Sampling rate of 8 kHz
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _8KHZ("8KHZ"),
+ /**
+ * Sampling rate of 16 kHz
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _16KHZ("16KHZ"),
+ /**
+ * Sampling rate of 22 kHz
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _22KHZ("22KHZ"),
+ /**
+ * Sampling rate of 44 kHz
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ _44KHZ("44KHZ");
+
+ private final String INTERNAL_NAME;
+
+ private SamplingRate(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static SamplingRate valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (SamplingRate anEnum : EnumSet.allOf(SamplingRate.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlConnectionState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlConnectionState.java
new file mode 100644
index 000000000..fa2caecb6
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlConnectionState.java
@@ -0,0 +1,6 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum SdlConnectionState {
+ SDL_CONNECTED,
+ SDL_DISCONNECTED;
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
new file mode 100644
index 000000000..6c83fc1d9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
@@ -0,0 +1,87 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum SdlDisconnectedReason {
+ USER_EXIT,
+ IGNITION_OFF,
+ BLUETOOTH_OFF,
+ USB_DISCONNECTED,
+ REQUEST_WHILE_IN_NONE_HMI_LEVEL,
+ TOO_MANY_REQUESTS,
+ DRIVER_DISTRACTION_VIOLATION,
+ LANGUAGE_CHANGE,
+ MASTER_RESET,
+ FACTORY_DEFAULTS,
+ TRANSPORT_ERROR,
+ APPLICATION_REQUESTED_DISCONNECT,
+ DEFAULT,
+ TRANSPORT_DISCONNECT,
+ HB_TIMEOUT,
+ BLUETOOTH_DISABLED,
+ BLUETOOTH_ADAPTER_ERROR,
+ SDL_REGISTRATION_ERROR,
+ APP_INTERFACE_UNREG,
+ GENERIC_ERROR,
+ /**
+ * This only occurs when multiplexing is running and it is found to be on an old gen 1 system.
+ */
+ LEGACY_BLUETOOTH_MODE_ENABLED,
+ RPC_SESSION_ENDED,
+ PRIMARY_TRANSPORT_CYCLE_REQUEST,
+ MINIMUM_PROTOCOL_VERSION_HIGHER_THAN_SUPPORTED,
+ MINIMUM_RPC_VERSION_HIGHER_THAN_SUPPORTED,
+ ;
+
+
+ public static SdlDisconnectedReason valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+
+ public static SdlDisconnectedReason convertAppInterfaceUnregisteredReason(AppInterfaceUnregisteredReason reason) {
+ if(reason == null){
+ return null;
+ }
+
+ SdlDisconnectedReason returnReason = SdlDisconnectedReason.DEFAULT;
+
+ switch(reason) {
+ case USER_EXIT:
+ returnReason = SdlDisconnectedReason.USER_EXIT;
+ break;
+ case IGNITION_OFF:
+ returnReason = SdlDisconnectedReason.IGNITION_OFF;
+ break;
+ case BLUETOOTH_OFF:
+ returnReason = SdlDisconnectedReason.BLUETOOTH_OFF;
+ break;
+ case USB_DISCONNECTED:
+ returnReason = SdlDisconnectedReason.USB_DISCONNECTED;
+ break;
+ case REQUEST_WHILE_IN_NONE_HMI_LEVEL:
+ returnReason = SdlDisconnectedReason.REQUEST_WHILE_IN_NONE_HMI_LEVEL;
+ break;
+ case TOO_MANY_REQUESTS:
+ returnReason = SdlDisconnectedReason.TOO_MANY_REQUESTS;
+ break;
+ case DRIVER_DISTRACTION_VIOLATION:
+ returnReason = SdlDisconnectedReason.DRIVER_DISTRACTION_VIOLATION;
+ break;
+ case LANGUAGE_CHANGE:
+ returnReason = SdlDisconnectedReason.LANGUAGE_CHANGE;
+ break;
+ case MASTER_RESET:
+ returnReason = SdlDisconnectedReason.MASTER_RESET;
+ break;
+ case FACTORY_DEFAULTS:
+ returnReason = SdlDisconnectedReason.FACTORY_DEFAULTS;
+ break;
+ default:
+ break;
+ }
+
+ return returnReason;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlInterfaceAvailability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlInterfaceAvailability.java
new file mode 100644
index 000000000..0f6b2530c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SdlInterfaceAvailability.java
@@ -0,0 +1,6 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum SdlInterfaceAvailability {
+ SDL_INTERFACE_AVAILABLE,
+ SDL_INTERFACE_UNAVAILABLE;
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SeatMemoryActionType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SeatMemoryActionType.java
new file mode 100644
index 000000000..e81b2694a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SeatMemoryActionType.java
@@ -0,0 +1,25 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum SeatMemoryActionType {
+ /**
+ * Save current seat positions and settings to seat memory.
+ */
+ SAVE,
+ /**
+ * Restore / apply the seat memory settings to the current seat.
+ */
+ RESTORE,
+ /**
+ * No action to be performed.
+ */
+ NONE,
+ ;
+
+ public static SeatMemoryActionType valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ServiceUpdateReason.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ServiceUpdateReason.java
new file mode 100644
index 000000000..302feff3f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/ServiceUpdateReason.java
@@ -0,0 +1,49 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration listing possible Service update reasons.
+ */
+public enum ServiceUpdateReason {
+
+ /**
+ * The service has just been published with the module and once
+ * activated to the primary service of its type, it will be ready for possible consumption.
+ */
+ PUBLISHED,
+
+ /**
+ * The service has just been unpublished with the module and is no longer accessible
+ */
+ REMOVED,
+
+ /**
+ * The service is activated as the primary service of this type. All requests dealing with
+ * this service type will be handled by this service.
+ */
+ ACTIVATED,
+
+ /**
+ * The service has been deactivated as the primary service of its type
+ */
+ DEACTIVATED,
+
+ /**
+ * The service has updated its manifest. This could imply updated capabilities
+ */
+ MANIFEST_UPDATE,
+
+ ;
+
+ /**
+ * Convert String to ServiceUpdateReason
+ * @param value String
+ * @return ServiceUpdateReason
+ */
+ public static ServiceUpdateReason valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SoftButtonType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SoftButtonType.java
new file mode 100644
index 000000000..29fa27020
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SoftButtonType.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+/** The enumeration defines the types of the soft buttons to be displayed on UI component:<p>The text is displayed on the soft button</p>
+ *<p>The image is displayed on the soft button</p>
+ *<p>Both image and text are displayed on the soft button.</p>
+ *
+ * @since SmartDeviceLink 2.0
+ */
+public enum SoftButtonType {
+ /** Text displayed
+ *
+ */
+ SBT_TEXT("TEXT"),
+ /** Image displayed
+ *
+ */
+ SBT_IMAGE("IMAGE"),
+ /** Image displayed
+ *
+ */
+ SBT_BOTH("BOTH");
+
+ private final String INTERNAL_NAME;
+
+ private SoftButtonType(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static SoftButtonType valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (SoftButtonType anEnum : EnumSet.allOf(SoftButtonType.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SpeechCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SpeechCapabilities.java
new file mode 100644
index 000000000..7d8330d0a
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SpeechCapabilities.java
@@ -0,0 +1,52 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/**
+ * Contains information about TTS capabilities on the SDL platform.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum SpeechCapabilities {
+ /**
+ * The SDL platform can speak text phrases.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ TEXT,
+ /**
+ * The SDL platform can interpret and speak LHPLUS phonemes
+ */
+
+ SAPI_PHONEMES,
+
+ /**
+ * The SDL platform can interpret and speak LHPLUS phonemes
+ */
+
+ LHPLUS_PHONEMES,
+ /**
+ * The SDL platform can play pre-recorded sounds as part of a TTS operation.<p>(e.g. Speak, Alert, PerformInteraction, etc.).</p>
+ */
+ PRE_RECORDED,
+ /**
+ * The SDL platform can play the prerecorded sound of 1 second of silence (i.e. no sound at all).
+ */
+
+ SILENCE,
+
+ /**
+ * The SDL platform can play audio files in conjunction with/without TTS text.
+ */
+ FILE;
+ /**
+ * Convert String to SpeechCapabilities
+ * @param value String
+ * @return SpeechCapabilities
+ */
+
+ public static SpeechCapabilities valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/StaticIconName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/StaticIconName.java
new file mode 100644
index 000000000..455995ff3
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/StaticIconName.java
@@ -0,0 +1,910 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration of Static Icon Names
+ */
+public enum StaticIconName {
+
+ /**
+ * Icon Name accept call / active phone call in progress / initiate a phone call
+ */
+ ACCEPT_CALL("0x29"),
+
+ /**
+ * Icon Name add waypoint
+ */
+ ADD_WAYPOINT("0x1B"),
+
+ /**
+ * Icon Name album
+ */
+ ALBUM("0x21"),
+
+ /**
+ * Icon Name ambient lighting
+ */
+ AMBIENT_LIGHTING("0x3d"),
+
+ /**
+ * Icon Name arrow - north
+ */
+ ARROW_NORTH("0x40"),
+
+ /**
+ * Icon Name audio mute
+ */
+ AUDIO_MUTE("0x12"),
+
+ /**
+ * Icon Name audiobook episode
+ */
+ AUDIOBOOK_EPISODE("0x83"),
+
+ /**
+ * Icon Name audiobook narrator
+ */
+ AUDIOBOOK_NARRATOR("0x82"),
+
+ /**
+ * Icon Name auxillary audio
+ */
+ AUXILLARY_AUDIO("0x45"),
+
+ /**
+ * Icon Name back / return
+ */
+ BACK("0x86"),
+
+ /**
+ * Icon Name battery capacity 0 of 5
+ */
+ BATTERY_CAPACITY_0_OF_5("0xF7"),
+
+ /**
+ * Icon Name battery capacity 1 of 5
+ */
+ BATTERY_CAPACITY_1_OF_5("0xF8"),
+
+ /**
+ * Icon Name battery capacity 2 of 5
+ */
+ BATTERY_CAPACITY_2_OF_5("0xF9"),
+
+ /**
+ * Icon Name battery capacity 3 of 5
+ */
+ BATTERY_CAPACITY_3_OF_5("0xFA"),
+
+ /**
+ * Icon Name battery capacity 4 of 5
+ */
+ BATTERY_CAPACITY_4_OF_5("0xf6"),
+
+ /**
+ * Icon Name battery capacity 5 of 5
+ */
+ BATTERY_CAPACITY_5_OF_5("0xFB"),
+
+ /**
+ * Icon Name bluetooth audio source
+ */
+ BLUETOOTH_AUDIO_SOURCE("0x09"),
+
+ /**
+ * Icon Name bluetooth1
+ */
+ BLUETOOTH1("0xcc"),
+
+ /**
+ * Icon Name bluetooth2
+ */
+ BLUETOOTH2("0xCD"),
+
+ /**
+ * Icon Name browse
+ */
+ BROWSE("0x77"),
+
+ /**
+ * Icon Name cell phone in roaming mode
+ */
+ CELL_PHONE_IN_ROAMING_MODE("0x66"),
+
+ /**
+ * Icon Name cell service signal strength 0 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_0_OF_5_BARS("0x67"),
+
+ /**
+ * Icon Name cell service signal strength 1 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_1_OF_5_BARS("0x68"),
+
+ /**
+ * Icon Name cell service signal strength 2 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_2_OF_5_BARS("0x69"),
+
+ /**
+ * Icon Name cell service signal strength 3 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_3_OF_5_BARS("0x6A"),
+
+ /**
+ * Icon Name cell service signal strength 4 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_4_OF_5_BARS("0x6B"),
+
+ /**
+ * Icon Name cell service signal strength 5 of 5 bars
+ */
+ CELL_SERVICE_SIGNAL_STRENGTH_5_OF_5_BARS("0xd3"),
+
+ /**
+ * Icon Name change lane left
+ */
+ CHANGE_LANE_LEFT("0xc3"),
+
+ /**
+ * Icon Name change lane right
+ */
+ CHANGE_LANE_RIGHT("0xc1"),
+
+ /**
+ * Icon Name check box checked
+ */
+ CHECK_BOX_CHECKED("0x27"),
+
+ /**
+ * Icon Name check box unchecked
+ */
+ CHECK_BOX_UNCHECKED("0x28"),
+
+ /**
+ * Icon Name climate
+ */
+ CLIMATE("0xd1"),
+
+ /**
+ * Icon Name clock
+ */
+ CLOCK("0xfc"),
+
+ /**
+ * Icon Name compose (e.g. message)
+ */
+ COMPOSE("0x1A"),
+
+ /**
+ * Icon Name contact / person
+ */
+ CONTACT("0x5C"),
+
+ /**
+ * Icon Name continue
+ */
+ CONTINUE("0x42"),
+
+ /**
+ * Icon Name dash / bullet point
+ */
+ DASH("0x7F"),
+
+ /**
+ * Icon Name date / calendar
+ */
+ DATE("0x87"),
+
+ /**
+ * Icon Name delete/remove - trash
+ */
+ DELETE("0x0F"),
+
+ /**
+ * Icon Name destination
+ */
+ DESTINATION("0x94"),
+
+ /**
+ * Icon Name destination ferry ahead
+ */
+ DESTINATION_FERRY_AHEAD("0x4D"),
+
+ /**
+ * Icon Name ebookmark (e.g. message, feed)
+ */
+ EBOOKMARK("0x2B"),
+
+ /**
+ * Icon Name end call / reject call
+ */
+ END_CALL("0x2C"),
+
+ /**
+ * Icon Name fail / X
+ */
+ FAIL("0xD6"),
+
+ /**
+ * Icon Name fast forward 30 secs
+ */
+ FAST_FORWARD_30_SECS("0x08"),
+
+ /**
+ * Icon Name favorite / heart
+ */
+ FAVORITE_HEART("0x0E"),
+
+ /**
+ * Icon Name favorite / star
+ */
+ FAVORITE_STAR("0x95"),
+
+ /**
+ * Icon Name fax number
+ */
+ FAX_NUMBER("0x80"),
+
+ /**
+ * Icon Name filename
+ */
+ FILENAME("0x50"),
+
+ /**
+ * Icon Name filter / search
+ */
+ FILTER("0x79"),
+
+ /**
+ * Icon Name folder
+ */
+ FOLDER("0x1C"),
+
+ /**
+ * Icon Name fuel prices
+ */
+ FUEL_PRICES("0xe9"),
+
+ /**
+ * Icon Name full map
+ */
+ FULL_MAP("0x0c"),
+
+ /**
+ * Icon Name generic phone number
+ */
+ GENERIC_PHONE_NUMBER("0x53"),
+
+ /**
+ * Icon Name genre
+ */
+ GENRE("0x4E"),
+
+ /**
+ * Icon Name global keyboard
+ */
+ GLOBAL_KEYBOARD("0xea"),
+
+ /**
+ * Icon Name highway exit information
+ */
+ HIGHWAY_EXIT_INFORMATION("0xf4"),
+
+ /**
+ * Icon Name home phone number
+ */
+ HOME_PHONE_NUMBER("0x55"),
+
+ /**
+ * Icon Name hyperlink
+ */
+ HYPERLINK("0x78"),
+
+ /**
+ * Icon Name ID3 tag unknown
+ */
+ ID3_TAG_UNKNOWN("0x51"),
+
+ /**
+ * Icon Name incoming calls (in list of phone calls)
+ */
+ INCOMING_CALLS("0x57"),
+
+ /**
+ * Icon Name information
+ */
+ INFORMATION("0x5d"),
+
+ /**
+ * Icon Name IPOD media source
+ */
+ IPOD_MEDIA_SOURCE("0x0D"),
+
+ /**
+ * Icon Name join calls
+ */
+ JOIN_CALLS("0x02"),
+
+ /**
+ * Icon Name keep left
+ */
+ KEEP_LEFT("0x46"),
+
+ /**
+ * Icon Name keep right
+ */
+ KEEP_RIGHT("0x48"),
+
+ /**
+ * Icon Name key / keycode
+ */
+ KEY("0x7D"),
+
+ /**
+ * Icon Name left
+ */
+ LEFT("0x9f"),
+
+ /**
+ * Icon Name left arrow / back
+ */
+ LEFT_ARROW("0x4B"),
+
+ /**
+ * Icon Name left exit
+ */
+ LEFT_EXIT("0xaf"),
+
+ /**
+ * Icon Name LINE IN audio source
+ */
+ LINE_IN_AUDIO_SOURCE("0x06"),
+
+ /**
+ * Icon Name locked
+ */
+ LOCKED("0x22"),
+
+ /**
+ * Icon Name media control - left arrow
+ */
+ MEDIA_CONTROL_LEFT_ARROW("0x17"),
+
+ /**
+ * Icon Name media control - recording
+ */
+ MEDIA_CONTROL_RECORDING("0x20"),
+
+ /**
+ * Icon Name media control - right arrow
+ */
+ MEDIA_CONTROL_RIGHT_ARROW("0x15"),
+
+ /**
+ * Icon Name media control - stop (e.g. streaming)
+ */
+ MEDIA_CONTROL_STOP("0x16"),
+
+ /**
+ * Icon Name microphone
+ */
+ MICROPHONE("0xe8"),
+
+ /**
+ * Icon Name missed calls (in list of phone calls)
+ */
+ MISSED_CALLS("0x58"),
+
+ /**
+ * Icon Name mobile phone number
+ */
+ MOBILE_PHONE_NUMBER("0x54"),
+
+ /**
+ * Icon Name move down / download
+ */
+ MOVE_DOWN("0xE5"),
+
+ /**
+ * Icon Name move up
+ */
+ MOVE_UP("0xe4"),
+
+ /**
+ * Icon Name MP3 tag artist
+ */
+ MP3_TAG_ARTIST("0x24"),
+
+ /**
+ * Icon Name navigation / navigation settings
+ */
+ NAVIGATION("0x8e"),
+
+ /**
+ * Icon Name navigation current direction
+ */
+ NAVIGATION_CURRENT_DIRECTION("0x0a"),
+
+ /**
+ * Icon Name negative rating - thumbs down
+ */
+ NEGATIVE_RATING_THUMBS_DOWN("0x14"),
+
+ /**
+ * Icon Name new/unread text message/email
+ */
+ NEW("0x5E"),
+
+ /**
+ * Icon Name office phone number / work phone number
+ */
+ OFFICE_PHONE_NUMBER("0x56"),
+
+ /**
+ * Icon Name opened/read text message/email
+ */
+ OPENED("0x5F"),
+
+ /**
+ * Icon Name origin / nearby locale / current position
+ */
+ ORIGIN("0x96"),
+
+ /**
+ * Icon Name outgoing calls (in list of phone calls)
+ */
+ OUTGOING_CALLS("0x59"),
+
+ /**
+ * Icon Name phone call 1
+ */
+ PHONE_CALL_1("0x1D"),
+
+ /**
+ * Icon Name phone call 2
+ */
+ PHONE_CALL_2("0x1E"),
+
+ /**
+ * Icon Name phone device
+ */
+ PHONE_DEVICE("0x03"),
+
+ /**
+ * Icon Name phonebook
+ */
+ PHONEBOOK("0x81"),
+
+ /**
+ * Icon Name photo / picture
+ */
+ PHOTO("0x88"),
+
+ /**
+ * Icon Name play / pause - pause active
+ */
+ PLAY("0xD0"),
+
+ /**
+ * Icon Name playlist
+ */
+ PLAYLIST("0x4F"),
+
+ /**
+ * Icon Name pop-up
+ */
+ POPUP("0x76"),
+
+ /**
+ * Icon Name positive rating - thumbs up
+ */
+ POSITIVE_RATING_THUMBS_UP("0x13"),
+
+ /**
+ * Icon Name power
+ */
+ POWER("0x5b"),
+
+ /**
+ * Icon Name primary phone (favorite)
+ */
+ PRIMARY_PHONE("0x1F"),
+
+ /**
+ * Icon Name radio button checked
+ */
+ RADIO_BUTTON_CHECKED("0x25"),
+
+ /**
+ * Icon Name radio button unchecked
+ */
+ RADIO_BUTTON_UNCHECKED("0x26"),
+
+ /**
+ * Icon Name recent calls / history
+ */
+ RECENT_CALLS("0xe7"),
+
+ /**
+ * Icon Name recent destinations
+ */
+ RECENT_DESTINATIONS("0xf2"),
+
+ /**
+ * Icon Name redo
+ */
+ REDO("0x19"),
+
+ /**
+ * Icon Name refresh
+ */
+ REFRESH("0x97"),
+
+ /**
+ * Icon Name remote diagnostics - check engine
+ */
+ REMOTE_DIAGNOSTICS_CHECK_ENGINE("0x7E"),
+
+ /**
+ * Icon Name rendered 911 assist / emergency assistance
+ */
+ RENDERED_911_ASSIST("0xac"),
+
+ /**
+ * Icon Name repeat
+ */
+ REPEAT("0xe6"),
+
+ /**
+ * Icon Name repeat play
+ */
+ REPEAT_PLAY("0x73"),
+
+ /**
+ * Icon Name reply
+ */
+ REPLY("0x04"),
+
+ /**
+ * Icon Name rewind 30 secs
+ */
+ REWIND_30_SECS("0x07"),
+
+ /**
+ * Icon Name right
+ */
+ RIGHT("0xa3"),
+
+ /**
+ * Icon Name right exit
+ */
+ RIGHT_EXIT("0xb1"),
+
+ /**
+ * Icon Name ringtones
+ */
+ RINGTONES("0x5A"),
+
+ /**
+ * Icon Name roundabout left hand 1
+ */
+ ROUNDABOUT_LEFT_HAND_1("0xee"),
+
+ /**
+ * Icon Name roundabout left hand 2
+ */
+ ROUNDABOUT_LEFT_HAND_2("0x8c"),
+
+ /**
+ * Icon Name roundabout left hand 3
+ */
+ ROUNDABOUT_LEFT_HAND_3("0x84"),
+
+ /**
+ * Icon Name roundabout left hand 4
+ */
+ ROUNDABOUT_LEFT_HAND_4("0x72"),
+
+ /**
+ * Icon Name roundabout left hand 5
+ */
+ ROUNDABOUT_LEFT_HAND_5("0x6e"),
+
+ /**
+ * Icon Name roundabout left hand 6
+ */
+ ROUNDABOUT_LEFT_HAND_6("0x64"),
+
+ /**
+ * Icon Name roundabout left hand 7
+ */
+ ROUNDABOUT_LEFT_HAND_7("0x60"),
+
+ /**
+ * Icon Name roundabout right hand 1
+ */
+ ROUNDABOUT_RIGHT_HAND_1("0x62"),
+
+ /**
+ * Icon Name roundabout right hand 2
+ */
+ ROUNDABOUT_RIGHT_HAND_2("0x6c"),
+
+ /**
+ * Icon Name roundabout right hand 3
+ */
+ ROUNDABOUT_RIGHT_HAND_3("0x70"),
+
+ /**
+ * Icon Name roundabout right hand 4
+ */
+ ROUNDABOUT_RIGHT_HAND_4("0x7a"),
+
+ /**
+ * Icon Name roundabout right hand 5
+ */
+ ROUNDABOUT_RIGHT_HAND_5("0x8a"),
+
+ /**
+ * Icon Name roundabout right hand 6
+ */
+ ROUNDABOUT_RIGHT_HAND_6("0xec"),
+
+ /**
+ * Icon Name roundabout right hand 7
+ */
+ ROUNDABOUT_RIGHT_HAND_7("0xf0"),
+
+ /**
+ * Icon Name RSS
+ */
+ RSS("0x89"),
+
+ /**
+ * Icon Name settings / menu
+ */
+ SETTINGS("0x49"),
+
+ /**
+ * Icon Name sharp left
+ */
+ SHARP_LEFT("0xa5"),
+
+ /**
+ * Icon Name sharp right
+ */
+ SHARP_RIGHT("0xa7"),
+
+ /**
+ * Icon Name show
+ */
+ SHOW("0xe1"),
+
+ /**
+ * Icon Name shuffle play
+ */
+ SHUFFLE_PLAY("0x74"),
+
+ /**
+ * Icon Name ski places / elevation / altitude
+ */
+ SKI_PLACES("0xab"),
+
+ /**
+ * Icon Name slight left
+ */
+ SLIGHT_LEFT("0x9d"),
+
+ /**
+ * Icon Name slight right
+ */
+ SLIGHT_RIGHT("0xa1"),
+
+ /**
+ * Icon Name smartphone
+ */
+ SMARTPHONE("0x05"),
+
+ /**
+ * Icon Name sort list
+ */
+ SORT_LIST("0x7B"),
+
+ /**
+ * Icon Name speed dial numbers - number 0
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_0("0xE0"),
+
+ /**
+ * Icon Name speed dial numbers - number 1
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_1("0xD7"),
+
+ /**
+ * Icon Name speed dial numbers - number 2
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_2("0xD8"),
+
+ /**
+ * Icon Name speed dial numbers - number 3
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_3("0xD9"),
+
+ /**
+ * Icon Name speed dial numbers - number 4
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_4("0xDA"),
+
+ /**
+ * Icon Name speed dial numbers - number 5
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_5("0xDB"),
+
+ /**
+ * Icon Name speed dial numbers - number 6
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_6("0xDC"),
+
+ /**
+ * Icon Name speed dial numbers - number 7
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_7("0xDD"),
+
+ /**
+ * Icon Name speed dial numbers - number 8
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_8("0xDE"),
+
+ /**
+ * Icon Name speed dial numbers - number 9
+ */
+ SPEED_DIAL_NUMBERS_NUMBER_9("0xDF"),
+
+ /**
+ * Icon Name success / check
+ */
+ SUCCESS("0xD5"),
+
+ /**
+ * Icon Name track title / song title
+ */
+ TRACK_TITLE("0x4C"),
+
+ /**
+ * Icon Name traffic report
+ */
+ TRAFFIC_REPORT("0x2A"),
+
+ /**
+ * Icon Name turn list
+ */
+ TURN_LIST("0x10"),
+
+ /**
+ * Icon Name u-turn left traffic
+ */
+ UTURN_LEFT_TRAFFIC("0xad"),
+
+ /**
+ * Icon Name u-turn right traffic
+ */
+ UTURN_RIGHT_TRAFFIC("0xa9"),
+
+ /**
+ * Icon Name undo
+ */
+ UNDO("0x18"),
+
+ /**
+ * Icon Name unlocked
+ */
+ UNLOCKED("0x23"),
+
+ /**
+ * Icon Name USB media audio source
+ */
+ USB_MEDIA_AUDIO_SOURCE("0x0B"),
+
+ /**
+ * Icon Name voice control scrollbar - list item no. 1
+ */
+ VOICE_CONTROL_SCROLLBAR_LIST_ITEM_NO_1("0xC7"),
+
+ /**
+ * Icon Name voice control scrollbar - list item no. 2
+ */
+ VOICE_CONTROL_SCROLLBAR_LIST_ITEM_NO_2("0xC8"),
+
+ /**
+ * Icon Name voice control scrollbar - list item no. 3
+ */
+ VOICE_CONTROL_SCROLLBAR_LIST_ITEM_NO_3("0xC9"),
+
+ /**
+ * Icon Name voice control scrollbar - list item no. 4
+ */
+ VOICE_CONTROL_SCROLLBAR_LIST_ITEM_NO_4("0xCA"),
+
+ /**
+ * Icon Name voice recognition - failed
+ */
+ VOICE_RECOGNITION_FAILED("0x90"),
+
+ /**
+ * Icon Name voice recognition - pause
+ */
+ VOICE_RECOGNITION_PAUSE("0x92"),
+
+ /**
+ * Icon Name voice recognition - successful
+ */
+ VOICE_RECOGNITION_SUCCESSFUL("0x8F"),
+
+ /**
+ * Icon Name voice recognition - system active
+ */
+ VOICE_RECOGNITION_SYSTEM_ACTIVE("0x11"),
+
+ /**
+ * Icon Name voice recognition - system listening
+ */
+ VOICE_RECOGNITION_SYSTEM_LISTENING("0x91"),
+
+ /**
+ * Icon Name voice recognition - try again
+ */
+ VOICE_RECOGNITION_TRY_AGAIN("0x93"),
+
+ /**
+ * Icon Name warning / safety alert
+ */
+ WARNING("0xfe"),
+
+ /**
+ * Icon Name weather
+ */
+ WEATHER("0xeb"),
+
+ /**
+ * Icon Name wifi full
+ */
+ WIFI_FULL("0x43"),
+
+ /**
+ * Icon Name zoom in
+ */
+ ZOOM_IN("0x98"),
+
+ /**
+ * Icon Name zoom out
+ */
+ ZOOM_OUT("0x9a"),
+
+ ;
+
+ private final String INTERNAL_NAME;
+
+ private StaticIconName(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public static StaticIconName valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (StaticIconName type : StaticIconName.values()) {
+ if (type.toString().equals(value)) {
+ return type;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return INTERNAL_NAME;
+ }
+
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SupportedSeat.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SupportedSeat.java
new file mode 100644
index 000000000..c68f2e79d
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SupportedSeat.java
@@ -0,0 +1,18 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * List possible seats that is a remote controllable seat.
+ */
+public enum SupportedSeat {
+ DRIVER,
+ FRONT_PASSENGER,
+ ;
+
+ public static SupportedSeat valueForString(String value) {
+ try {
+ return valueOf(value);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemAction.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemAction.java
new file mode 100644
index 000000000..835e9b1b9
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemAction.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Enumeration that describes system actions that can be triggered.
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ */
+
+public enum SystemAction {
+ /** Default action occurs. Standard behavior (e.g. SoftButton clears overlay).
+ *
+ */
+
+ DEFAULT_ACTION,
+ /** App is brought into HMI_FULL.
+ *
+ */
+
+ STEAL_FOCUS,
+ /** Current system context is maintained. An overlay is persisted even though a SoftButton has been pressed and the notification sent.
+ *
+ */
+
+ KEEP_CONTEXT;
+ /**
+ * Convert String to SystemAction
+ * @param value String
+ * @return SystemAction
+ */
+
+ public static SystemAction valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java
new file mode 100644
index 000000000..c9f612bec
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java
@@ -0,0 +1,466 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * <p>The SystemCapabilityType indicates which type of capability information exists in a SystemCapability struct.</p>
+ *
+ * <p><b>Enum List</b></p>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>NAVIGATION</td>
+ * <td>NavigationCapability</td>
+ * <td>Returns Navigation Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * <tr>
+ * <td>PHONE_CALL</td>
+ * <td>PhoneCapability</td>
+ * <td>Returns Phone Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * <tr>
+ * <td>VIDEO_STREAMING</td>
+ * <td>VideoStreamingCapability</td>
+ * <td>Returns Video Streaming Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * <tr>
+ * <td>REMOTE_CONTROL</td>
+ * <td>RemoteControlCapabilities</td>
+ * <td>Returns Remote Control Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * <tr>
+ * <td>HMI</td>
+ * <td>HMICapabilities</td>
+ * <td>Returns HMI Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>DISPLAY</td>
+ * <td>DisplayCapabilities</td>
+ * <td>Returns Display Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>AUDIO_PASSTHROUGH</td>
+ * <td>List<AudioPassThruCapabilities></td>
+ * <td>Returns a List of AudioPassThruCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * <tr>
+ * <td>PCM_STREAMING</td>
+ * <td>AudioPassThruCapabilities</td>
+ * <td>Returns an AudioPassThruCapabilities Object</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * <tr>
+ * <td>BUTTON</td>
+ * <td>List<ButtonCapabilities></td>
+ * <td>Returns a List of ButtonCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * <tr>
+ * <td>HMI_ZONE</td>
+ * <td>HmiZoneCapabilities</td>
+ * <td>Returns HmiZone Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>PRESET_BANK</td>
+ * <td>PresetBankCapabilities</td>
+ * <td>Returns PresetBank Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>SOFTBUTTON</td>
+ * <td>List<SoftButtonCapabilities></td>
+ * <td>Returns a List of SoftButtonCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * <tr>
+ * <td>SPEECH</td>
+ * <td>SpeechCapabilities</td>
+ * <td>Returns Speech Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>VOICE_RECOGNITION</td>
+ * <td>VrCapabilities</td>
+ * <td>Returns VOICE_RECOGNITION</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * <tr>
+ * <td>APP_SERVICES</td>
+ * <td>AppServicesCapabilities</td>
+ * <td>Returns APP_SERVICES</td>
+ * <td align=center>N</td>
+ * <td>Available Asynchronously, Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ *
+ */
+
+public enum SystemCapabilityType {
+
+ /**
+ * <strong>Requires</strong> initial asynchronous call, then available synchronously after successful call. <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>NAVIGATION</td>
+ * <td>NavigationCapability</td>
+ * <td>Returns Navigation Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ */
+ NAVIGATION (true),
+
+ /**
+ * <strong>Requires</strong> initial asynchronous call, then available synchronously after successful call. <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>PHONE_CALL</td>
+ * <td>PhoneCapability</td>
+ * <td>Returns Phone Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ */
+ PHONE_CALL (true),
+
+ /**
+ * <strong>Requires</strong> initial asynchronous call, then available synchronously after successful call. <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>VIDEO_STREAMING</td>
+ * <td>VideoStreamingCapability</td>
+ * <td>Returns Video Streaming Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ */
+ VIDEO_STREAMING (true),
+
+ /**
+ * <strong>Requires</strong> initial asynchronous call, then available synchronously after successful call. <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <td>REMOTE_CONTROL</td>
+ * <td>RemoteControlCapabilities</td>
+ * <td>Returns Remote Control Capabilities</td>
+ * <td align=center>Y</td>
+ * <td>Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ *
+ */
+ REMOTE_CONTROL (true),
+
+ /* These below are not part of the RPC spec. Only for Internal Proxy use */
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>HMI</td>
+ * <td>HMICapabilities</td>
+ * <td>Returns HMI Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * </table>
+ */
+ HMI (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * Returns: DisplayCapabilities
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>DISPLAY</td>
+ * <td>DisplayCapabilities</td>
+ * <td>Returns Display Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response received</td>
+ * </tr>
+ * </table>
+ */
+ DISPLAY (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <b>Note:</b> @SuppressWarnings("unchecked") may be needed when casting depending on implementation
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>AUDIO_PASSTHROUGH</td>
+ * <td>List<AudioPassThruCapabilities></td>
+ * <td>Returns a List of AudioPassThruCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * </table>
+ */
+ AUDIO_PASSTHROUGH (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <b>Note:</b> @SuppressWarnings("unchecked") may be needed when casting depending on implementation
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>PCM_STREAMING</td>
+ * <td>AudioPassThruCapabilities</td>
+ * <td>Returns a AudioPassThruCapabilities Object</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * </table>
+ */
+ PCM_STREAMING (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <b>Note:</b> @SuppressWarnings("unchecked") may be needed when casting depending on implementation
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>BUTTON</td>
+ * <td>List<ButtonCapabilities></td>
+ * <td>Returns a List of ButtonCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * </table>
+ */
+ BUTTON (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>HMI_ZONE</td>
+ * <td>HmiZoneCapabilities</td>
+ * <td>Returns HmiZone Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * </table>
+ */
+ HMI_ZONE (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>PRESET_BANK</td>
+ * <td>PresetBankCapabilities</td>
+ * <td>Returns PresetBank Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * </table>
+ */
+ PRESET_BANK (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * Returns: List<SoftButtonCapabilities> <br>
+ * Note: @SuppressWarnings("unchecked") may be needed when casting depending on implementation
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>SOFTBUTTON</td>
+ * <td>List<SoftButtonCapabilities></td>
+ * <td>Returns a List of SoftButtonCapabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response. @SuppressWarnings("unchecked") may be needed when casting depending on implementation</td>
+ * </tr>
+ * </table>
+ */
+ SOFTBUTTON (false),
+
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>SPEECH</td>
+ * <td>SpeechCapabilities</td>
+ * <td>Returns Speech Capabilities</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * </table>
+ */
+ SPEECH (false),
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>VOICE_RECOGNITION</td>
+ * <td>VrCapabilities</td>
+ * <td>Returns VOICE_RECOGNITION</td>
+ * <td align=center>N</td>
+ * <td>Available Synchronously <strong>after</strong> Register App Interface response</td>
+ * </tr>
+ * </table>
+ */
+ VOICE_RECOGNITION (false),
+ /**
+ * Available Synchronously after Register App Interface response <br>
+ * <table border="1" rules="all">
+ * <tr>
+ * <th>Enum Name</th>
+ * <th>Return Type</th>
+ * <th>Description</th>
+ * <th>Requires Async?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>APP_SERVICES</td>
+ * <td>AppServicesCapabilities</td>
+ * <td>Returns APP_SERVICES</td>
+ * <td align=center>N</td>
+ * <td>Available Asynchronously, Call is synchronous <strong>after</strong> initial call</td>
+ * </tr>
+ * </table>
+ */
+ APP_SERVICES (true),
+
+ ;
+
+ boolean IS_QUERYABLE;
+
+ SystemCapabilityType(boolean isQueryable) {
+ this.IS_QUERYABLE = isQueryable;
+ }
+
+ public boolean isQueryable() {
+ return IS_QUERYABLE;
+ }
+
+ public static SystemCapabilityType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemContext.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemContext.java
new file mode 100644
index 000000000..1ea9d60b1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemContext.java
@@ -0,0 +1,67 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Indicates whether or not a user-initiated interaction is in progress, and if
+ * so, in what mode (i.e. MENU or VR).
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum SystemContext {
+ /**
+ * No user interaction (user-initiated or app-initiated) is in progress.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ SYSCTXT_MAIN("MAIN"),
+ /**
+ * VR-oriented, user-initiated or app-initiated interaction is in-progress.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ SYSCTXT_VRSESSION("VRSESSION"),
+ /**
+ * Menu-oriented, user-initiated or app-initiated interaction is
+ * in-progress.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ SYSCTXT_MENU("MENU"),
+ /**
+ * The app's display HMI is currently being obscured by either a system or
+ * other app's overlay.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ SYSCTXT_HMI_OBSCURED("HMI_OBSCURED"),
+ /**
+ * Broadcast only to whichever app has an alert currently being displayed.
+ *
+ * @since SmartDeviceLink 2.0
+ */
+ SYSCTXT_ALERT("ALERT");
+
+ private final String INTERNAL_NAME;
+
+ private SystemContext(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static SystemContext valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (SystemContext anEnum : EnumSet.allOf(SystemContext.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TBTState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TBTState.java
new file mode 100644
index 000000000..d334ccad7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TBTState.java
@@ -0,0 +1,70 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Describes possible states of turn-by-turn module.
+ * @since SmartDeviceLink 1.0
+ */
+public enum TBTState {
+ /**
+ * Indicates that driver requested a route update.
+ */
+ ROUTE_UPDATE_REQUEST,
+ /**
+ * Confirmation from HMI about accepting the route.
+ */
+
+ ROUTE_ACCEPTED,
+ /**
+ * Information from HMI about the route refusal.
+ */
+
+ ROUTE_REFUSED,
+ /**
+ * Information from HMI about canceling the route.
+ */
+
+ ROUTE_CANCELLED,
+ /**
+ * Request from HMI for Estimated time of arrival.
+ */
+
+ ETA_REQUEST,
+ /**
+ * Request from HMI for the information of the next turn.
+ */
+
+ NEXT_TURN_REQUEST,
+ /**
+ * Request from HMI for the route status.
+ */
+
+ ROUTE_STATUS_REQUEST,
+ /**
+ * Request from HMI for the route summary.
+ */
+
+ ROUTE_SUMMARY_REQUEST,
+ /**
+ * Request from HMI for the information about trip status.
+ */
+
+ TRIP_STATUS_REQUEST,
+ /**
+ * Request from HMI for the timeout for waiting for the route updating.
+ */
+
+ ROUTE_UPDATE_REQUEST_TIMEOUT;
+
+ /**
+ * Convert String to TBTState
+ * @param value String
+ * @return TBTState
+ */
+ public static TBTState valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TPMS.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TPMS.java
new file mode 100644
index 000000000..69b60e211
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TPMS.java
@@ -0,0 +1,51 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enums for Tire Pressure Monitoring Systems
+ *
+ * @since SmartDeviceLink 5.0
+ */
+public enum TPMS {
+
+ /**
+ * If set the status of the tire is not known.
+ */
+ UNKNOWN,
+ /**
+ * TPMS does not function.
+ */
+ SYSTEM_FAULT,
+ /**
+ * The sensor of the tire does not function.
+ */
+ SENSOR_FAULT,
+ /**
+ * TPMS is reporting a low tire pressure for the tire.
+ */
+ LOW,
+ /**
+ * TPMS is active and the tire pressure is monitored.
+ */
+ SYSTEM_ACTIVE,
+ /**
+ * TPMS is reporting that the tire must be trained.
+ */
+ TRAIN,
+ /**
+ * TPMS reports the training for the tire is completed.
+ */
+ TRAINING_COMPLETE,
+ /**
+ * TPMS reports the tire is not trained.
+ */
+ NOT_TRAINED,
+ ;
+
+ public static TPMS valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TemperatureUnit.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TemperatureUnit.java
new file mode 100644
index 000000000..6c9b04875
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TemperatureUnit.java
@@ -0,0 +1,14 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum TemperatureUnit {
+ CELSIUS,
+ FAHRENHEIT;
+
+ public static TemperatureUnit valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextAlignment.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextAlignment.java
new file mode 100644
index 000000000..b188d6ba8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextAlignment.java
@@ -0,0 +1,33 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * The list of possible alignments of text in a field.
+ * @since SmartDeviceLink 1.0
+ */
+public enum TextAlignment {
+ /**
+ * Text aligned left.
+ */
+ LEFT_ALIGNED,
+ /**
+ * Text aligned right.
+ */
+ RIGHT_ALIGNED,
+ /**
+ * Text aligned centered.
+ */
+ CENTERED;
+
+ /**
+ * Convert String to TextAlignment
+ * @param value String
+ * @return TextAlignment
+ */
+ public static TextAlignment valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java
new file mode 100644
index 000000000..ded9d0571
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java
@@ -0,0 +1,166 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Names of the text fields that can appear on the display.
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ */
+
+public enum TextFieldName {
+ /** The first line of first set of main fields of the persistent display; applies to "Show"
+ *
+ */
+
+ mainField1,
+ /** The second line of first set of main fields of the persistent display; applies to "Show"
+ *
+ */
+
+ mainField2,
+ /** The first line of second set of main fields of persistent display; applies to "Show"
+ *
+ */
+
+ mainField3,
+ /** The second line of second set of main fields of the persistent display; applies to "Show"
+ *
+ */
+
+ mainField4,
+ /** The status bar on NGN; applies to "Show"
+ *
+ */
+
+ statusBar,
+ /** Text value for MediaClock field; applies to "Show"
+ *
+ */
+
+ mediaClock,
+ /** The track field of NGN and GEN1.1 MFD displays. This field is only available for media applications; applies to "Show"
+ *
+ */
+
+ mediaTrack,
+ /** The first line of the alert text field; applies to "Alert"
+ *
+ */
+
+ alertText1,
+ /** The second line of the alert text field; applies to "Alert"
+ *
+ */
+
+ alertText2,
+ /** The third line of the alert text field; applies to "Alert"
+ *
+ */
+
+ alertText3,
+ /** Long form body of text that can include newlines and tabs; applies to "ScrollableMessage"
+ *
+ */
+
+ scrollableMessageBody,
+ /** First line suggestion for a user response (in the case of VR enabled interaction)
+ *
+ */
+
+ initialInteractionText,
+ /** First line of navigation text
+ *
+ */
+
+ navigationText1,
+ /** Second line of navigation text
+ *
+ */
+
+ navigationText2,
+ /** Estimated Time of Arrival time for navigation
+ *
+ */
+
+ ETA,
+ /** Total distance to destination for navigation
+ *
+ */
+
+ totalDistance,
+ /** First line of text for audio pass thru
+ *
+ */
+
+ audioPassThruDisplayText1,
+ /** Second line of text for audio pass thru
+ *
+ */
+
+ audioPassThruDisplayText2,
+ /** Header text for slider
+ *
+ */
+
+ sliderHeader,
+ /** Footer text for slider
+ *
+ */
+
+ sliderFooter,
+ /** Primary text for Choice
+ *
+ */
+
+ menuName,
+ /** Secondary text for Choice
+ *
+ */
+
+ secondaryText,
+ /** Tertiary text for Choice
+ *
+ */
+
+ tertiaryText,
+ /** Optional text to label an app menu button (for certain touchscreen platforms).
+ *
+ */
+ menuTitle,
+ /**
+ * Optional name / title of intended location for SendLocation.
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ locationName,
+ /**
+ * Optional description of intended location / establishment (if applicable) for SendLocation
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ locationDescription,
+ /**
+ * Optional location address (if applicable) for SendLocation.
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ addressLines,
+ /**
+ * Optional hone number of intended location / establishment (if applicable) for SendLocation.
+ *
+ * @since SmartDeviceLink 4.0
+ */
+ phoneNumber,
+ ;
+ /**
+ * Convert String to TextFieldName
+ * @param value String
+ * @return TextFieldName
+ */
+
+ public static TextFieldName valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TouchType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TouchType.java
new file mode 100644
index 000000000..7cc259aa4
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TouchType.java
@@ -0,0 +1,41 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** The type of touch event.
+ *
+ * @since SmartDeviceLink 2.3.2
+ *
+ */
+
+public enum TouchType {
+ /** The user has touched the screen.
+ *
+ */
+
+ BEGIN,
+ /** The User has moved his finger over the screen.
+ *
+ */
+
+ MOVE,
+ /** The User has removed his finger from the screen.
+ *
+ */
+
+ END,
+ /** The user has made a cancellation gesture.
+ *
+ */
+ CANCEL;
+ /**
+ * Convert String to TouchType
+ * @param value String
+ * @return TouchType
+ */
+
+ public static TouchType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TriggerSource.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TriggerSource.java
new file mode 100644
index 000000000..169721705
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TriggerSource.java
@@ -0,0 +1,47 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+import java.util.EnumSet;
+
+/**
+ * Indicates whether choice/command was selected via VR or via a menu selection
+ * (using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN and OK buttons)
+ *
+ * @since SmartDeviceLink 1.0
+ *
+ */
+public enum TriggerSource {
+ /**
+ * Selection made via menu (i.e. using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN
+ * and OK buttons)
+ */
+ TS_MENU("MENU"),
+ /**
+ * Selection made via VR session
+ */
+ TS_VR("VR"),
+
+ TS_KEYBOARD("KEYBOARD");
+
+ private final String INTERNAL_NAME;
+
+ private TriggerSource(String internalName) {
+ this.INTERNAL_NAME = internalName;
+ }
+
+ public String toString() {
+ return this.INTERNAL_NAME;
+ }
+
+ public static TriggerSource valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ for (TriggerSource anEnum : EnumSet.allOf(TriggerSource.class)) {
+ if (anEnum.toString().equals(value)) {
+ return anEnum;
+ }
+ }
+ return null;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TurnSignal.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TurnSignal.java
new file mode 100644
index 000000000..923cd842e
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TurnSignal.java
@@ -0,0 +1,35 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration that describes the status of the turn light indicator.
+ *
+ * @since SmartDeviceLink 5.0
+ */
+public enum TurnSignal {
+
+ /**
+ * Turn signal is OFF
+ */
+ OFF,
+ /**
+ * Left turn signal is on
+ */
+ LEFT,
+ /**
+ * Right turn signal is on
+ */
+ RIGHT,
+ /**
+ * Both signals (left and right) are on.
+ */
+ BOTH,
+ ;
+
+ public static TurnSignal valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/UpdateMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/UpdateMode.java
new file mode 100644
index 000000000..cd9bf6dfe
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/UpdateMode.java
@@ -0,0 +1,42 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Specifies what function should be performed on the media clock/counter
+ *
+ *
+ * @since SmartDeviceLink 1.0
+ */
+public enum UpdateMode {
+ /**
+ * Starts the media clock timer counting upward, in increments of 1 second
+ */
+ COUNTUP,
+ /**
+ * Starts the media clock timer counting downward, in increments of 1 second
+ */
+ COUNTDOWN,
+ /**
+ * Pauses the media clock timer
+ */
+ PAUSE,
+ /**
+ * Resumes the media clock timer. The timer resumes counting in whatever
+ * mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN)
+ */
+ RESUME,
+ CLEAR;
+
+
+ /**
+ * Returns an UpdateMode value (COUNTUP, COUNTDOWN, PAUSE or RESUME)
+ * @param value a String
+ * @return UpdateMode -COUNTUP, COUNTDOWN, PAUSE or RESUME
+ */
+ public static UpdateMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataEventStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataEventStatus.java
new file mode 100644
index 000000000..64a5dd898
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataEventStatus.java
@@ -0,0 +1,32 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the status of a vehicle data event; e.g. a seat belt event status.
+ * @since SmartDeviceLink 2.0
+ */
+public enum VehicleDataEventStatus {
+ /**
+ * No event available
+ */
+ NO_EVENT,
+ NO,
+ YES,
+ /**
+ * Vehicle data event is not support
+ */
+ NOT_SUPPORTED,
+ FAULT;
+
+ /**
+ * Convert String to VehicleDataEventStatus
+ * @param value String
+ * @return VehicleDataEventStatus
+ */
+ public static VehicleDataEventStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataNotificationStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataNotificationStatus.java
new file mode 100644
index 000000000..d7bca9fc7
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataNotificationStatus.java
@@ -0,0 +1,41 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the status of a vehicle data notification.
+ * @since SmartDeviceLink 2.0
+ *
+ * @see SoftButtonCapabilities
+ * @see ButtonCapabilities
+ * @see OnButtonPress
+ */
+public enum VehicleDataNotificationStatus {
+ /**
+ * VehicleDataNotificationStatus is not supported.
+ */
+ NOT_SUPPORTED,
+ /**
+ * VehicleDataNotificationStatus is normal.
+ */
+ NORMAL,
+ /**
+ * VehicleDataNotificationStatus is active.
+ */
+ ACTIVE,
+ /**
+ * VehicleDataNotificationStatus is not in use.
+ */
+ NOT_USED;
+
+ /**
+ * Convert String to VehicleDataNotificationStatus
+ * @param value String
+ * @return VehicleDataNotificationStatus
+ */
+ public static VehicleDataNotificationStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataResultCode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataResultCode.java
new file mode 100644
index 000000000..45c2e7c11
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataResultCode.java
@@ -0,0 +1,65 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** Enumeration that describes possible result codes of a vehicle data entry request.
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ *@see DIDResult
+ *@see ReadDID
+ */
+
+public enum VehicleDataResultCode {
+ /**Individual vehicle data item / DTC / DID request or subscription successful
+ *
+ */
+
+ SUCCESS,
+ /**
+ *DTC / DID request successful, however, not all active DTCs or full contents of DID location available
+ *
+ * @since SmartDeviceLink 4.0
+ */
+
+ TRUNCATED_DATA,
+ /** This vehicle data item is not allowed for this app .The request is not authorized in local policies.
+ *
+ */
+
+ DISALLOWED,
+ /** The user has not granted access to this type of vehicle data item at this time.
+ *
+ */
+
+ USER_DISALLOWED,
+ /** The ECU ID referenced is not a valid ID on the bus / system.
+ *
+ */
+
+ INVALID_ID,
+ /** The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system.
+ *
+ */
+
+ VEHICLE_DATA_NOT_AVAILABLE,
+ /** The vehicle data item is already subscribed.
+ *
+ */
+
+ DATA_ALREADY_SUBSCRIBED,
+ /** The vehicle data item cannot be unsubscribed because it is not currently subscribed.
+ *
+ */
+
+ DATA_NOT_SUBSCRIBED,
+ /** The request for this item is ignored because it is already in progress
+ */
+
+ IGNORED;
+
+ public static VehicleDataResultCode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataStatus.java
new file mode 100644
index 000000000..2245bbe71
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataStatus.java
@@ -0,0 +1,36 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the status of a binary vehicle data item.
+ * @since SmartDeviceLink 2.0
+ *
+ */
+public enum VehicleDataStatus {
+ /**
+ * No data available
+ */
+ NO_DATA_EXISTS,
+ /**
+ * The vehicle item is in Off state
+ */
+
+ OFF,
+ /**
+ * The vehicle item is in On state
+ */
+
+ ON;
+
+ /**
+ * Convert String to VehicleDataStatus
+ * @param value String
+ * @return VehicleDataStatus
+ */
+ public static VehicleDataStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java
new file mode 100644
index 000000000..8694d67c1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java
@@ -0,0 +1,148 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Defines the vehicle data types that can be published and subscribed to.
+ *
+ */
+public enum VehicleDataType {
+ /**
+ * Notifies GPSData may be subscribed
+ */
+ VEHICLEDATA_GPS,
+ /**
+ * Notifies SPEED Data may be subscribed
+ */
+ VEHICLEDATA_SPEED,
+ /**
+ * Notifies RPMData may be subscribed
+ */
+ VEHICLEDATA_RPM,
+ /**
+ * Notifies FUELLEVELData may be subscribed
+ */
+ VEHICLEDATA_FUELLEVEL,
+ /**
+ * Notifies FUELLEVEL_STATEData may be subscribed
+ */
+ VEHICLEDATA_FUELLEVEL_STATE,
+/**
+ * Notifies FUELCONSUMPTIONData may be subscribed
+ */
+ VEHICLEDATA_FUELCONSUMPTION,
+ /**
+ * Notifies EXTERNTEMPData may be subscribed
+ */
+ VEHICLEDATA_EXTERNTEMP,
+ /**
+ * Notifies VINData may be subscribed
+ */
+ VEHICLEDATA_VIN,
+ /**
+ * Notifies PRNDLData may be subscribed
+ */
+ VEHICLEDATA_PRNDL,
+ /**
+ * Notifies TIREPRESSUREData may be subscribed
+ */
+ VEHICLEDATA_TIREPRESSURE,
+ /**
+ * Notifies ODOMETERData may be subscribed
+ */
+ VEHICLEDATA_ODOMETER,
+ /**
+ * Notifies BELTSTATUSData may be subscribed
+ */
+ VEHICLEDATA_BELTSTATUS,
+ /**
+ * Notifies BODYINFOData may be subscribed
+ */
+ VEHICLEDATA_BODYINFO,
+ /**
+ * Notifies DEVICESTATUSData may be subscribed
+ */
+ VEHICLEDATA_DEVICESTATUS,
+ /**
+ * Notifies BRAKINGData may be subscribed
+ */
+ VEHICLEDATA_BRAKING,
+ /**
+ * Notifies WIPERSTATUSData may be subscribed
+ */
+ VEHICLEDATA_WIPERSTATUS,
+ /**
+ * Notifies HEADLAMPSTATUSData may be subscribed
+ */
+ VEHICLEDATA_HEADLAMPSTATUS,
+ /**
+ * Notifies BATTVOLTAGEData may be subscribed
+ */
+ VEHICLEDATA_BATTVOLTAGE,
+ /**
+ * Notifies EGINETORQUEData may be subscribed
+ */
+ VEHICLEDATA_ENGINETORQUE,
+ /**
+ * Notifies ENGINEOILLIFEData may be subscribed
+ */
+ VEHICLEDATA_ENGINEOILLIFE,
+ /**
+ * Notifies ACCPEDALData may be subscribed
+ */
+ VEHICLEDATA_ACCPEDAL,
+ /**
+ * Notifies STEERINGWHEELData may be subscribed
+ */
+ VEHICLEDATA_STEERINGWHEEL,
+ /**
+ * Notifies ECALLINFOData may be subscribed
+ */
+ VEHICLEDATA_ECALLINFO,
+ /**
+ * Notifies AIRBAGSTATUSData may be subscribed
+ */
+ VEHICLEDATA_AIRBAGSTATUS,
+ /**
+ * Notifies EMERGENCYEVENTData may be subscribed
+ */
+ VEHICLEDATA_EMERGENCYEVENT,
+ /**
+ * Notifies CLUSTERMODESTATUSData may be subscribed
+ */
+ VEHICLEDATA_CLUSTERMODESTATUS,
+ /**
+ * Notifies MYKEYData may be subscribed
+ */
+ VEHICLEDATA_MYKEY,
+
+ VEHICLEDATA_FUELRANGE,
+
+ /**
+ * Notifies TURNSIGNALData may be subscribed
+ */
+ VEHICLEDATA_TURNSIGNAL,
+
+ /**
+ * Notifies ELECTRONICPARKBRAKESTATUSData may be subscribed
+ */
+ VEHICLEDATA_ELECTRONICPARKBRAKESTATUS,
+
+ /**
+ * Notifies VEHICLEDATA_CLOUDAPPVEHICLEID may be subscribed
+ */
+ VEHICLEDATA_CLOUDAPPVEHICLEID,
+ ;
+
+ /**
+ * Convert String to VehicleDataType
+ * @param value String
+ * @return VehicleDataType
+ */
+
+ public static VehicleDataType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VentilationMode.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VentilationMode.java
new file mode 100644
index 000000000..b7a2ae9a2
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VentilationMode.java
@@ -0,0 +1,17 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum VentilationMode {
+ UPPER,
+ LOWER,
+ BOTH,
+ NONE,
+ ;
+
+ public static VentilationMode valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingCodec.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingCodec.java
new file mode 100644
index 000000000..a41c1d064
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingCodec.java
@@ -0,0 +1,50 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enum for each type of video streaming codec.
+ */
+
+public enum VideoStreamingCodec {
+ /**
+ * A block-oriented motion-compensation-based video compression standard. As of 2014 it is one
+ * of the most commonly used formats for the recording, compression, and distribution of video
+ * content.
+ */
+ H264,
+ /**
+ * High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2, is a video
+ * compression standard, one of several potential successors to the widely used AVC
+ * (H.264 or MPEG-4 Part 10). In comparison to AVC, HEVC offers about double the data
+ * compression ratio at the same level of video quality, or substantially improved video quality
+ * at the same bit rate. It supports resolutions up to 8192x4320, including 8K UHD.
+ */
+ H265,
+ /**
+ * Theora is derived from the formerly proprietary VP3 codec, released into the public domain by
+ * On2 Technologies. It is broadly comparable in design and bitrate efficiency to MPEG-4 Part 2,
+ * early versions of Windows Media Video, and RealVideo while lacking some of the features
+ * present in some of these other codecs. It is comparable in open standards philosophy to the
+ * BBC's Dirac codec.
+ */
+ Theora,
+ /**
+ * VP8 can be multiplexed into the Matroska-based container format WebM along with Vorbis and
+ * Opus audio. The image format WebP is based on VP8's intra-frame coding. VP8's direct
+ * successor, VP9, and the emerging royalty-free internet video format AV1 from the Alliance
+ * for Open Media (AOMedia) are based on VP8.
+ */
+ VP8,
+ /**
+ * Similar to VP8, but VP9 is customized for video resolutions beyond high-definition video
+ * (UHD) and also enables lossless compression.
+ */
+ VP9;
+
+ public static VideoStreamingCodec valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingProtocol.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingProtocol.java
new file mode 100644
index 000000000..412badcac
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingProtocol.java
@@ -0,0 +1,44 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enum for each type of video streaming protocol type.
+ */
+
+public enum VideoStreamingProtocol {
+ /**
+ * Raw stream bytes that contains no timestamp data and is the lowest supported video streaming
+ */
+ RAW,
+ /**
+ * RTP facilitates the transfer of real-time data. Information provided by this protocol include
+ * timestamps (for synchronization), sequence numbers (for packet loss and reordering detection)
+ * and the payload format which indicates the encoded format of the data.
+ */
+ RTP,
+ /**
+ * The transmission of streaming data itself is not a task of RTSP. Most RTSP servers use the
+ * Real-time Transport Protocol (RTP) in conjunction with Real-time Control Protocol (RTCP) for
+ * media stream delivery. However, some vendors implement proprietary transport protocols.
+ */
+ RTSP,
+ /**
+ * Real-Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by
+ * Macromedia for streaming audio, video and data over the Internet, between a Flash player and
+ * a server. Macromedia is now owned by Adobe, which has released an incomplete version of the
+ * specification of the protocol for public use.
+ */
+ RTMP,
+ /**
+ * The WebM container is based on a profile of Matroska. WebM initially supported VP8 video and
+ * Vorbis audio streams. In 2013 it was updated to accommodate VP9 video and Opus audio.
+ */
+ WEBM;
+
+ public static VideoStreamingProtocol valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingState.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingState.java
new file mode 100644
index 000000000..80384016b
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VideoStreamingState.java
@@ -0,0 +1,23 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Enumeration that describes possible states of video streaming.
+ * @since SmartDeviceLink 5.0
+ */
+public enum VideoStreamingState {
+ /**
+ * @since SmartDeviceLink 5.0
+ */
+ STREAMABLE,
+ /**
+ * @since SmartDeviceLink 5.0
+ */
+ NOT_STREAMABLE;
+ public static VideoStreamingState valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VrCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VrCapabilities.java
new file mode 100644
index 000000000..e228638ce
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VrCapabilities.java
@@ -0,0 +1,42 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * The VR capabilities of the connected SDL platform.
+ *
+ */
+public enum VrCapabilities {
+ /**
+ * The SDL platform is capable of recognizing spoken text in the current
+ * language.
+ *
+ * @since SmartDeviceLink 1.0
+ */
+ @Deprecated
+ Text,
+
+ /**
+ * The SDL platform is capable of recognizing spoken text in the current
+ * language.
+ *
+ * @since SmartDeviceLink 3.0
+ */
+ TEXT,
+ ;
+
+ public static VrCapabilities valueForString(String value) {
+ if(value == null){
+ return null;
+ }
+
+ if (value.equalsIgnoreCase(TEXT.toString()))
+ {
+ return TEXT;
+ }
+
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WarningLightStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WarningLightStatus.java
new file mode 100644
index 000000000..3d002e651
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WarningLightStatus.java
@@ -0,0 +1,34 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+/**
+ * Reflects the status of a cluster instrument warning light.
+ * @since SmartDeviceLink 2.0
+ */
+public enum WarningLightStatus {
+ /**
+ * Warninglight Off
+ */
+ OFF,
+ /**
+ * Warninglight On
+ */
+ ON,
+ /**
+ * Warninglight is flashing
+ */
+ FLASH,
+ NOT_USED;
+
+ /**
+ * Convert String to WarningLightStatus
+ * @param value String
+ * @return WarningLightStatus
+ */
+ public static WarningLightStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WayPointType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WayPointType.java
new file mode 100644
index 000000000..120facaef
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WayPointType.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum WayPointType {
+ ALL,
+ DESTINATION,
+ ;
+
+ public static WayPointType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WiperStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WiperStatus.java
new file mode 100644
index 000000000..546cf05b5
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/WiperStatus.java
@@ -0,0 +1,98 @@
+package com.smartdevicelink.proxy.rpc.enums;
+/** This enumeration reflects the status of the wipers.
+ *
+ * @since SmartDeviceLink 2.0
+ *
+ * @see GetVehicleData
+ * @see OnVehicleData
+ */
+
+public enum WiperStatus {
+ /** The wipers are off.
+ *
+ */
+
+ OFF,
+ /** The wipers are automatically off after detecting the wipers do not need to be engaged (rain stopped, etc.).
+ *
+ */
+
+ AUTO_OFF,
+ /** Means that though set to off, somehow the wipers have been engaged (physically moved enough to engage a wiping motion).
+ *
+ */
+
+ OFF_MOVING,
+ /** The wipers are manually off after having been working.
+ *
+ */
+
+ MAN_INT_OFF,
+ /** The wipers are manually on.
+ *
+ */
+
+ MAN_INT_ON,
+ /** The wipers are manually set to low speed.
+ *
+ */
+
+ MAN_LOW,
+ /** The wipers are manually set to high speed.
+ *
+ */
+
+ MAN_HIGH,
+ /** The wipers are manually set for doing a flick.
+ *
+ */
+
+ MAN_FLICK,
+ /** The wipers are set to use the water from vehicle washer bottle for cleaning the windscreen.
+ *
+ */
+
+ WASH,
+ /** The wipers are automatically set to low speed.
+ *
+ */
+
+ AUTO_LOW,
+ /** The wipers are automatically set to high speed.
+ *
+ */
+
+ AUTO_HIGH,
+ /** This is for when a user has just initiated a WASH and several seconds later a secondary wipe is automatically initiated to clear remaining fluid
+ */
+
+ COURTESYWIPE,
+ /** This is set as the user moves between possible automatic wiper speeds.
+ *
+ */
+
+ AUTO_ADJUST,
+ /** The wiper is stalled to its place. There may be an obstruction.
+ *
+ */
+
+ STALLED,
+ /** The sensor / module cannot provide any information for wiper.
+ *
+ */
+
+ NO_DATA_EXISTS;
+ /**
+ * Convert String to WiperStatus
+ * @param value String
+ * @return WiperStatus
+ */
+
+ public static WiperStatus valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnMultipleRequestListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnMultipleRequestListener.java
new file mode 100644
index 000000000..a8e9f31b8
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnMultipleRequestListener.java
@@ -0,0 +1,60 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+import java.util.Vector;
+
+/**
+ * This is the listener for sending Multiple RPCs.
+ */
+public abstract class OnMultipleRequestListener extends OnRPCResponseListener {
+
+ final Vector<Integer> correlationIds;
+ OnRPCResponseListener rpcResponseListener;
+ private static String TAG = "OnMultipleRequestListener";
+
+ public OnMultipleRequestListener(){
+ setListenerType(UPDATE_LISTENER_TYPE_MULTIPLE_REQUESTS);
+ correlationIds = new Vector<>();
+
+ rpcResponseListener = new OnRPCResponseListener() {
+ @Override
+ public void onResponse(int correlationId, RPCResponse response) {
+ OnMultipleRequestListener.this.onResponse(correlationId, response);
+ update(correlationId);
+ }
+
+ @Override
+ public void onError(int correlationId, Result resultCode, String info) {
+ super.onError(correlationId, resultCode, info);
+ OnMultipleRequestListener.this.onError(correlationId, resultCode, info);
+ update(correlationId);
+ }
+
+ private synchronized void update(int correlationId){
+ correlationIds.remove(Integer.valueOf(correlationId));
+ if(correlationIds.size()>0){
+ onUpdate(correlationIds.size());
+ }else{
+ onFinished();
+ }
+ }
+ };
+ }
+
+ public void addCorrelationId(int correlationid){
+ correlationIds.add(correlationid);
+ }
+ /**
+ * onUpdate is called during multiple stream request
+ * @param remainingRequests of the original request
+ */
+ public abstract void onUpdate(int remainingRequests);
+ public abstract void onFinished();
+ public abstract void onError(int correlationId, Result resultCode, String info);
+
+ public OnRPCResponseListener getSingleRpcResponseListener(){
+ return rpcResponseListener;
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnPutFileUpdateListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnPutFileUpdateListener.java
new file mode 100644
index 000000000..1a8e4f35f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnPutFileUpdateListener.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCResponse;
+
+public abstract class OnPutFileUpdateListener extends OnRPCResponseListener{
+
+ long totalSize = 0;
+
+ public OnPutFileUpdateListener(){
+ setListenerType(UPDATE_LISTENER_TYPE_PUT_FILE);
+ }
+
+ @Override
+ public final void onStart(int correlationId) {
+ super.onStart(correlationId);
+ onStart(correlationId, totalSize); //We do this so we can send back the total size
+ }
+
+ public void onStart(int correlationId, long totalSize){
+
+ }
+
+ @Override
+ public final void onResponse(int correlationId, RPCResponse response) {
+ onResponse(correlationId, response, totalSize); //Calling our special abstract method
+ }
+ /**
+ * Called when the putfile request is responded to.
+ * @param correlationId
+ * @param message
+ * @param totalSize
+ */
+ public abstract void onResponse(int correlationId, RPCResponse response, long totalSize);
+
+ /**
+ * onUpdate is called during a putfile stream request
+ * @param correlationId of the original request
+ * @param bytesWritten
+ * @param totalSize
+ */
+ public void onUpdate(int correlationId, long bytesWritten, long totalSize){
+
+ };
+
+ public final void setTotalSize(long totalSize){
+ this.totalSize = totalSize;
+ }
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCListener.java
new file mode 100644
index 000000000..8de606b7c
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCListener.java
@@ -0,0 +1,55 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCMessage;
+
+public abstract class OnRPCListener {
+
+ /**
+ * Generic listener for all RPCs including Requests, response, and notificaiton
+ */
+ public final static int UPDATE_LISTENER_TYPE_ALL_RPCS = -1;
+
+ /**
+ * Generic listener type that will work for most RPCs
+ */
+ public final static int UPDATE_LISTENER_TYPE_BASE_RPC = 0;
+ /**
+ * Listener type specific to putfile
+ */
+ public final static int UPDATE_LISTENER_TYPE_PUT_FILE = 1;
+ /**
+ * Listener type specific to sendRequests and sendSequentialRequests
+ */
+ public final static int UPDATE_LISTENER_TYPE_MULTIPLE_REQUESTS = 2;
+
+ /**
+ * Stores what type of listener this instance is. This prevents of from having to use reflection
+ */
+ int listenerType;
+
+ /**
+ * This is the base listener for all RPCs.
+ */
+ public OnRPCListener(){
+ setListenerType(UPDATE_LISTENER_TYPE_ALL_RPCS);
+ }
+
+ protected final void setListenerType(int type){
+ this.listenerType = type;
+ }
+ /**
+ * This is used to see what type of listener this instance is. It is needed
+ * because some RPCs require additional callbacks. Types are constants located in this class
+ * @return the type of listener this is
+ */
+ public int getListenerType(){
+ return this.listenerType;
+ }
+
+ /**
+ * This is the only method that must be extended.
+ * @param message This will be the response message received from the core side. It should be cast into a corresponding RPC Response type. ie, if setting this
+ * for a PutFile request, the message parameter should be cast to a PutFileResponse class.
+ */
+ public abstract void onReceived(final RPCMessage message);
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCNotificationListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCNotificationListener.java
new file mode 100644
index 000000000..e760618b1
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCNotificationListener.java
@@ -0,0 +1,8 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCNotification;
+
+public abstract class OnRPCNotificationListener {
+
+ public abstract void onNotified(RPCNotification notification);
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCRequestListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCRequestListener.java
new file mode 100644
index 000000000..df3f4bc3f
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCRequestListener.java
@@ -0,0 +1,19 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCMessage;
+import com.smartdevicelink.proxy.RPCRequest;
+
+public abstract class OnRPCRequestListener extends OnRPCListener {
+
+ public final void onReceived(final RPCMessage message){
+ if (message instanceof RPCRequest){
+ onRequest((RPCRequest)message);
+ }
+ }
+
+ /**
+ * @param request - The incoming RPC Request
+ */
+ public abstract void onRequest(final RPCRequest request);
+
+}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCResponseListener.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCResponseListener.java
new file mode 100644
index 000000000..2c40fe0df
--- /dev/null
+++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/listeners/OnRPCResponseListener.java
@@ -0,0 +1,53 @@
+package com.smartdevicelink.proxy.rpc.listeners;
+
+import com.smartdevicelink.proxy.RPCMessage;
+import com.smartdevicelink.proxy.RPCResponse;
+import com.smartdevicelink.proxy.rpc.enums.Result;
+
+public abstract class OnRPCResponseListener extends OnRPCListener {
+
+
+ public OnRPCResponseListener(){
+ setListenerType(OnRPCListener.UPDATE_LISTENER_TYPE_BASE_RPC);
+ }
+
+ public final void onReceived(final RPCMessage message){
+ if (message != null && message instanceof RPCResponse){
+ onResponse(((RPCResponse) message).getCorrelationID(), (RPCResponse)message);
+ }
+ }
+
+ /* *****************************************************************
+ ************************* Event Callbacks *************************
+ *******************************************************************/
+
+ /**
+ * This method will be called once the packet has been entered into the queue of messages to send
+ * @param correlationId
+ */
+ public void onStart(int correlationId){
+
+ };
+
+ /**
+ * This is the only method that must be extended. Other methods that are able to be extended are
+ * onStart and onError.
+ * @param correlationId
+ * @param response This will be the response message received from the core side. It should be cast into a corresponding RPC Response type. ie, if setting this
+ * for a PutFile request, the message parameter should be cast to a PutFileResponse class.
+ */
+ public abstract void onResponse(int correlationId, final RPCResponse response);
+
+ /**
+ * Called when there was some sort of error during the original request.
+ * @param correlationId
+ * @param resultCode
+ * @param info
+ */
+ public void onError(int correlationId, Result resultCode, String info){
+
+ };
+
+
+
+}