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