RDK Documentation (Open Sourced RDK Components)
Stoppable.hpp
1 /*
2  * If not stated otherwise in this file or this component's Licenses.txt file the
3  * following copyright and licenses apply:
4  *
5  * Copyright 2016 RDK Management
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18 */
19 
20 
21 
22 /**
23 * @defgroup hdmicec
24 * @{
25 * @defgroup osal
26 * @{
27 **/
28 
29 
30 #ifndef HDMI_CCEC_OSAL_STOPPABLE_HPP_
31 #define HDMI_CCEC_OSAL_STOPPABLE_HPP_
32 
33 #include "OSAL.hpp"
34 
35 CCEC_OSAL_BEGIN_NAMESPACE
36 
37 class Stoppable {
38  enum {
39  RUNNING,
40  STOPPING,
41  STOPPED,
42  };
43 public:
44  Stoppable(int state = RUNNING) : state(state) {}
45 
46  virtual void stop(bool block = false) = 0;
47  virtual bool isStopped(void) {
48  return state == STOPPED;
49  }
50 protected:
51 
52  virtual void runStarted(void) {
53  state = RUNNING;
54  }
55  virtual void stopStarted(void) {
56  if (state == RUNNING) state = STOPPING;
57  }
58  virtual bool isStopping(void) {
59  return ((state == STOPPING) || (state == STOPPED));
60  }
61  virtual bool isRunning(void) {
62  return state == RUNNING;
63  }
64  virtual void stopCompleted(void) {
65  state = STOPPED;
66  }
67 private:
68  volatile int state;
69 
70 };
71 
72 CCEC_OSAL_END_NAMESPACE
73 
74 #endif
75 
76 
77 /** @} */
78 /** @} */
CCEC_OSAL::Stoppable
Definition: Stoppable.hpp:37