1 /*
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  */
16 
17 package com.android.car.hal;
18 
19 
20 import android.annotation.Nullable;
21 import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
22 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
23 
24 import java.io.PrintWriter;
25 import java.util.Collection;
26 import java.util.LinkedList;
27 import java.util.List;
28 
29 /**
30  * Common interface for all HAL service like sensor HAL.
31  * Each HAL service is connected with XyzService supporting XyzManager,
32  * and will translate HAL data into car api specific format.
33  */
34 public abstract class HalServiceBase {
35     /** For dispatching events. Kept here to avoid alloc every time */
36     private final LinkedList<VehiclePropValue> mDispatchList = new LinkedList<VehiclePropValue>();
37 
38     final static int NOT_SUPPORTED_PROPERTY = -1;
39 
getDispatchList()40     public List<VehiclePropValue> getDispatchList() {
41         return mDispatchList;
42     }
43 
44     /** initialize */
init()45     public abstract void init();
46 
47     /** release and stop operation */
release()48     public abstract void release();
49 
50     /**
51      * return supported properties among all properties.
52      * @return null if no properties are supported
53      */
54     /**
55      * Take supported properties from given allProperties and return List of supported properties.
56      * @param allProperties
57      * @return null if no properties are supported.
58      */
59     @Nullable
takeSupportedProperties( Collection<VehiclePropConfig> allProperties)60     public Collection<VehiclePropConfig> takeSupportedProperties(
61             Collection<VehiclePropConfig> allProperties) {
62         return null;
63     }
64 
handleHalEvents(List<VehiclePropValue> values)65     public abstract void handleHalEvents(List<VehiclePropValue> values);
66 
handlePropertySetError(int property, int area)67     public void handlePropertySetError(int property, int area) {}
68 
dump(PrintWriter writer)69     public abstract void dump(PrintWriter writer);
70 
71     /**
72      * Helper class that maintains bi-directional mapping between manager's property
73      * Id (public or system API) and vehicle HAL property Id.
74      *
75      * <p>This class is supposed to be immutable. Use {@link #create(int[])} factory method to
76      * instantiate this class.
77      */
78     static class ManagerToHalPropIdMap {
79         private final BidirectionalSparseIntArray mMap;
80 
81         /**
82          * Creates {@link ManagerToHalPropIdMap} for provided [manager prop Id, hal prop Id] pairs.
83          *
84          * <p> The input array should have an odd number of elements.
85          */
create(int... mgrToHalPropIds)86         static ManagerToHalPropIdMap create(int... mgrToHalPropIds) {
87             return new ManagerToHalPropIdMap(BidirectionalSparseIntArray.create(mgrToHalPropIds));
88         }
89 
ManagerToHalPropIdMap(BidirectionalSparseIntArray map)90         private ManagerToHalPropIdMap(BidirectionalSparseIntArray map) {
91             mMap = map;
92         }
93 
getHalPropId(int managerPropId)94         int getHalPropId(int managerPropId) {
95             return mMap.getValue(managerPropId, NOT_SUPPORTED_PROPERTY);
96         }
97 
getManagerPropId(int halPropId)98         int getManagerPropId(int halPropId) {
99             return mMap.getKey(halPropId, NOT_SUPPORTED_PROPERTY);
100         }
101     }
102 }
103