blob: 68c4d116c01f27cce246bda31b8a90daf3da69a2 [file] [log] [blame]
keunyoungd32f4e62015-09-21 11:33:06 -07001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.car.hal;
17
Keun-young Parke54ac272016-02-16 19:02:18 -080018import android.car.media.CarAudioManager;
keunyoung5c7cb262015-10-19 10:47:45 -070019import android.util.Log;
20
21import com.android.car.AudioRoutingPolicy;
22import com.android.car.CarLog;
23import com.android.car.vehiclenetwork.VehicleNetwork;
keunyoungd32f4e62015-09-21 11:33:06 -070024import com.android.car.vehiclenetwork.VehicleNetworkConsts;
Keun-young Park0727f952015-12-21 14:30:07 -080025import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
keunyounga74b9ca2015-10-21 13:33:58 -070026import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
27import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
keunyoung1ab8e182015-09-24 09:25:22 -070028import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
29import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
keunyounga74b9ca2015-10-21 13:33:58 -070030import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioHwVariantConfigFlag;
keunyoung5c7cb262015-10-19 10:47:45 -070031import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioRoutingPolicyIndex;
keunyoungd32f4e62015-09-21 11:33:06 -070032import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStreamState;
keunyounga74b9ca2015-10-21 13:33:58 -070033import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStreamStateIndex;
34import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioVolumeIndex;
keunyoungd32f4e62015-09-21 11:33:06 -070035import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
keunyoung5c7cb262015-10-19 10:47:45 -070036import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
keunyoungd32f4e62015-09-21 11:33:06 -070037import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
38
39import java.io.PrintWriter;
keunyounga74b9ca2015-10-21 13:33:58 -070040import java.util.HashMap;
keunyoungd32f4e62015-09-21 11:33:06 -070041import java.util.LinkedList;
42import java.util.List;
43
44public class AudioHalService extends HalServiceBase {
45
keunyounga74b9ca2015-10-21 13:33:58 -070046 public static final int VEHICLE_AUDIO_FOCUS_REQUEST_INVALID = -1;
keunyoungd32f4e62015-09-21 11:33:06 -070047 public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN =
keunyoung1ab8e182015-09-24 09:25:22 -070048 VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN;
keunyoungd32f4e62015-09-21 11:33:06 -070049 public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT =
keunyoung1ab8e182015-09-24 09:25:22 -070050 VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT;
keunyoungd32f4e62015-09-21 11:33:06 -070051 public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK =
keunyoung1ab8e182015-09-24 09:25:22 -070052 VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK;
keunyoungd32f4e62015-09-21 11:33:06 -070053 public static final int VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE =
keunyoung1ab8e182015-09-24 09:25:22 -070054 VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE;
keunyoungd32f4e62015-09-21 11:33:06 -070055
56 public static String audioFocusRequestToString(int request) {
keunyoung1ab8e182015-09-24 09:25:22 -070057 return VehicleAudioFocusRequest.enumToString(request);
keunyoungd32f4e62015-09-21 11:33:06 -070058 }
59
keunyounga74b9ca2015-10-21 13:33:58 -070060 public static final int VEHICLE_AUDIO_FOCUS_STATE_INVALID = -1;
keunyoungd32f4e62015-09-21 11:33:06 -070061 public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN =
keunyoung1ab8e182015-09-24 09:25:22 -070062 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN;
keunyoungd32f4e62015-09-21 11:33:06 -070063 public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT =
keunyoung1ab8e182015-09-24 09:25:22 -070064 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
keunyoungd32f4e62015-09-21 11:33:06 -070065 public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK =
keunyoung1ab8e182015-09-24 09:25:22 -070066 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK;
keunyoungd32f4e62015-09-21 11:33:06 -070067 public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT =
keunyoung1ab8e182015-09-24 09:25:22 -070068 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT;
keunyoungd32f4e62015-09-21 11:33:06 -070069 public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS =
keunyoung1ab8e182015-09-24 09:25:22 -070070 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
keunyoungd32f4e62015-09-21 11:33:06 -070071 public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE =
keunyoung1ab8e182015-09-24 09:25:22 -070072 VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE;
keunyoungd32f4e62015-09-21 11:33:06 -070073
74 public static String audioFocusStateToString(int state) {
keunyoung1ab8e182015-09-24 09:25:22 -070075 return VehicleAudioFocusState.enumToString(state);
keunyoungd32f4e62015-09-21 11:33:06 -070076 }
77
78 public static final int VEHICLE_AUDIO_STREAM_STATE_STOPPED =
79 VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STOPPED;
80 public static final int VEHICLE_AUDIO_STREAM_STATE_STARTED =
81 VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STARTED;
82
83 public static String audioStreamStateToString(int state) {
84 return VehicleAudioStreamState.enumToString(state);
85 }
86
keunyounga74b9ca2015-10-21 13:33:58 -070087 public static final int VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG =
88 VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG;
89 public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG =
90 VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG;
91 public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG =
92 VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG;
93 public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG =
94 VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG;
95
keunyoungd32f4e62015-09-21 11:33:06 -070096 public static final int STREAM_NUM_DEFAULT = 0;
97
Keun-young Park1fdf91c2016-01-21 10:17:41 -080098 public static final int FOCUS_STATE_ARRAY_INDEX_STATE = 0;
99 public static final int FOCUS_STATE_ARRAY_INDEX_STREAMS = 1;
100 public static final int FOCUS_STATE_ARRAY_INDEX_EXTERNAL_FOCUS = 2;
101
keunyoungd32f4e62015-09-21 11:33:06 -0700102 public interface AudioHalListener {
keunyounga74b9ca2015-10-21 13:33:58 -0700103 /**
104 * Audio focus change from car.
105 * @param focusState
106 * @param streams
107 * @param externalFocus Flags of active external audio focus.
108 * 0 means no external audio focus.
109 */
110 void onFocusChange(int focusState, int streams, int externalFocus);
111 /**
112 * Audio volume change from car.
113 * @param streamNumber
114 * @param volume
115 * @param volumeState
116 */
keunyoung5c7cb262015-10-19 10:47:45 -0700117 void onVolumeChange(int streamNumber, int volume, int volumeState);
keunyounga74b9ca2015-10-21 13:33:58 -0700118 /**
119 * Volume limit change from car.
120 * @param streamNumber
121 * @param volume
122 */
123 void onVolumeLimitChange(int streamNumber, int volume);
124 /**
125 * Stream state change (start / stop) from android
126 * @param streamNumber
127 * @param state
128 */
keunyoung5c7cb262015-10-19 10:47:45 -0700129 void onStreamStatusChange(int streamNumber, int state);
keunyoungd32f4e62015-09-21 11:33:06 -0700130 }
131
132 private final VehicleHal mVehicleHal;
133 private AudioHalListener mListener;
keunyoung5c7cb262015-10-19 10:47:45 -0700134 private int mVariant;
135
136 private List<VehiclePropValue> mQueuedEvents;
keunyoungd32f4e62015-09-21 11:33:06 -0700137
keunyounga74b9ca2015-10-21 13:33:58 -0700138 private final HashMap<Integer, VehiclePropConfig> mProperties = new HashMap<>();
139
keunyoungd32f4e62015-09-21 11:33:06 -0700140 public AudioHalService(VehicleHal vehicleHal) {
141 mVehicleHal = vehicleHal;
142 }
143
keunyoung5c7cb262015-10-19 10:47:45 -0700144 public void setListener(AudioHalListener listener) {
145 List<VehiclePropValue> eventsToDispatch = null;
146 synchronized (this) {
147 mListener = listener;
148 if (mQueuedEvents != null) {
149 eventsToDispatch = mQueuedEvents;
150 mQueuedEvents = null;
151 }
152 }
153 if (eventsToDispatch != null) {
154 dispatchEventToListener(listener, eventsToDispatch);
155 }
156 }
157
158 public void setAudioRoutingPolicy(AudioRoutingPolicy policy) {
159 VehicleNetwork vn = mVehicleHal.getVehicleNetwork();
160 VehiclePropConfigs configs = vn.listProperties(
161 VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY);
162 if (configs == null) {
163 Log.w(CarLog.TAG_AUDIO,
164 "Vehicle HAL did not implement VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY");
165 return;
166 }
167 int[] policyToSet = new int[2];
168 for (int i = 0; i < policy.getPhysicalStreamsCount(); i++) {
169 policyToSet[VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM] =
170 i;
171 int streams = 0;
172 for (int logicalStream : policy.getLogicalStreamsForPhysicalStream(i)) {
173 streams |= logicalStreamToHalStreamType(logicalStream);
174 }
175 policyToSet[VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS]
176 = streams;
177 vn.setIntVectorProperty(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
178 policyToSet);
179 }
180 }
181
182 private static int logicalStreamToHalStreamType(int logicalStream) {
183 switch (logicalStream) {
Keun-young Park5672e852016-02-09 19:53:48 -0800184 case CarAudioManager.CAR_AUDIO_USAGE_VOICE_CALL:
Keun-young Park0727f952015-12-21 14:30:07 -0800185 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800186 case CarAudioManager.CAR_AUDIO_USAGE_MUSIC:
Keun-young Park0727f952015-12-21 14:30:07 -0800187 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800188 case CarAudioManager.CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE:
Keun-young Park0727f952015-12-21 14:30:07 -0800189 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800190 case CarAudioManager.CAR_AUDIO_USAGE_VOICE_COMMAND:
Keun-young Park0727f952015-12-21 14:30:07 -0800191 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800192 case CarAudioManager.CAR_AUDIO_USAGE_ALARM:
Keun-young Park0727f952015-12-21 14:30:07 -0800193 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800194 case CarAudioManager.CAR_AUDIO_USAGE_NOTIFICATION:
Keun-young Park0727f952015-12-21 14:30:07 -0800195 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG;
Keun-young Park5672e852016-02-09 19:53:48 -0800196 case CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT:
197 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG;
198 case CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SOUND:
199 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND;
200 case CarAudioManager.CAR_AUDIO_USAGE_DEFAULT:
Keun-young Park0727f952015-12-21 14:30:07 -0800201 return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG;
keunyoung5c7cb262015-10-19 10:47:45 -0700202 default:
203 Log.w(CarLog.TAG_AUDIO, "Unknown logical stream:" + logicalStream);
204 return 0;
205 }
keunyoungd32f4e62015-09-21 11:33:06 -0700206 }
207
Keun-young Park1fdf91c2016-01-21 10:17:41 -0800208 public void requestAudioFocusChange(int request, int streams) {
keunyounga74b9ca2015-10-21 13:33:58 -0700209 requestAudioFocusChange(request, streams, VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
210 }
211
Keun-young Park1fdf91c2016-01-21 10:17:41 -0800212 public void requestAudioFocusChange(int request, int streams, int extFocus) {
keunyounga74b9ca2015-10-21 13:33:58 -0700213 int[] payload = { request, streams, extFocus };
keunyoungd32f4e62015-09-21 11:33:06 -0700214 mVehicleHal.getVehicleNetwork().setIntVectorProperty(
215 VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, payload);
216 }
217
keunyoung5c7cb262015-10-19 10:47:45 -0700218 public synchronized int getHwVariant() {
219 return mVariant;
220 }
221
keunyounga74b9ca2015-10-21 13:33:58 -0700222 public synchronized boolean isRadioExternal() {
223 VehiclePropConfig config = mProperties.get(
224 VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
225 if (config == null) {
226 return true;
227 }
Keun-young Park0727f952015-12-21 14:30:07 -0800228 return (config.getConfigArray(0) &
keunyounga74b9ca2015-10-21 13:33:58 -0700229 VehicleAudioHwVariantConfigFlag.VEHICLE_AUDIO_HW_VARIANT_FLAG_PASS_RADIO_AUDIO_FOCUS_FLAG)
230 == 0;
231 }
232
233 public synchronized boolean isFocusSupported() {
234 return isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS);
235 }
236
Keun-young Park1fdf91c2016-01-21 10:17:41 -0800237 /**
238 * Get the current audio focus state.
239 * @return 0: focusState, 1: streams, 2: externalFocus
240 */
241 public int[] getCurrentFocusState() {
242 if (!isFocusSupported()) {
243 return new int[] { VEHICLE_AUDIO_FOCUS_STATE_GAIN, 0xffffffff, 0};
244 }
245 return mVehicleHal.getVehicleNetwork().getIntVectorProperty(
246 VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS);
247 }
248
keunyounga74b9ca2015-10-21 13:33:58 -0700249 private boolean isPropertySupportedLocked(int property) {
250 VehiclePropConfig config = mProperties.get(property);
251 return config != null;
252 }
253
keunyoungd32f4e62015-09-21 11:33:06 -0700254 @Override
255 public synchronized void init() {
keunyounga74b9ca2015-10-21 13:33:58 -0700256 for (VehiclePropConfig config : mProperties.values()) {
257 if (VehicleHal.isPropertySubscribable(config)) {
258 mVehicleHal.subscribeProperty(this, config.getProp(), 0);
keunyoung5c7cb262015-10-19 10:47:45 -0700259 }
260 }
261 try {
262 mVariant = mVehicleHal.getVehicleNetwork().getIntProperty(
263 VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
264 } catch (IllegalArgumentException e) {
265 // no variant. Set to default, 0.
266 mVariant = 0;
keunyoungd32f4e62015-09-21 11:33:06 -0700267 }
268 }
269
270 @Override
271 public synchronized void release() {
keunyounga74b9ca2015-10-21 13:33:58 -0700272 for (VehiclePropConfig config : mProperties.values()) {
273 if (VehicleHal.isPropertySubscribable(config)) {
274 mVehicleHal.unsubscribeProperty(this, config.getProp());
keunyoung5c7cb262015-10-19 10:47:45 -0700275 }
keunyoungd32f4e62015-09-21 11:33:06 -0700276 }
keunyounga74b9ca2015-10-21 13:33:58 -0700277 mProperties.clear();
keunyoungd32f4e62015-09-21 11:33:06 -0700278 }
279
280 @Override
281 public synchronized List<VehiclePropConfig> takeSupportedProperties(
282 List<VehiclePropConfig> allProperties) {
keunyoungd32f4e62015-09-21 11:33:06 -0700283 for (VehiclePropConfig p : allProperties) {
284 switch (p.getProp()) {
285 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS:
keunyoungd32f4e62015-09-21 11:33:06 -0700286 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME:
keunyoung5c7cb262015-10-19 10:47:45 -0700287 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT:
keunyoung5c7cb262015-10-19 10:47:45 -0700288 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT:
keunyoungd32f4e62015-09-21 11:33:06 -0700289 case VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE:
keunyounga74b9ca2015-10-21 13:33:58 -0700290 mProperties.put(p.getProp(), p);
keunyoungd32f4e62015-09-21 11:33:06 -0700291 break;
292 }
293 }
keunyounga74b9ca2015-10-21 13:33:58 -0700294 return new LinkedList<VehiclePropConfig>(mProperties.values());
keunyoungd32f4e62015-09-21 11:33:06 -0700295 }
296
297 @Override
298 public void handleHalEvents(List<VehiclePropValue> values) {
299 AudioHalListener listener = null;
300 synchronized (this) {
301 listener = mListener;
keunyoung5c7cb262015-10-19 10:47:45 -0700302 if (listener == null) {
303 if (mQueuedEvents == null) {
304 mQueuedEvents = new LinkedList<VehiclePropValue>();
305 }
306 mQueuedEvents.addAll(values);
307 }
keunyoungd32f4e62015-09-21 11:33:06 -0700308 }
keunyoung5c7cb262015-10-19 10:47:45 -0700309 if (listener != null) {
310 dispatchEventToListener(listener, values);
keunyoungd32f4e62015-09-21 11:33:06 -0700311 }
keunyoung5c7cb262015-10-19 10:47:45 -0700312 }
313
314 private void dispatchEventToListener(AudioHalListener listener, List<VehiclePropValue> values) {
keunyoungd32f4e62015-09-21 11:33:06 -0700315 for (VehiclePropValue v : values) {
316 switch (v.getProp()) {
317 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS: {
keunyounga74b9ca2015-10-21 13:33:58 -0700318 int focusState = v.getInt32Values(
319 VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
320 int streams = v.getInt32Values(
321 VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
322 int externalFocus = v.getInt32Values(
323 VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
324 listener.onFocusChange(focusState, streams, externalFocus);
keunyoungd32f4e62015-09-21 11:33:06 -0700325 } break;
326 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME: {
keunyounga74b9ca2015-10-21 13:33:58 -0700327 int volume = v.getInt32Values(
328 VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_VOLUME);
329 int streamNum = v.getInt32Values(
330 VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
331 int volumeState = v.getInt32Values(
332 VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STATE);
keunyoung5c7cb262015-10-19 10:47:45 -0700333 listener.onVolumeChange(streamNum, volume, volumeState);
334 } break;
335 case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: {
336 //TODO
keunyoungd32f4e62015-09-21 11:33:06 -0700337 } break;
338 case VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: {
keunyounga74b9ca2015-10-21 13:33:58 -0700339 int state = v.getInt32Values(
340 VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE);
341 int streamNum = v.getInt32Values(
342 VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM);
keunyoung5c7cb262015-10-19 10:47:45 -0700343 listener.onStreamStatusChange(streamNum, state);
keunyoungd32f4e62015-09-21 11:33:06 -0700344 } break;
345 }
346 }
347 }
348
349 @Override
350 public void dump(PrintWriter writer) {
keunyoung5c7cb262015-10-19 10:47:45 -0700351 writer.println("*Audio HAL*");
352 writer.println(" audio H/W variant:" + mVariant);
keunyounga74b9ca2015-10-21 13:33:58 -0700353 writer.println(" Supported properties");
354 VehicleHal.dumpProperties(writer, mProperties.values());
keunyoungd32f4e62015-09-21 11:33:06 -0700355 }
356
357}