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