xref: /openbmc/phosphor-buttons/inc/gpio.hpp (revision 4fcfadd3)
1 /*
2 // Copyright (c) 2018 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 #pragma once
17 
18 #include <nlohmann/json.hpp>
19 #include <sdbusplus/bus.hpp>
20 
21 #include <string>
22 #include <vector>
23 
24 // enum to represent gpio states
25 enum class GpioState
26 {
27     assert,
28     deassert,
29     invalid
30 };
31 // enum to represent gpio polarity
32 enum class GpioPolarity
33 {
34     activeLow,
35     activeHigh
36 };
37 
38 struct GPIOBufferValue
39 {
40     char assert;
41     char deassert;
42 };
43 
44 // this struct has the gpio config for single gpio
45 struct gpioInfo
46 {
47     int fd; // io fd mapped with the gpio
48     uint32_t number;
49     std::string name;
50     std::string direction;
51     GpioPolarity polarity;
52 };
53 
54 // this struct represents button interface
55 struct buttonConfig
56 {
57     std::string formFactorName;   // name of the button interface
58     std::vector<gpioInfo> gpios;  // holds single or group gpio config
59     nlohmann::json extraJsonInfo; // corresponding to button interface
60 };
61 
62 /**
63  * @brief iterates over the list of gpios and configures gpios them
64  * config which is set from gpio defs json file.
65  * The fd of the configured gpio is stored in buttonConfig.gpios container
66  * @return int returns 0 on successful config of all gpios
67  */
68 
69 int configGroupGpio(buttonConfig& buttonCfg);
70 
71 /**
72  * @brief  configures and initializes the single gpio
73  * @return int returns 0 on successful config of all gpios
74  */
75 
76 int configGpio(gpioInfo& gpioConfig);
77 
78 uint32_t getGpioNum(const std::string& gpioPin);
79 // Set gpio state based on polarity
80 void setGpioState(int fd, GpioPolarity polarity, GpioState state);
81 // Get gpio state based on polarity
82 GpioState getGpioState(int fd, GpioPolarity polarity);
83 
84 void closeGpio(int fd);
85 // global json object which holds gpio_defs.json configs
86 extern nlohmann::json gpioDefs;
87