Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2023 Project CHIP Authors
4 : *
5 : * Licensed under the Apache License, Version 2.0 (the "License");
6 : * you may not use this file except in compliance with the License.
7 : * You may obtain a copy of the License at
8 : *
9 : * http://www.apache.org/licenses/LICENSE-2.0
10 : *
11 : * Unless required by applicable law or agreed to in writing, software
12 : * distributed under the License is distributed on an "AS IS" BASIS,
13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 : * See the License for the specific language governing permissions and
15 : * limitations under the License.
16 : */
17 : #pragma once
18 :
19 : #ifndef ICD_SLEEP_TIME_JITTER_MS
20 : #define ICD_SLEEP_TIME_JITTER_MS (CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC * 0.75)
21 : #endif
22 :
23 : #ifndef ICD_ACTIVE_TIME_JITTER_MS
24 : #define ICD_ACTIVE_TIME_JITTER_MS 300
25 : #endif
26 :
27 : namespace chip {
28 : namespace app {
29 :
30 : /**
31 : * @brief Public API used by the ICDManager to expose when different events occur.
32 : * ICDManager::RegisterObserver can be used to register as an Observer to be notified when these events occur.
33 : * These functions are called synchronously.
34 : */
35 : class ICDStateObserver
36 : {
37 : public:
38 0 : virtual ~ICDStateObserver() {}
39 :
40 : /**
41 : * @brief API called when the ICD enters ActiveMode. API isn't called if we need to extend the remaining active mode timer
42 : * duration. API is called after the ICDManager has finished executing its internal actions.
43 : */
44 : virtual void OnEnterActiveMode() = 0;
45 :
46 : /**
47 : * @brief API called when the ICD enters IdleMode.
48 : * API is called after the ICDManager has finished executing its internal actions.
49 : */
50 : virtual void OnEnterIdleMode() = 0;
51 :
52 : /**
53 : * @brief API is called when the ICD is about to enter IdleMode. API is called when there is `ICD_ACTIVE_TIME_JITTER_MS` of time
54 : * remaining to the active mode timer.
55 : * This API is only called once per transition from ActiveMode to IdleMode.
56 : * If OnTransitionToIdle triggers the active mode timer to increase, the next time we are about to enter IdleMode,
57 : * this API will not be called.
58 : */
59 : virtual void OnTransitionToIdle() = 0;
60 :
61 : /**
62 : * @brief API is called when the ICD changes operating mode. This API is only called if the ICD changes state, not when it
63 : * remains in the same state.
64 : * API is called after the ICDManager has finished executing its internal actions.
65 : */
66 : virtual void OnICDModeChange() = 0;
67 : };
68 :
69 : } // namespace app
70 : } // namespace chip
|