• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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  */
16 
17 package com.android.car.hal.test;
18 
19 import android.annotation.CheckResult;
20 import android.hardware.automotive.vehicle.VehicleAreaConfig;
21 import android.hardware.automotive.vehicle.VehiclePropConfig;
22 import android.hardware.automotive.vehicle.VehiclePropertyAccess;
23 import android.hardware.automotive.vehicle.VehiclePropertyChangeMode;
24 import android.os.Parcel;
25 
26 import java.util.Collection;
27 
28 /**
29  * A builder class for {@link android.hardware.automotive.vehicle.VehiclePropConfig}
30  */
31 public final class AidlVehiclePropConfigBuilder {
32 
33     private final VehiclePropConfig mConfig;
34 
AidlVehiclePropConfigBuilder(VehiclePropConfig propConfig)35     private AidlVehiclePropConfigBuilder(VehiclePropConfig propConfig) {
36         mConfig = clone(propConfig);
37     }
38 
AidlVehiclePropConfigBuilder(int propId)39     private AidlVehiclePropConfigBuilder(int propId) {
40         mConfig = new VehiclePropConfig();
41         mConfig.prop = propId;
42         mConfig.access = VehiclePropertyAccess.READ_WRITE;
43         mConfig.changeMode = VehiclePropertyChangeMode.ON_CHANGE;
44         mConfig.configArray = new int[0];
45         mConfig.areaConfigs = new VehicleAreaConfig[0];
46     }
47 
clone(VehiclePropConfig propConfig)48     private VehiclePropConfig clone(VehiclePropConfig propConfig) {
49         VehiclePropConfig newConfig = new VehiclePropConfig();
50 
51         newConfig.prop = propConfig.prop;
52         newConfig.access = propConfig.access;
53         newConfig.changeMode = propConfig.changeMode;
54         newConfig.configString = propConfig.configString;
55         newConfig.minSampleRate = propConfig.minSampleRate;
56         newConfig.maxSampleRate = propConfig.maxSampleRate;
57         newConfig.configArray = propConfig.configArray.clone();
58         newConfig.areaConfigs = new VehicleAreaConfig[propConfig.areaConfigs.length];
59         newConfig.areaConfigs = duplicateAreaConfig(propConfig.areaConfigs);
60         return newConfig;
61     }
62 
63     /**
64      * Adds an area config.
65      */
66     @CheckResult
addAreaConfig(VehicleAreaConfig config)67     public AidlVehiclePropConfigBuilder addAreaConfig(VehicleAreaConfig config) {
68         int oldLength = mConfig.areaConfigs.length;
69         VehicleAreaConfig[] newConfigs = duplicateAreaConfig(mConfig.areaConfigs, oldLength + 1);
70         newConfigs[oldLength] = config;
71         mConfig.areaConfigs = newConfigs;
72         return this;
73     }
74 
75     @CheckResult
setAccess(int access)76     public AidlVehiclePropConfigBuilder setAccess(int access) {
77         mConfig.access = access;
78         for (VehicleAreaConfig areaConfig : mConfig.areaConfigs) {
79             areaConfig.access = access;
80         }
81         return this;
82     }
83 
84     @CheckResult
setAccessPerAreaId(int access, int areaId)85     public AidlVehiclePropConfigBuilder setAccessPerAreaId(int access, int areaId) {
86         for (VehicleAreaConfig areaConfig : mConfig.areaConfigs) {
87             if (areaConfig.areaId == areaId) {
88                 areaConfig.access = access;
89                 break;
90             }
91         }
92         return this;
93     }
94 
95     @CheckResult
setChangeMode(int changeMode)96     public AidlVehiclePropConfigBuilder setChangeMode(int changeMode) {
97         mConfig.changeMode = changeMode;
98         return this;
99     }
100 
101     @CheckResult
setMaxSampleRate(float maxSampleRate)102     public AidlVehiclePropConfigBuilder setMaxSampleRate(float maxSampleRate) {
103         mConfig.maxSampleRate = maxSampleRate;
104         return this;
105     }
106 
107     @CheckResult
setMinSampleRate(float minSampleRate)108     public AidlVehiclePropConfigBuilder setMinSampleRate(float minSampleRate) {
109         mConfig.minSampleRate = minSampleRate;
110         return this;
111     }
112 
113     @CheckResult
setConfigString(String configString)114     public AidlVehiclePropConfigBuilder setConfigString(String configString) {
115         mConfig.configString = configString;
116         return this;
117     }
118 
119 
120     @CheckResult
setConfigArray(Collection<Integer> configArray)121     public AidlVehiclePropConfigBuilder setConfigArray(Collection<Integer> configArray) {
122         mConfig.configArray = new int[configArray.size()];
123         int i = 0;
124         for (int value : configArray) {
125             mConfig.configArray[i] = value;
126             i++;
127         }
128         return this;
129     }
130 
131     @CheckResult
addAreaConfig(int areaId)132     public AidlVehiclePropConfigBuilder addAreaConfig(int areaId) {
133         VehicleAreaConfig area = new VehicleAreaConfig();
134         area.areaId = areaId;
135         area.access = mConfig.access;
136         return addAreaConfig(area);
137     }
138 
139     @CheckResult
addAreaConfig(int areaId, int minValue, int maxValue)140     public AidlVehiclePropConfigBuilder addAreaConfig(int areaId, int minValue, int maxValue) {
141         VehicleAreaConfig area = new VehicleAreaConfig();
142         area.areaId = areaId;
143         area.access = mConfig.access;
144         area.minInt32Value = minValue;
145         area.maxInt32Value = maxValue;
146         return addAreaConfig(area);
147     }
148 
149     @CheckResult
addAreaConfig(int areaId, float minValue, float maxValue)150     public AidlVehiclePropConfigBuilder addAreaConfig(int areaId, float minValue, float maxValue) {
151         VehicleAreaConfig area = new VehicleAreaConfig();
152         area.areaId = areaId;
153         area.access = mConfig.access;
154         area.minFloatValue = minValue;
155         area.maxFloatValue = maxValue;
156         return addAreaConfig(area);
157     }
158 
159     @CheckResult
addAreaConfig(int areaId, int access)160     public  AidlVehiclePropConfigBuilder addAreaConfig(int areaId, int access) {
161         VehicleAreaConfig area = new VehicleAreaConfig();
162         area.areaId = areaId;
163         area.access = access;
164         return addAreaConfig(area);
165     }
166 
167     @CheckResult
addAreaConfig(int areaId, int access, int minValue, int maxValue)168     public AidlVehiclePropConfigBuilder addAreaConfig(int areaId, int access,
169                                                       int minValue, int maxValue) {
170         VehicleAreaConfig area = new VehicleAreaConfig();
171         area.areaId = areaId;
172         area.access = access;
173         area.minInt32Value = minValue;
174         area.maxInt32Value = maxValue;
175         return addAreaConfig(area);
176     }
177 
178     @CheckResult
addAreaConfig(int areaId, int access, float minValue, float maxValue)179     public AidlVehiclePropConfigBuilder addAreaConfig(int areaId, int access,
180                                                       float minValue, float maxValue) {
181         VehicleAreaConfig area = new VehicleAreaConfig();
182         area.areaId = areaId;
183         area.access = access;
184         area.minFloatValue = minValue;
185         area.maxFloatValue = maxValue;
186         return addAreaConfig(area);
187     }
188 
build()189     public VehiclePropConfig build() {
190         return clone(mConfig);
191     }
192 
duplicateAreaConfig(VehicleAreaConfig[] areaConfigs)193     private static VehicleAreaConfig[] duplicateAreaConfig(VehicleAreaConfig[] areaConfigs) {
194         return duplicateAreaConfig(areaConfigs, areaConfigs.length);
195     }
196 
duplicateAreaConfig(VehicleAreaConfig[] areaConfigs, int newSize)197     private static VehicleAreaConfig[] duplicateAreaConfig(VehicleAreaConfig[] areaConfigs,
198             int newSize) {
199         VehicleAreaConfig[] out = new VehicleAreaConfig[newSize];
200         int i = 0;
201         for (VehicleAreaConfig area : areaConfigs) {
202             VehicleAreaConfig newArea = new VehicleAreaConfig();
203             Parcel parcel = Parcel.obtain();
204             area.writeToParcel(parcel, /* _aidl_flag= */ 0);
205             parcel.setDataPosition(0);
206             newArea.readFromParcel(parcel);
207             parcel.recycle();
208             out[i] = newArea;
209             i++;
210         }
211         return out;
212     }
213 
214     @CheckResult
newBuilder(int propId)215     public static AidlVehiclePropConfigBuilder newBuilder(int propId) {
216         return new AidlVehiclePropConfigBuilder(propId);
217     }
218 
219     @CheckResult
newBuilder(VehiclePropConfig config)220     public static AidlVehiclePropConfigBuilder newBuilder(VehiclePropConfig config) {
221         return new AidlVehiclePropConfigBuilder(config);
222     }
223 }
224