Index: content/browser/udev_linux.h |
=================================================================== |
--- content/browser/udev_linux.h (revision 0) |
+++ content/browser/udev_linux.h (revision 0) |
@@ -0,0 +1,97 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// UdevLinux listens for device change notifications from udev and runs |
+// callbacks when notifications occur. |
+// |
+// UdevLinux must be created on a MessageLoop of TYPE_IO. |
+// UdevLinux is not thread-safe. |
+// |
+// Example usage: |
+// |
+// class UdevLinux; |
+// |
+// class Foo { |
+// public: |
+// Foo() { |
+// std::vector<UdevLinux::UdevMonitorFilter> filters; |
+// filters.push_back(content::UdevLinux::UdevMonitorFilter("block", NULL)); |
+// udev_.reset(new UdevLinux(filters, |
+// base::Bind(&Foo::Notify, this))); |
+// } |
+// |
+// // Called when a "block" device attaches/detaches. |
+// // To hold on to |device|, call udev_device_ref(device). |
+// void Notify(udev_device* device) { |
+// // Do something with |device|. |
+// } |
+// |
+// private: |
+// scoped_ptr<UdevLinux> udev_; |
+// |
+// DISALLOW_COPY_AND_ASSIGN(Foo); |
+// }; |
+ |
+#ifndef CONTENT_BROWSER_UDEV_LINUX_H_ |
+#define CONTENT_BROWSER_UDEV_LINUX_H_ |
+ |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/callback.h" |
+#include "base/compiler_specific.h" |
+#include "base/message_pump_libevent.h" |
+ |
+extern "C" { |
+struct udev; |
+struct udev_device; |
+struct udev_monitor; |
+} |
+ |
+namespace content { |
+ |
+class UdevLinux : public base::MessagePumpLibevent::Watcher { |
+ public: |
+ typedef base::Callback<void(udev_device*)> UdevNotificationCallback; |
+ |
+ // subsystem and devtype parameter for |
+ // udev_monitor_filter_add_match_subsystem_devtype(). |
+ struct UdevMonitorFilter { |
+ UdevMonitorFilter(const char* subsystem_in, const char* devtype_in) |
+ : subsystem(subsystem_in), |
+ devtype(devtype_in) { |
+ } |
+ const char* subsystem; |
+ const char* devtype; |
+ }; |
+ |
+ // Filter incoming devices based on |filters|. |
+ // Calls |callback| upon device change events. |
+ UdevLinux(const std::vector<UdevMonitorFilter>& filters, |
+ const UdevNotificationCallback& callback); |
+ virtual ~UdevLinux(); |
+ |
+ |
+ // Returns the udev handle to be passed into other udev_*() functions. |
+ udev* udev_handle(); |
+ |
+ private: |
+ // base::MessagePump:Libevent::Watcher implementation. |
+ virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; |
+ virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; |
+ |
+ // libudev-related items, the main context, and the monitoring context to be |
+ // notified about changes to device states. |
+ udev* udev_; |
+ udev_monitor* monitor_; |
+ int monitor_fd_; |
+ base::MessagePumpLibevent::FileDescriptorWatcher monitor_watcher_; |
+ UdevNotificationCallback callback_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UdevLinux); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_BROWSER_UDEV_LINUX_H_ |
Property changes on: content/browser/udev_linux.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |