blob: a2b3d2edaf341a2047ff01b4e4ecb773c8745f51 [file] [log] [blame]
Karl Petersson006c5242017-05-30 17:24:10 +02001// Copyright 2017 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UDEV_DEVICE_MANAGER_H_
6#define UDEV_DEVICE_MANAGER_H_
7
8#include <string>
9
Qijiang Fan253d9492020-05-15 16:59:06 +090010#include <base/files/file_descriptor_watcher_posix.h>
Simon Que879e60a2017-06-22 20:33:00 -040011#include <base/macros.h>
Karl Petersson006c5242017-05-30 17:24:10 +020012#include <base/observer_list.h>
13
14#include "scoped_udev_handle.h"
15#include "udev_subsystem_observer.h"
16
17namespace atrusctl {
18
Qijiang Fan253d9492020-05-15 16:59:06 +090019class UdevDeviceManager {
Karl Petersson006c5242017-05-30 17:24:10 +020020 public:
21 UdevDeviceManager();
22
23 // Initialize udev monitoring and start listening on udev socket
24 bool Initialize();
25
26 // Add listener for hidraw events that matches rule in "udev-atrus.rules"
27 void AddObserver(UdevSubsystemObserver* observer);
28
29 // Remove listener
30 void RemoveObserver(UdevSubsystemObserver* observer);
31
32 // Enumerate hidraw devices that matches |kUsbVid| and |kUSbPid| declared in
33 // atrus_device.h, call each observer's callback if a device was found
34 bool Enumerate();
35
36 private:
Qijiang Fan253d9492020-05-15 16:59:06 +090037 void OnFdReadable();
Karl Petersson006c5242017-05-30 17:24:10 +020038
39 void HandleEvent(const std::string& action_str,
40 const std::string& device_path);
41
42 ScopedUdev udev_;
43 ScopedUdevMonitor monitor_;
Qijiang Fan253d9492020-05-15 16:59:06 +090044 std::unique_ptr<base::FileDescriptorWatcher::Controller> watcher_;
Karl Petersson006c5242017-05-30 17:24:10 +020045 base::ObserverList<UdevSubsystemObserver> observers_;
Simon Que879e60a2017-06-22 20:33:00 -040046
47 DISALLOW_COPY_AND_ASSIGN(UdevDeviceManager);
Karl Petersson006c5242017-05-30 17:24:10 +020048};
49
50} // namespace atrusctl
51
52#endif // UDEV_DEVICE_MANAGER_H_