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