14902a10cSVishwanatha Subbanna #pragma once 24902a10cSVishwanatha Subbanna 34902a10cSVishwanatha Subbanna #include <unistd.h> 44902a10cSVishwanatha Subbanna namespace phosphor 54902a10cSVishwanatha Subbanna { 64902a10cSVishwanatha Subbanna namespace gpio 74902a10cSVishwanatha Subbanna { 84902a10cSVishwanatha Subbanna /** @class FileDescriptor 94902a10cSVishwanatha Subbanna * @brief Responsible for handling file descriptor 104902a10cSVishwanatha Subbanna */ 114902a10cSVishwanatha Subbanna class FileDescriptor 124902a10cSVishwanatha Subbanna { 134902a10cSVishwanatha Subbanna private: 144902a10cSVishwanatha Subbanna /** @brief File descriptor for the gpio input device */ 154902a10cSVishwanatha Subbanna int fd = -1; 164902a10cSVishwanatha Subbanna 174902a10cSVishwanatha Subbanna public: 1836df1979SMatt Spinler FileDescriptor() = default; 194902a10cSVishwanatha Subbanna FileDescriptor(const FileDescriptor&) = delete; 204902a10cSVishwanatha Subbanna FileDescriptor& operator=(const FileDescriptor&) = delete; 214902a10cSVishwanatha Subbanna FileDescriptor(FileDescriptor&&) = delete; 224902a10cSVishwanatha Subbanna FileDescriptor& operator=(FileDescriptor&&) = delete; 234902a10cSVishwanatha Subbanna 244902a10cSVishwanatha Subbanna /** @brief Saves File descriptor and uses it to do file operation 254902a10cSVishwanatha Subbanna * 264902a10cSVishwanatha Subbanna * @param[in] fd - File descriptor 274902a10cSVishwanatha Subbanna */ FileDescriptor(int fd)28*9b4c6cf7SGeorge Liu explicit FileDescriptor(int fd) : fd(fd) 294902a10cSVishwanatha Subbanna { 304902a10cSVishwanatha Subbanna // Nothing 314902a10cSVishwanatha Subbanna } 324902a10cSVishwanatha Subbanna ~FileDescriptor()334902a10cSVishwanatha Subbanna ~FileDescriptor() 344902a10cSVishwanatha Subbanna { 354902a10cSVishwanatha Subbanna if (fd >= 0) 364902a10cSVishwanatha Subbanna { 374902a10cSVishwanatha Subbanna close(fd); 384902a10cSVishwanatha Subbanna } 394902a10cSVishwanatha Subbanna } 404902a10cSVishwanatha Subbanna operator ()()414902a10cSVishwanatha Subbanna int operator()() 424902a10cSVishwanatha Subbanna { 434902a10cSVishwanatha Subbanna return fd; 444902a10cSVishwanatha Subbanna } 4536df1979SMatt Spinler operator bool() const4636df1979SMatt Spinler operator bool() const 4736df1979SMatt Spinler { 4836df1979SMatt Spinler return fd != -1; 4936df1979SMatt Spinler } 5036df1979SMatt Spinler set(int descriptor)5136df1979SMatt Spinler void set(int descriptor) 5236df1979SMatt Spinler { 5336df1979SMatt Spinler fd = descriptor; 5436df1979SMatt Spinler } 554902a10cSVishwanatha Subbanna }; 564902a10cSVishwanatha Subbanna 574902a10cSVishwanatha Subbanna } // namespace gpio 584902a10cSVishwanatha Subbanna } // namespace phosphor 59