• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 **
3 ** Copyright 2008, The Android Open Source Project
4 ** Copyright 2012, Samsung Electronics Co. LTD
5 **
6 ** Licensed under the Apache License, Version 2.0 (the "License");
7 ** you may not use this file except in compliance with the License.
8 ** You may obtain a copy of the License at
9 **
10 **     http://www.apache.org/licenses/LICENSE-2.0
11 **
12 ** Unless required by applicable law or agreed to in writing, software
13 ** distributed under the License is distributed on an "AS IS" BASIS,
14 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ** See the License for the specific language governing permissions and
16 ** limitations under the License.
17 */
18 
19 /*!
20  * \file      SignalDrivenThread.h
21  * \brief     header file for general thread ( for camera hal2 implementation )
22  * \author    Sungjoong Kang(sj3.kang@samsung.com)
23  * \date      2012/05/31
24  *
25  * <b>Revision History: </b>
26  * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27  *   Initial Release
28  *
29  * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n
30  *   2nd Release
31  *
32  */
33 
34 
35 
36 #ifndef SIGNAL_DRIVEN_THREAD_H
37 #define SIGNAL_DRIVEN_THREAD_H
38 
39 #include <utils/threads.h>
40 
41 namespace android {
42 
43 #define SIGNAL_THREAD_TERMINATE     (1<<0)
44 #define SIGNAL_THREAD_PAUSE         (1<<1)
45 
46 #define SIGNAL_THREAD_COMMON_LAST   (1<<3)
47 
48 class SignalDrivenThread:public Thread {
49 public:
50                         SignalDrivenThread();
51                         SignalDrivenThread(const char *name,
52                             int32_t priority, size_t stack);
53     virtual             ~SignalDrivenThread();
54 
55             status_t    SetSignal(uint32_t signal);
56 
57             uint32_t    GetProcessingSignal();
58             //void        ClearProcessingSignal(uint32_t signal);
59             void        Start(const char *name,
60                             int32_t priority, size_t stack);
61             bool        IsTerminated();
62 
63 private:
64             status_t    readyToRun();
65             status_t    readyToRunInternal();
66 
67             bool        threadLoop();
68     virtual void        threadFunctionInternal() = 0;
69 
70             void        ClearSignal();
71 
72             uint32_t    m_receivedSignal;
73             uint32_t    m_processingSignal;
74             uint32_t    m_pendingSignal;
75 
76             Mutex       m_signalMutex;
77             Condition   m_threadCondition;
78             bool	    m_isTerminated;
79 };
80 
81 }; // namespace android
82 
83 #endif
84