ICameraService.h revision 8fdfbe27acd157d58fa35a849ec50c82464062f0
1dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner/*
2ef8225444452a1486bd721f3285301fe84643b00Stephen Hines * Copyright (C) 2008 The Android Open Source Project
3ef8225444452a1486bd721f3285301fe84643b00Stephen Hines *
482287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * Licensed under the Apache License, Version 2.0 (the "License");
582287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * you may not use this file except in compliance with the License.
682287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * You may obtain a copy of the License at
782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson *
882287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson *      http://www.apache.org/licenses/LICENSE-2.0
982287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson *
1082287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * Unless required by applicable law or agreed to in writing, software
1182287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * distributed under the License is distributed on an "AS IS" BASIS,
1282287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * See the License for the specific language governing permissions and
1482287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson * limitations under the License.
1582287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson */
1682287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
1782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson#ifndef ANDROID_HARDWARE_ICAMERASERVICE_H
18788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner#define ANDROID_HARDWARE_ICAMERASERVICE_H
19788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner
20788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner#include <utils/RefBase.h>
2182287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson#include <binder/IInterface.h>
2282287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson#include <binder/Parcel.h>
2382287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
2482287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonnamespace android {
2582287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
2682287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass ICamera;
2782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass ICameraClient;
2882287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass IProCameraUser;
2982287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass IProCameraCallbacks;
3082287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass ICameraServiceListener;
3182287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
3282287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonclass ICameraService : public IInterface
3382287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson{
3482287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonpublic:
3582287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson    enum {
3682287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson        GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION,
3782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson        GET_CAMERA_INFO,
3882287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson        CONNECT,
3982287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson        CONNECT_PRO,
40788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner        ADD_LISTENER,
41788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner        REMOVE_LISTENER,
42788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner    };
4382287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
4482287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson    enum {
4582287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson        USE_CALLING_UID = -1
4682287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson    };
4782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
4882287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompsonpublic:
49e12a779bbecb46b7287a87e0ff441e32147d10bbChris Lattner    DECLARE_META_INTERFACE(CameraService);
50e12a779bbecb46b7287a87e0ff441e32147d10bbChris Lattner
5182287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson    virtual int32_t  getNumberOfCameras() = 0;
52ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    virtual status_t getCameraInfo(int cameraId,
53ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner                                          struct CameraInfo* cameraInfo) = 0;
54ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner
55ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    // Returns 'OK' if operation succeeded
56ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    // - Errors: ALREADY_EXISTS if the listener was already added
57ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    virtual status_t addListener(const sp<ICameraServiceListener>& listener)
58ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner                                                                            = 0;
59ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    // Returns 'OK' if operation succeeded
60ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    // - Errors: BAD_VALUE if specified listener was not in the listener list
61ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
62ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner                                                                            = 0;
63ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner    /**
64ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner     * clientPackageName and clientUid are used for permissions checking.  if
65ffaf4c5eb68718841399fc4396f6d53fedad24e2Chris Lattner     * clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
66788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner     * trusted callers can set a clientUid other than USE_CALLING_UID.
6782287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson     */
6882287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson    virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient,
69788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            int cameraId,
70788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            const String16& clientPackageName,
71788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            int clientUid) = 0;
72788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner
73788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner    virtual sp<IProCameraUser> connect(const sp<IProCameraCallbacks>& cameraCb,
74788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            int cameraId,
75788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            const String16& clientPackageName,
76788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner            int clientUid) = 0;
77788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner};
78788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner
79788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner// ----------------------------------------------------------------------------
8082287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
81f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smithclass BnCameraService: public BnInterface<ICameraService>
82f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith{
83f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smithpublic:
84f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith    virtual status_t    onTransact( uint32_t code,
85f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith                                    const Parcel& data,
86f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith                                    Parcel* reply,
87f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith                                    uint32_t flags = 0);
88f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith};
89f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith
90f63eee78a3ed50a974d0963623a06888ecd4ef6bRichard Smith}; // namespace android
9182287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson
9282287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson#endif
9382287d19ded35248c4ce6a425ce74116a13ce44eJohn Thompson