xref: /openbmc/phosphor-buttons/inc/gpio.hpp (revision a6d4e65d5c4c78f86d690fff31b79db9fa8c3b4c)
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 class GpioState
25 {
26     low,
27     high
28 };
29 
30 // this struct has the gpio config for single gpio
31 struct gpioInfo
32 {
33     int fd; // io fd mapped with the gpio
34     uint32_t number;
35     std::string direction;
36 };
37 
38 // this struct represents button interface
39 struct buttonConfig
40 {
41     std::string formFactorName;   // name of the button interface
42     std::vector<gpioInfo> gpios;  // holds single or group gpio config
43     nlohmann::json extraJsonInfo; // corresponding to button interface
44 };
45 
46 /**
47  * @brief iterates over the list of gpios and configures gpios them
48  * config which is set from gpio defs json file.
49  * The fd of the configured gpio is stored in buttonConfig.gpios container
50  * @return int returns 0 on successful config of all gpios
51  */
52 
53 int configGroupGpio(buttonConfig& buttonCfg);
54 
55 /**
56  * @brief  configures and initializes the single gpio
57  * @return int returns 0 on successful config of all gpios
58  */
59 
60 int configGpio(gpioInfo& gpioConfig);
61 
62 uint32_t getGpioNum(const std::string& gpioPin);
63 void closeGpio(int fd);
64 // global json object which holds gpio_defs.json configs
65 extern nlohmann::json gpioDefs;
66