xref: /aosp_15_r20/external/libbrillo/brillo/udev/udev.h (revision 1a96fba65179ea7d3f56207137718607415c5953)
1*1a96fba6SXin Li // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li // Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li // found in the LICENSE file.
4*1a96fba6SXin Li 
5*1a96fba6SXin Li #ifndef LIBBRILLO_BRILLO_UDEV_UDEV_H_
6*1a96fba6SXin Li #define LIBBRILLO_BRILLO_UDEV_UDEV_H_
7*1a96fba6SXin Li 
8*1a96fba6SXin Li #include <sys/types.h>
9*1a96fba6SXin Li 
10*1a96fba6SXin Li #include <memory>
11*1a96fba6SXin Li 
12*1a96fba6SXin Li #include <base/macros.h>
13*1a96fba6SXin Li #include <brillo/brillo_export.h>
14*1a96fba6SXin Li 
15*1a96fba6SXin Li struct udev;
16*1a96fba6SXin Li struct udev_device;
17*1a96fba6SXin Li 
18*1a96fba6SXin Li namespace brillo {
19*1a96fba6SXin Li 
20*1a96fba6SXin Li class UdevDevice;
21*1a96fba6SXin Li class UdevEnumerate;
22*1a96fba6SXin Li class UdevMonitor;
23*1a96fba6SXin Li 
24*1a96fba6SXin Li // A udev library context, which wraps a udev C struct from libudev and related
25*1a96fba6SXin Li // library functions into a C++ object.
26*1a96fba6SXin Li class BRILLO_EXPORT Udev {
27*1a96fba6SXin Li  public:
28*1a96fba6SXin Li   // Creates and initializes a Udev object. Returns nullptr on failure.
29*1a96fba6SXin Li   static std::unique_ptr<Udev> Create();
30*1a96fba6SXin Li   virtual ~Udev();
31*1a96fba6SXin Li 
32*1a96fba6SXin Li   // Wraps udev_device_new_from_syspath().
33*1a96fba6SXin Li   virtual std::unique_ptr<UdevDevice> CreateDeviceFromSysPath(
34*1a96fba6SXin Li       const char* sys_path);
35*1a96fba6SXin Li 
36*1a96fba6SXin Li   // Wraps udev_device_new_from_devnum().
37*1a96fba6SXin Li   virtual std::unique_ptr<UdevDevice> CreateDeviceFromDeviceNumber(
38*1a96fba6SXin Li       char type, dev_t device_number);
39*1a96fba6SXin Li 
40*1a96fba6SXin Li   // Wraps udev_device_new_from_subsystem_sysname().
41*1a96fba6SXin Li   virtual std::unique_ptr<UdevDevice> CreateDeviceFromSubsystemSysName(
42*1a96fba6SXin Li       const char* subsystem, const char* sys_name);
43*1a96fba6SXin Li 
44*1a96fba6SXin Li   // Wraps udev_enumerate_new().
45*1a96fba6SXin Li   virtual std::unique_ptr<UdevEnumerate> CreateEnumerate();
46*1a96fba6SXin Li 
47*1a96fba6SXin Li   // Wraps udev_monitor_new_from_netlink().
48*1a96fba6SXin Li   virtual std::unique_ptr<UdevMonitor> CreateMonitorFromNetlink(
49*1a96fba6SXin Li       const char* name);
50*1a96fba6SXin Li 
51*1a96fba6SXin Li  private:
52*1a96fba6SXin Li   friend class MockUdev;
53*1a96fba6SXin Li 
54*1a96fba6SXin Li   // Creates a Udev by taking ownership of the |udev|.
55*1a96fba6SXin Li   explicit Udev(struct udev* udev);
56*1a96fba6SXin Li 
57*1a96fba6SXin Li   // Creates a UdevDevice object that wraps a given udev_device struct pointed
58*1a96fba6SXin Li   // by |device|. The ownership of |device| is transferred to returned
59*1a96fba6SXin Li   // UdevDevice object.
60*1a96fba6SXin Li   static std::unique_ptr<UdevDevice> CreateDevice(udev_device* device);
61*1a96fba6SXin Li 
62*1a96fba6SXin Li   struct udev* udev_;
63*1a96fba6SXin Li 
64*1a96fba6SXin Li   DISALLOW_COPY_AND_ASSIGN(Udev);
65*1a96fba6SXin Li };
66*1a96fba6SXin Li 
67*1a96fba6SXin Li }  // namespace brillo
68*1a96fba6SXin Li 
69*1a96fba6SXin Li #endif  // LIBBRILLO_BRILLO_UDEV_UDEV_H_
70