| // Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MIST_UDEV_MONITOR_H_ |
| #define MIST_UDEV_MONITOR_H_ |
| |
| #include <base/macros.h> |
| |
| struct udev_monitor; |
| |
| namespace mist { |
| |
| class UdevDevice; |
| |
| // A udev monitor, which wraps a udev_monitor C struct from libudev and related |
| // library functions into a C++ object. |
| class UdevMonitor { |
| public: |
| static const int kInvalidFileDescriptor = -1; |
| |
| // Constructs a UdevMonitor object by taking a raw pointer to a udev_monitor |
| // struct as |monitor|. The ownership of |monitor| is not transferred, but its |
| // reference count is increased by one during the lifetime of this object. |
| explicit UdevMonitor(udev_monitor* monitor); |
| |
| // Destructs this UdevMonitor object and decreases the reference count of the |
| // underlying udev_monitor struct by one. |
| virtual ~UdevMonitor(); |
| |
| // Wraps udev_monitor_enable_receiving(). Returns true on success. |
| virtual bool EnableReceiving(); |
| |
| // Wraps udev_monitor_set_receive_buffer_size(). Returns true on success. |
| virtual bool SetReceiveBufferSize(int size); |
| |
| // Wraps udev_monitor_get_fd(). |
| virtual int GetFileDescriptor() const; |
| |
| // Wraps udev_monitor_receive_device(). The returned UdevDevice object is not |
| // managed and should be deleted by the caller after use. |
| virtual UdevDevice* ReceiveDevice(); |
| |
| // Wraps udev_monitor_filter_add_match_subsystem_devtype(). Returns true on |
| // success. |
| virtual bool FilterAddMatchSubsystemDeviceType(const char* subsystem, |
| const char* device_type); |
| |
| // Wraps udev_monitor_filter_add_match_tag(). Returns true on success. |
| virtual bool FilterAddMatchTag(const char* tag); |
| |
| // Wraps udev_monitor_filter_update(). Returns true on success. |
| virtual bool FilterUpdate(); |
| |
| // Wraps udev_monitor_filter_remove(). Returns true on success. |
| virtual bool FilterRemove(); |
| |
| private: |
| // Allows MockUdevMonitor to invoke the private default constructor below. |
| friend class MockUdevMonitor; |
| |
| // Constructs a UdevMonitor object without referencing a udev_monitor struct, |
| // which is only allowed to be called by MockUdevMonitor. |
| UdevMonitor(); |
| |
| udev_monitor* monitor_; |
| |
| DISALLOW_COPY_AND_ASSIGN(UdevMonitor); |
| }; |
| |
| } // namespace mist |
| |
| #endif // MIST_UDEV_MONITOR_H_ |