xref: /openbmc/phosphor-gpio-monitor/file.hpp (revision 9b4c6cf75883f77668425c765b9a77c90076f95f)
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