1046205c058ab70be78163ebcacfdc344a7f8750aZhijun He/*
2046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * Copyright (C) 2015 The Android Open Source Project
3046205c058ab70be78163ebcacfdc344a7f8750aZhijun He *
4046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * Licensed under the Apache License, Version 2.0 (the "License");
5046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * you may not use this file except in compliance with the License.
6046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * You may obtain a copy of the License at
7046205c058ab70be78163ebcacfdc344a7f8750aZhijun He *
8046205c058ab70be78163ebcacfdc344a7f8750aZhijun He *      http://www.apache.org/licenses/LICENSE-2.0
9046205c058ab70be78163ebcacfdc344a7f8750aZhijun He *
10046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * Unless required by applicable law or agreed to in writing, software
11046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * distributed under the License is distributed on an "AS IS" BASIS,
12046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * See the License for the specific language governing permissions and
14046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * limitations under the License.
15046205c058ab70be78163ebcacfdc344a7f8750aZhijun He */
16046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
17046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#ifndef CAMERA_HAL_H_
18046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#define CAMERA_HAL_H_
19046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
20046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include <hardware/hardware.h>
21046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include <hardware/camera_common.h>
22046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include <utils/Vector.h>
23046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include <utils/Mutex.h>
24046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include "HotplugThread.h"
25046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#include "Camera.h"
26046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
27046205c058ab70be78163ebcacfdc344a7f8750aZhijun Henamespace usb_camera_hal {
28046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
29046205c058ab70be78163ebcacfdc344a7f8750aZhijun Heclass HotplugThread;
30046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
31046205c058ab70be78163ebcacfdc344a7f8750aZhijun He/**
32046205c058ab70be78163ebcacfdc344a7f8750aZhijun He * CameraHAL contains all module state that isn't specific to an individual camera device
33046205c058ab70be78163ebcacfdc344a7f8750aZhijun He */
34046205c058ab70be78163ebcacfdc344a7f8750aZhijun Heclass CameraHAL {
35046205c058ab70be78163ebcacfdc344a7f8750aZhijun He    public:
36046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        CameraHAL();
37046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        ~CameraHAL();
38046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
39046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        // Camera Module Interface (see <hardware/camera_common.h>)
40046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        int getNumberOfCameras();
41046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        int getCameraInfo(int camera_id, struct camera_info *info);
42046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        int setCallbacks(const camera_module_callbacks_t *callbacks);
43046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        void getVendorTagOps(vendor_tag_ops_t* ops);
44046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
45046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        // Hardware Module Interface (see <hardware/hardware.h>)
46046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        int open(const hw_module_t* mod, const char* name, hw_device_t** dev);
47046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
48046205c058ab70be78163ebcacfdc344a7f8750aZhijun He    private:
49046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        // Callback handle
50046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        const camera_module_callbacks_t *mCallbacks;
51046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        android::Vector<Camera*> mCameras;
52046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        // Lock to protect the module method calls.
53046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        android::Mutex mModuleLock;
54046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        // Hot plug thread managing camera hot plug.
55046205c058ab70be78163ebcacfdc344a7f8750aZhijun He        HotplugThread *mHotplugThread;
56046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
57046205c058ab70be78163ebcacfdc344a7f8750aZhijun He};
58046205c058ab70be78163ebcacfdc344a7f8750aZhijun He} // namespace usb_camera_hal
59046205c058ab70be78163ebcacfdc344a7f8750aZhijun He
60046205c058ab70be78163ebcacfdc344a7f8750aZhijun He#endif // CAMERA_HAL_H_
61