DeviceInformation.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2021-2022, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/Bus/USB/USBDevice.h>
  8. #include <Kernel/FileSystem/SysFS/Component.h>
  9. #include <Kernel/KBufferBuilder.h>
  10. #include <Kernel/KString.h>
  11. #include <Kernel/Locking/Mutex.h>
  12. namespace Kernel {
  13. class SysFSUSBDeviceInformation : public SysFSComponent {
  14. friend class SysFSUSBBusDirectory;
  15. public:
  16. virtual ~SysFSUSBDeviceInformation() override;
  17. static ErrorOr<NonnullLockRefPtr<SysFSUSBDeviceInformation>> create(USB::Device&);
  18. virtual StringView name() const override { return m_device_name->view(); }
  19. protected:
  20. SysFSUSBDeviceInformation(NonnullOwnPtr<KString> device_name, USB::Device& device);
  21. virtual ErrorOr<size_t> read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription*) const override;
  22. NonnullLockRefPtr<USB::Device> m_device;
  23. private:
  24. ErrorOr<void> try_generate(KBufferBuilder&);
  25. virtual ErrorOr<void> refresh_data(OpenFileDescription& description) const override;
  26. mutable Mutex m_lock { "SysFSUSBDeviceInformation"sv };
  27. NonnullOwnPtr<KString> m_device_name;
  28. };
  29. }