Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / examples / lighting-app / nrfconnect / main / include / LightingManager.h
1 /*
2  *
3  *    Copyright (c) 2020 Project CHIP Authors
4  *    All rights reserved.
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 #pragma once
20
21 #include "AppEvent.h"
22
23 #include <cstdint>
24 #include <drivers/gpio.h>
25
26 class LightingManager
27 {
28 public:
29     enum Action_t : uint8_t
30     {
31         ON_ACTION = 0,
32         OFF_ACTION,
33         LEVEL_ACTION,
34
35         INVALID_ACTION
36     };
37
38     enum State_t : uint8_t
39     {
40         kState_On = 0,
41         kState_Off,
42     };
43
44     using LightingCallback_fn = void (*)(Action_t, int32_t);
45
46     int Init(const device * pwmDevice, uint32_t pwmChannel);
47     bool IsTurnedOn() const { return mState == kState_On; }
48     uint8_t GetLevel() const { return mLevel; }
49     bool InitiateAction(Action_t aAction, int32_t aActor, uint8_t size, uint8_t * value);
50     void SetCallbacks(LightingCallback_fn aActionInitiated_CB, LightingCallback_fn aActionCompleted_CB);
51
52 private:
53     static constexpr uint8_t kMaxLevel = 255;
54
55     friend LightingManager & LightingMgr();
56     State_t mState;
57     uint8_t mLevel;
58     const device * mPwmDevice;
59     uint32_t mPwmChannel;
60
61     LightingCallback_fn mActionInitiated_CB;
62     LightingCallback_fn mActionCompleted_CB;
63
64     void Set(bool aOn);
65     void SetLevel(uint8_t aLevel);
66     void UpdateLight();
67
68     static LightingManager sLight;
69 };
70
71 inline LightingManager & LightingMgr(void)
72 {
73     return LightingManager::sLight;
74 }