ICameraService.h revision e7ee7637747371635a85fedd24d2190bb1f38651
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;
33c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin
343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass ICameraService : public IInterface
353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
37bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin    /**
38bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin     * Keep up-to-date with ICameraService.aidl in frameworks/base
39bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin     */
403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    enum {
4135a055b8bfc6f3cbea409b2897caf936654519cbChih-Chung Chang        GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION,
42ddbdb35d176266b5ab64c30178f5cb76c5b1b4b4Chih-Chung Chang        GET_CAMERA_INFO,
43634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin        CONNECT,
44bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        CONNECT_PRO,
45e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin        CONNECT_DEVICE,
46bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        ADD_LISTENER,
47bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin        REMOVE_LISTENER,
483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    };
493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
50ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    enum {
51ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala        USE_CALLING_UID = -1
52ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    };
53ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala
543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    DECLARE_META_INTERFACE(CameraService);
563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
57bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual int32_t  getNumberOfCameras() = 0;
58bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t getCameraInfo(int cameraId,
59ddbdb35d176266b5ab64c30178f5cb76c5b1b4b4Chih-Chung Chang                                          struct CameraInfo* cameraInfo) = 0;
60bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin
61bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
62bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: ALREADY_EXISTS if the listener was already added
63bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t addListener(const sp<ICameraServiceListener>& listener)
64bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
65bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // Returns 'OK' if operation succeeded
66bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    // - Errors: BAD_VALUE if specified listener was not in the listener list
67bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin    virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
68bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin                                                                            = 0;
69ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    /**
70ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientPackageName and clientUid are used for permissions checking.  if
71ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
72ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     * trusted callers can set a clientUid other than USE_CALLING_UID.
73ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala     */
74ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient,
75ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            int cameraId,
76ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            const String16& clientPackageName,
77ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            int clientUid) = 0;
78634a51509ee50475f3e9f8ccf897e90fc72ded31Igor Murashkin
79ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    virtual sp<IProCameraUser> connect(const sp<IProCameraCallbacks>& cameraCb,
80c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            int cameraId,
81c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            const String16& clientPackageName,
82c073ba525404f3416c2824c435d3d926a9892f1bIgor Murashkin            int clientUid) = 0;
83e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin
84e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin    virtual sp<ICameraDeviceUser> connect(
85e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const sp<ICameraDeviceCallbacks>& cameraCb,
86e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            int cameraId,
87e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            const String16& clientPackageName,
88e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin            int clientUid) = 0;
893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// ----------------------------------------------------------------------------
923cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass BnCameraService: public BnInterface<ICameraService>
943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianpublic:
963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    virtual status_t    onTransact( uint32_t code,
973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    const Parcel& data,
983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    Parcel* reply,
993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                                    uint32_t flags = 0);
1003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian};
1013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android
1033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#endif
105