| // 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. |
| |
| #include "mist/udev_device.h" |
| |
| #include <libudev.h> |
| |
| #include <base/logging.h> |
| |
| namespace mist { |
| |
| UdevDevice::UdevDevice() : device_(nullptr) {} |
| |
| UdevDevice::UdevDevice(udev_device* device) : device_(device) { |
| CHECK(device_); |
| |
| udev_device_ref(device_); |
| } |
| |
| UdevDevice::~UdevDevice() { |
| if (device_) { |
| udev_device_unref(device_); |
| device_ = nullptr; |
| } |
| } |
| |
| UdevDevice* UdevDevice::GetParent() const { |
| // udev_device_get_parent does not increase the reference count of the |
| // returned udev_device struct. |
| udev_device* parent_device = udev_device_get_parent(device_); |
| return parent_device ? new UdevDevice(parent_device) : nullptr; |
| } |
| |
| UdevDevice* UdevDevice::GetParentWithSubsystemDeviceType( |
| const char* subsystem, |
| const char* device_type) const { |
| // udev_device_get_parent_with_subsystem_devtype does not increase the |
| // reference count of the returned udev_device struct. |
| udev_device* parent_device = udev_device_get_parent_with_subsystem_devtype( |
| device_, subsystem, device_type); |
| return parent_device ? new UdevDevice(parent_device) : nullptr; |
| } |
| |
| bool UdevDevice::IsInitialized() const { |
| return udev_device_get_is_initialized(device_); |
| } |
| |
| uint64_t UdevDevice::GetMicrosecondsSinceInitialized() const { |
| return udev_device_get_usec_since_initialized(device_); |
| } |
| |
| uint64_t UdevDevice::GetSequenceNumber() const { |
| return udev_device_get_seqnum(device_); |
| } |
| |
| const char* UdevDevice::GetDevicePath() const { |
| return udev_device_get_devpath(device_); |
| } |
| |
| const char* UdevDevice::GetDeviceNode() const { |
| return udev_device_get_devnode(device_); |
| } |
| |
| dev_t UdevDevice::GetDeviceNumber() const { |
| return udev_device_get_devnum(device_); |
| } |
| |
| const char* UdevDevice::GetDeviceType() const { |
| return udev_device_get_devtype(device_); |
| } |
| |
| const char* UdevDevice::GetDriver() const { |
| return udev_device_get_driver(device_); |
| } |
| |
| const char* UdevDevice::GetSubsystem() const { |
| return udev_device_get_subsystem(device_); |
| } |
| |
| const char* UdevDevice::GetSysPath() const { |
| return udev_device_get_syspath(device_); |
| } |
| |
| const char* UdevDevice::GetSysName() const { |
| return udev_device_get_sysname(device_); |
| } |
| |
| const char* UdevDevice::GetSysNumber() const { |
| return udev_device_get_sysnum(device_); |
| } |
| |
| const char* UdevDevice::GetAction() const { |
| return udev_device_get_action(device_); |
| } |
| |
| UdevListEntry* UdevDevice::GetDeviceLinksListEntry() const { |
| udev_list_entry* list_entry = udev_device_get_devlinks_list_entry(device_); |
| return list_entry ? new UdevListEntry(list_entry) : nullptr; |
| } |
| |
| UdevListEntry* UdevDevice::GetPropertiesListEntry() const { |
| udev_list_entry* list_entry = udev_device_get_properties_list_entry(device_); |
| return list_entry ? new UdevListEntry(list_entry) : nullptr; |
| } |
| |
| const char* UdevDevice::GetPropertyValue(const char* key) const { |
| return udev_device_get_property_value(device_, key); |
| } |
| |
| UdevListEntry* UdevDevice::GetTagsListEntry() const { |
| udev_list_entry* list_entry = udev_device_get_tags_list_entry(device_); |
| return list_entry ? new UdevListEntry(list_entry) : nullptr; |
| } |
| |
| UdevListEntry* UdevDevice::GetSysAttributeListEntry() const { |
| udev_list_entry* list_entry = udev_device_get_sysattr_list_entry(device_); |
| return list_entry ? new UdevListEntry(list_entry) : nullptr; |
| } |
| |
| const char* UdevDevice::GetSysAttributeValue(const char* attribute) const { |
| return udev_device_get_sysattr_value(device_, attribute); |
| } |
| |
| } // namespace mist |