1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef META_INTERFACE_ISTARTABLE_H
17 #define META_INTERFACE_ISTARTABLE_H
18
19 #include <meta/base/interface_macros.h>
20 #include <meta/interface/interface_macros.h>
21 #include <meta/interface/intf_container.h>
22
23 META_BEGIN_NAMESPACE()
24
25 REGISTER_INTERFACE(IStartable, "b27ea024-7ebf-4d2a-a166-309bc0cf4d4f")
26
27 enum class StartBehavior : uint32_t {
28 /** The startable should not be started automatically */
29 MANUAL = 0,
30 /** The startable should be started automatically when it has been made part of an object hierarchy
31 managed by a StartableObjectController. */
32 AUTOMATIC = 1,
33 };
34
35 enum class StartableState : uint32_t {
36 /** The startable has not been attached to a hierarchy. */
37 DETACHED = 0,
38 /** The startable is part of a hierarchy but has not been started. */
39 ATTACHED = 1,
40 /** The startable is started. */
41 STARTED = 2
42 };
43
44 META_END_NAMESPACE()
45
META_TYPE(META_NS::StartableState)46 META_TYPE(META_NS::StartableState)
47 META_TYPE(META_NS::StartBehavior)
48
49 META_BEGIN_NAMESPACE()
50
51 /**
52 * @brief The IStartable interface can be implemented by objects which can be started and stopped.
53 * @note Usually IStartable is implemented by objects that are placed in an object hierarchy and
54 * whose running state is controller by an IStartableController implementation.
55 */
56 class IStartable : public CORE_NS::IInterface {
57 META_INTERFACE(CORE_NS::IInterface, IStartable)
58
59 public:
60 /**
61 * @brief The startable mode. If StartBehavior::AUTOMATIC, the startable will be
62 * started automatically by a controller.
63 */
64 META_PROPERTY(META_NS::StartBehavior, StartableMode)
65 /**
66 * @brief State of the startable.
67 */
68 META_READONLY_PROPERTY(META_NS::StartableState, StartableState)
69 /**
70 * @brief Start the startable.
71 * @return True if successful, false otherwise.
72 */
73 virtual bool Start() = 0;
74 /**
75 * @brief Stop the startable.
76 * @return True if successful, false otherwise.
77 */
78 virtual bool Stop() = 0;
79 };
80
81 META_END_NAMESPACE()
82
83 #endif
84