ICameraService.h revision 2b59be89dc245b6e2475d9e8b0c5f2392370e71e
13cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian/*
23cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Copyright (C) 2008 The Android Open Source Project
33cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian *
43cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
53cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * you may not use this file except in compliance with the License.
63cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * You may obtain a copy of the License at
73cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian *
83cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
93cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian *
103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * Unless required by applicable law or agreed to in writing, software
113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * See the License for the specific language governing permissions and
143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian * limitations under the License.
153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian */
163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#ifndef ANDROID_HARDWARE_ICAMERASERVICE_H
183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#define ANDROID_HARDWARE_ICAMERASERVICE_H
193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/RefBase.h>
213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/IInterface.h>
223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <binder/Parcel.h>
233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android {
253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
26c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass ICamera;
27c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass ICameraClient;
28c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass IProCameraUser;
29c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkinclass IProCameraCallbacks;
30bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinclass ICameraServiceListener;
31e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceUser;
32e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass ICameraDeviceCallbacks;
332b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun Heclass CameraMetadata;
34c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin
353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass ICameraService : public IInterface
363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
38bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin    /**
39bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin     * Keep up-to-date with ICameraService.aidl in frameworks/base
40bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin     */
413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    enum {
4235a055b8bfc6f3cbea409b2897caf936654519cbChih-Chung Chang        GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION,
43ddbdb35d176266b5ab64c30178f5cb76c5b1b4b4Chih-Chung Chang        GET_CAMERA_INFO,
44634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin        CONNECT,
45bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        CONNECT_PRO,
46e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        CONNECT_DEVICE,
47bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        ADD_LISTENER,
48bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        REMOVE_LISTENER,
492b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He        GET_CAMERA_CHARACTERISTICS,
503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    };
513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
52ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    enum {
53ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        USE_CALLING_UID = -1
54ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    };
55ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala
563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    DECLARE_META_INTERFACE(CameraService);
583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
59bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual int32_t  getNumberOfCameras() = 0;
60bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t getCameraInfo(int cameraId,
61ddbdb35d176266b5ab64c30178f5cb76c5b1b4b4Chih-Chung Chang                                          struct CameraInfo* cameraInfo) = 0;
62bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin
632b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He    virtual status_t getCameraCharacteristics(int cameraId,
642b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He                                              CameraMetadata* cameraInfo) = 0;
652b59be89dc245b6e2475d9e8b0c5f2392370e71eZhijun He
66bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
67bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: ALREADY_EXISTS if the listener was already added
68bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t addListener(const sp<ICameraServiceListener>& listener)
69bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
70bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
71bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: BAD_VALUE if specified listener was not in the listener list
72bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
73bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
74ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    /**
75ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientPackageName and clientUid are used for permissions checking.  if
76ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
77ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * trusted callers can set a clientUid other than USE_CALLING_UID.
78ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     */
790f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connect(const sp<ICameraClient>& cameraClient,
80ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            int cameraId,
81ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            const String16& clientPackageName,
820f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
830f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
840f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<ICamera>& device) = 0;
85634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin
860f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connectPro(const sp<IProCameraCallbacks>& cameraCb,
87c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            int cameraId,
88c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            const String16& clientPackageName,
890f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
900f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
910f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<IProCameraUser>& device) = 0;
92e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
930f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk    virtual status_t connectDevice(
94e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const sp<ICameraDeviceCallbacks>& cameraCb,
95e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            int cameraId,
96e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const String16& clientPackageName,
970f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            int clientUid,
980f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            /*out*/
990f61d8f14aa368c9cd7076528e8096e10ed100a0Ruben Brunk            sp<ICameraDeviceUser>& device) = 0;
1003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
1013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ----------------------------------------------------------------------------
1033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BnCameraService: public BnInterface<ICameraService>
1053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
1063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
1073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    virtual status_t    onTransact( uint32_t code,
1083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    const Parcel& data,
1093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    Parcel* reply,
1103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    uint32_t flags = 0);
1113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
1123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android
1143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif
116