// 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_H_
#define MIST_UDEV_H_

#include <sys/types.h>

#include <base/macros.h>

struct udev;
struct udev_device;

namespace mist {

class UdevDevice;
class UdevEnumerate;
class UdevMonitor;

// A udev library context, which wraps a udev C struct from libudev and related
// library functions into a C++ object.
class Udev {
 public:
  Udev();
  virtual ~Udev();

  // Initializes this object with a udev library context created via udev_new().
  // Returns true on success.
  virtual bool Initialize();

  // Wraps udev_device_new_from_syspath(). The returned UdevDevice object is not
  // managed and should be deleted by the caller after use.
  virtual UdevDevice* CreateDeviceFromSysPath(const char* sys_path);

  // Wraps udev_device_new_from_devnum(). The returned UdevDevice object is not
  // managed and should be deleted by the caller after use.
  virtual UdevDevice* CreateDeviceFromDeviceNumber(char type,
                                                   dev_t device_number);

  // Wraps udev_device_new_from_subsystem_sysname(). The returned UdevDevice
  // object is not managed and should be deleted by the caller after use.
  virtual UdevDevice* CreateDeviceFromSubsystemSysName(const char* subsystem,
                                                       const char* sys_name);

  // Wraps udev_enumerate_new(). The returned UdevEnumerate object is not
  // managed and should be deleted by the caller after use.
  virtual UdevEnumerate* CreateEnumerate();

  // Wraps udev_monitor_new_from_netlink(). The returned UdevMonitor object is
  // not managed and should be deleted by the caller after use.
  virtual UdevMonitor* CreateMonitorFromNetlink(const char* name);

 private:
  // Creates a UdevDevice object that wraps a given udev_device struct pointed
  // by |device|. The ownership of |device| is transferred to returned
  // UdevDevice object.
  static UdevDevice* CreateDevice(udev_device* device);

  udev* udev_;

  DISALLOW_COPY_AND_ASSIGN(Udev);
};

}  // namespace mist

#endif  // MIST_UDEV_H_
