xref: /openbmc/openpower-occ-control/file.hpp (revision f3a4a69f7ff8f42095f46226b5420f5f4b5cd3d8)
138b08d79SVishwanatha Subbanna #pragma once
238b08d79SVishwanatha Subbanna 
338b08d79SVishwanatha Subbanna #include <unistd.h>
438b08d79SVishwanatha Subbanna namespace open_power
538b08d79SVishwanatha Subbanna {
638b08d79SVishwanatha Subbanna namespace occ
738b08d79SVishwanatha Subbanna {
838b08d79SVishwanatha Subbanna /** @class FileDescriptor
938b08d79SVishwanatha Subbanna  *  @brief Responsible for handling file descriptor
1038b08d79SVishwanatha Subbanna  */
1138b08d79SVishwanatha Subbanna class FileDescriptor
1238b08d79SVishwanatha Subbanna {
1338b08d79SVishwanatha Subbanna   private:
1438b08d79SVishwanatha Subbanna     /** @brief File descriptor for the gpio input device */
1538b08d79SVishwanatha Subbanna     int fd = -1;
1638b08d79SVishwanatha Subbanna 
1738b08d79SVishwanatha Subbanna   public:
1838b08d79SVishwanatha Subbanna     FileDescriptor() = delete;
1938b08d79SVishwanatha Subbanna     FileDescriptor(const FileDescriptor&) = delete;
2038b08d79SVishwanatha Subbanna     FileDescriptor& operator=(const FileDescriptor&) = delete;
2138b08d79SVishwanatha Subbanna     FileDescriptor(FileDescriptor&&) = delete;
2238b08d79SVishwanatha Subbanna     FileDescriptor& operator=(FileDescriptor&&) = delete;
2338b08d79SVishwanatha Subbanna 
2438b08d79SVishwanatha Subbanna     /** @brief Saves File descriptor and uses it to do file operation
2538b08d79SVishwanatha Subbanna      *
2638b08d79SVishwanatha Subbanna      *  @param[in] fd - File descriptor
2738b08d79SVishwanatha Subbanna      */
FileDescriptor(int fd)28*f3a4a69fSGeorge Liu     explicit FileDescriptor(int fd) : fd(fd)
2938b08d79SVishwanatha Subbanna     {
3038b08d79SVishwanatha Subbanna         // Nothing
3138b08d79SVishwanatha Subbanna     }
3238b08d79SVishwanatha Subbanna 
~FileDescriptor()3338b08d79SVishwanatha Subbanna     ~FileDescriptor()
3438b08d79SVishwanatha Subbanna     {
3538b08d79SVishwanatha Subbanna         if (fd >= 0)
3638b08d79SVishwanatha Subbanna         {
3738b08d79SVishwanatha Subbanna             close(fd);
3838b08d79SVishwanatha Subbanna         }
3938b08d79SVishwanatha Subbanna     }
4038b08d79SVishwanatha Subbanna 
operator ()()4138b08d79SVishwanatha Subbanna     int operator()()
4238b08d79SVishwanatha Subbanna     {
4338b08d79SVishwanatha Subbanna         return fd;
4438b08d79SVishwanatha Subbanna     }
4538b08d79SVishwanatha Subbanna };
4638b08d79SVishwanatha Subbanna 
4738b08d79SVishwanatha Subbanna } // namespace occ
4894df8c90SGunnar Mills } // namespace open_power
49