1 /*
2  * Copyright (C) 2013 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 android.hardware;
18 
19 import android.hardware.ICamera;
20 import android.hardware.ICameraClient;
21 import android.hardware.camera2.ICameraDeviceUser;
22 import android.hardware.camera2.ICameraDeviceCallbacks;
23 import android.hardware.camera2.params.VendorTagDescriptor;
24 import android.hardware.camera2.params.VendorTagDescriptorCache;
25 import android.hardware.camera2.impl.CameraMetadataNative;
26 import android.hardware.ICameraServiceListener;
27 import android.hardware.CameraInfo;
28 import android.hardware.CameraStatus;
29 
30 /**
31  * Binder interface for the native camera service running in mediaserver.
32  *
33  * @hide
34  */
35 interface ICameraService
36 {
37     /**
38      * All camera service and device Binder calls may return a
39      * ServiceSpecificException with the following error codes
40      */
41     const int ERROR_PERMISSION_DENIED = 1;
42     const int ERROR_ALREADY_EXISTS = 2;
43     const int ERROR_ILLEGAL_ARGUMENT = 3;
44     const int ERROR_DISCONNECTED = 4;
45     const int ERROR_TIMED_OUT = 5;
46     const int ERROR_DISABLED = 6;
47     const int ERROR_CAMERA_IN_USE = 7;
48     const int ERROR_MAX_CAMERAS_IN_USE = 8;
49     const int ERROR_DEPRECATED_HAL = 9;
50     const int ERROR_INVALID_OPERATION = 10;
51 
52     /**
53      * Types for getNumberOfCameras
54      */
55     const int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0;
56     const int CAMERA_TYPE_ALL = 1;
57 
58     /**
59      * Return the number of camera devices available in the system
60      */
getNumberOfCameras(int type)61     int getNumberOfCameras(int type);
62 
63     /**
64      * Fetch basic camera information for a camera device
65      */
getCameraInfo(int cameraId)66     CameraInfo getCameraInfo(int cameraId);
67 
68     /**
69      * Default UID/PID values for non-privileged callers of
70      * connect(), connectDevice(), and connectLegacy()
71      */
72     const int USE_CALLING_UID = -1;
73     const int USE_CALLING_PID = -1;
74 
75     /**
76      * Open a camera device through the old camera API
77      */
connect(ICameraClient client, int cameraId, String opPackageName, int clientUid, int clientPid)78     ICamera connect(ICameraClient client,
79             int cameraId,
80             String opPackageName,
81             int clientUid, int clientPid);
82 
83     /**
84      * Open a camera device through the new camera API
85      * Only supported for device HAL versions >= 3.2
86      */
connectDevice(ICameraDeviceCallbacks callbacks, String cameraId, String opPackageName, int clientUid)87     ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks,
88             String cameraId,
89             String opPackageName,
90             int clientUid);
91 
92     /**
93      * halVersion constant for connectLegacy
94      */
95     const int CAMERA_HAL_API_VERSION_UNSPECIFIED = -1;
96 
97     /**
98      * Open a camera device in legacy mode, if supported by the camera module HAL.
99      */
connectLegacy(ICameraClient client, int cameraId, int halVersion, String opPackageName, int clientUid)100     ICamera connectLegacy(ICameraClient client,
101             int cameraId,
102             int halVersion,
103             String opPackageName,
104             int clientUid);
105 
106     /**
107      * Add listener for changes to camera device and flashlight state.
108      *
109      * Also returns the set of currently-known camera IDs and state of each device.
110      * Adding a listener will trigger the torch status listener to fire for all
111      * devices that have a flash unit.
112      */
addListener(ICameraServiceListener listener)113     CameraStatus[] addListener(ICameraServiceListener listener);
114 
115     /**
116      * Remove listener for changes to camera device and flashlight state.
117      */
removeListener(ICameraServiceListener listener)118     void removeListener(ICameraServiceListener listener);
119 
120     /**
121      * Read the static camera metadata for a camera device.
122      * Only supported for device HAL versions >= 3.2
123      */
getCameraCharacteristics(String cameraId)124     CameraMetadataNative getCameraCharacteristics(String cameraId);
125 
126     /**
127      * Read in the vendor tag descriptors from the camera module HAL.
128      * Intended to be used by the native code of CameraMetadataNative to correctly
129      * interpret camera metadata with vendor tags.
130      */
getCameraVendorTagDescriptor()131     VendorTagDescriptor getCameraVendorTagDescriptor();
132 
133     /**
134      * Retrieve the vendor tag descriptor cache which can have multiple vendor
135      * providers.
136      * Intended to be used by the native code of CameraMetadataNative to correctly
137      * interpret camera metadata with vendor tags.
138      */
getCameraVendorTagCache()139     VendorTagDescriptorCache getCameraVendorTagCache();
140 
141     /**
142      * Read the legacy camera1 parameters into a String
143      */
getLegacyParameters(int cameraId)144     String getLegacyParameters(int cameraId);
145 
146     /**
147      * apiVersion constants for supportsCameraApi
148      */
149     const int API_VERSION_1 = 1;
150     const int API_VERSION_2 = 2;
151 
152     // Determines if a particular API version is supported directly for a cameraId.
supportsCameraApi(String cameraId, int apiVersion)153     boolean supportsCameraApi(String cameraId, int apiVersion);
154     // Determines if a cameraId is a hidden physical camera of a logical multi-camera.
isHiddenPhysicalCamera(String cameraId)155     boolean isHiddenPhysicalCamera(String cameraId);
156 
setTorchMode(String cameraId, boolean enabled, IBinder clientBinder)157     void setTorchMode(String cameraId, boolean enabled, IBinder clientBinder);
158 
159     /**
160      * Notify the camera service of a system event.  Should only be called from system_server.
161      *
162      * Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
163      */
164     const int EVENT_NONE = 0;
165     const int EVENT_USER_SWITCHED = 1; // The argument is the set of new foreground user IDs.
notifySystemEvent(int eventId, in int[] args)166     oneway void notifySystemEvent(int eventId, in int[] args);
167 
168     /**
169      * Notify the camera service of a device physical status change. May only be called from
170      * a privileged process.
171      *
172      * newState is a bitfield consisting of DEVICE_STATE_* values combined together. Valid state
173      * combinations are device-specific. At device startup, the camera service will assume the device
174      * state is NORMAL until otherwise notified.
175      *
176      * Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
177      */
notifyDeviceStateChange(long newState)178     oneway void notifyDeviceStateChange(long newState);
179 
180     // Bitfield constants for notifyDeviceStateChange
181     // All bits >= 32 are for custom vendor states
182     // Written as ints since AIDL does not support long constants.
183     const int DEVICE_STATE_NORMAL = 0;
184     const int DEVICE_STATE_BACK_COVERED = 1;
185     const int DEVICE_STATE_FRONT_COVERED = 2;
186     const int DEVICE_STATE_FOLDED = 4;
187     const int DEVICE_STATE_LAST_FRAMEWORK_BIT = 0x80000000; // 1 << 31;
188 
189 }
190