11804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam/* Copyright (c) 2012, The Linux Foundataion. All rights reserved. 21804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * 31804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * Redistribution and use in source and binary forms, with or without 41804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * modification, are permitted provided that the following conditions are 51804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * met: 61804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * * Redistributions of source code must retain the above copyright 71804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * notice, this list of conditions and the following disclaimer. 81804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * * Redistributions in binary form must reproduce the above 91804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * copyright notice, this list of conditions and the following 101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * disclaimer in the documentation and/or other materials provided 111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * with the distribution. 121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * * Neither the name of The Linux Foundation nor the names of its 131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * contributors may be used to endorse or promote products derived 141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * from this software without specific prior written permission. 151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * 161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * 281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam */ 291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#ifndef __QCAMERA_CMD_THREAD_H__ 311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#define __QCAMERA_CMD_THREAD_H__ 321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <pthread.h> 341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <cam_semaphore.h> 351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include "cam_types.h" 371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include "QCameraQueue.h" 381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamnamespace qcamera { 401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamtypedef enum 421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{ 431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_NONE, 441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_START_DATA_PROC, 451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_STOP_DATA_PROC, 461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_DO_NEXT_JOB, 471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_EXIT, 481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam CAMERA_CMD_TYPE_MAX 491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam} camera_cmd_type_t; 501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamtypedef struct { 521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam camera_cmd_type_t cmd; 531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam} camera_cmd_t; 541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamclass QCameraCmdThread { 561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tampublic: 571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam QCameraCmdThread(); 581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam ~QCameraCmdThread(); 591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam int32_t launch(void *(*start_routine)(void *), void* user_data); 611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam int32_t setName(const char* name); 621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam int32_t exit(); 631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam int32_t sendCmd(camera_cmd_type_t cmd, uint8_t sync_cmd, uint8_t priority); 641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam camera_cmd_type_t getCmd(); 651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam QCameraQueue cmd_queue; /* cmd queue */ 671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam pthread_t cmd_pid; /* cmd thread ID */ 681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam cam_semaphore_t cmd_sem; /* semaphore for cmd thread */ 691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam cam_semaphore_t sync_sem; /* semaphore for synchronized call signal */ 701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}; 711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}; // namespace qcamera 731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam 741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#endif /* __QCAMERA_CMD_THREAD_H__ */ 75