1cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung/* 2cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Copyright (C) 2015 The Android Open Source Project 3cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * 4cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Licensed under the Apache License, Version 2.0 (the "License"); 5cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * you may not use this file except in compliance with the License. 6cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * You may obtain a copy of the License at 7cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * 8cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * http://www.apache.org/licenses/LICENSE-2.0 9cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * 10cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Unless required by applicable law or agreed to in writing, software 11cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * distributed under the License is distributed on an "AS IS" BASIS, 12cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * See the License for the specific language governing permissions and 14cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * limitations under the License. 15cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung */ 16cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 17cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoungpackage com.android.car.hal; 18cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 190d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev 200d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsevimport android.annotation.Nullable; 21cfe93105f637c2822da113308f113ed418d0b319Pavel Maltsevimport android.hardware.automotive.vehicle.V2_0.VehiclePropConfig; 22cfe93105f637c2822da113308f113ed418d0b319Pavel Maltsevimport android.hardware.automotive.vehicle.V2_0.VehiclePropValue; 23fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung 24cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoungimport java.io.PrintWriter; 250d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsevimport java.util.Collection; 26fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoungimport java.util.LinkedList; 27cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoungimport java.util.List; 28cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 29cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung/** 30cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Common interface for all HAL service like sensor HAL. 31cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Each HAL service is connected with XyzService supporting XyzManager, 32cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * and will translate HAL data into car api specific format. 33cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung */ 34cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoungpublic abstract class HalServiceBase { 35fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung /** For dispatching events. Kept here to avoid alloc every time */ 36fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung private final LinkedList<VehiclePropValue> mDispatchList = new LinkedList<VehiclePropValue>(); 37fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung 381e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev final static int NOT_SUPPORTED_PROPERTY = -1; 391e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 40fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung public List<VehiclePropValue> getDispatchList() { 41fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung return mDispatchList; 42fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung } 43fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung 44cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung /** initialize */ 45cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung public abstract void init(); 46cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 47cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung /** release and stop operation */ 48cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung public abstract void release(); 49cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 50cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung /** 51cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * return supported properties among all properties. 52cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * @return null if no properties are supported 53cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung */ 54cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung /** 55cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * Take supported properties from given allProperties and return List of supported properties. 56cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * @param allProperties 57cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung * @return null if no properties are supported. 58cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung */ 590d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev @Nullable 600d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev public Collection<VehiclePropConfig> takeSupportedProperties( 610d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev Collection<VehiclePropConfig> allProperties) { 620d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev return null; 630d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev } 64cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 65fe30ba00aec2fd5936b17439f392a053ec54ec9akeunyoung public abstract void handleHalEvents(List<VehiclePropValue> values); 66cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung 672a8c56d61fda68c06513ed0cdcbb64fff7e02304Pavel Maltsev public void handlePropertySetError(int property, int area) {} 682a8c56d61fda68c06513ed0cdcbb64fff7e02304Pavel Maltsev 69cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung public abstract void dump(PrintWriter writer); 701e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 711e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev /** 721e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * Helper class that maintains bi-directional mapping between manager's property 731e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * Id (public or system API) and vehicle HAL property Id. 741e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * 751e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * <p>This class is supposed to be immutable. Use {@link #create(int[])} factory method to 761e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * instantiate this class. 771e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev */ 781e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev static class ManagerToHalPropIdMap { 791e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev private final BidirectionalSparseIntArray mMap; 801e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 811e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev /** 821e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * Creates {@link ManagerToHalPropIdMap} for provided [manager prop Id, hal prop Id] pairs. 831e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * 841e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev * <p> The input array should have an odd number of elements. 851e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev */ 861e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev static ManagerToHalPropIdMap create(int... mgrToHalPropIds) { 871e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev return new ManagerToHalPropIdMap(BidirectionalSparseIntArray.create(mgrToHalPropIds)); 881e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev } 891e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 901e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev private ManagerToHalPropIdMap(BidirectionalSparseIntArray map) { 911e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev mMap = map; 921e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev } 931e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 941e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev int getHalPropId(int managerPropId) { 951e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev return mMap.getValue(managerPropId, NOT_SUPPORTED_PROPERTY); 961e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev } 971e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev 981e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev int getManagerPropId(int halPropId) { 991e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev return mMap.getKey(halPropId, NOT_SUPPORTED_PROPERTY); 1001e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev } 1011e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev } 102cc449f7941456a0133ff8a4b2e49737f0936c1d0keunyoung} 103