Документация
ОС Аврора 5.2.0

Libdevicewarden

Аврора ОС предоставляет библиотеку libdevicewarden для доступа к подключенным устройствам. На данный момент поддерживаются:

Доступ к устройствам предоставляется с помощью Aurora::Devices::Manager.

Для каждого типа устройств библиотека предоставляет набор геттеров для идентификации. Кроме того, она обеспечивает управляемый доступ к узлу устройства. При наличии соответствующих разрешений от системного администратора, приложение сможет получить доступ к файловому дескриптору определённого узла устройства. Для дальнейшей работы используются другие API (такие как libusb для USB-оборудования).

Обычно сценарий работы выглядит следующим образом:

 libusb_context* context;
 libusb_device_handle *devh;
 libusb_device_descriptor desc;
 libusb_set_option(context, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, nullptr);
 libusb_init(&context);

 auto manager = new Aurora::Devices::Manager();
 auto usbDevices = manager->getUsbDevices();
 for (const auto& device: usbDevices) {
     if (device->serial() == "example") {
         libusb_wrap_sys_device(context, (intptr_t)device->fileDescriptor(), &devh);
         auto usbDevice = libusb_get_device(devh);
         libusb_get_device_descriptor(usbDevice, &desc);

         auto data = new uint8_t[255];
         libusb_get_string_descriptor_ascii(devh, desc.iProduct, data, 255);
         ...
     }
 }

Подробное описание

Библиотека libdevicewarden выступает связующим звеном между приложением и подсистемой управления устройствами Аврора ОС. Она не выполняет низкоуровневый обмен данными, а предоставляет идентификационную информацию о подключённых устройствах и, при наличии разрешений, файловый дескриптор узла устройства.

Полученный дескриптор может быть передан специализированной библиотеке, например libusb, для дальнейшей работы с оборудованием.

Таким образом, libdevicewarden решает задачу контролируемого доступа к устройствам, оставляя реализацию протоколов взаимодействия другим API.

Важно! Системная библиотека libusb не является публичным API ОС Аврора и не предназначена для официального использования. Если для работы с USB-оборудованием требуется libusb, разработчику необходимо собрать собственную версию библиотеки.

Пример сборки и использования libusb приведён в демонстрационном проекте USB Use Cases.

Классы

Класс Manager

Aurora::Devices::Manager — центральный класс библиотеки, который предоставляет список подключённых устройств и позволяет отслеживать его изменения. Класс содержит следующие функции и сигналы:

  • getUsbDevices() — возвращает список USB-устройств, соответствующих текущему фильтру;
  • getUsbSerialDevices() — возвращает список последовательных USB-устройств;
  • filter() — предоставляет доступ к текущему фильтру устройств;
  • сигнал usbDevicesUpdated(UsbDevicePtr device, bool added) — испускается при подключении или отключении USB-устройства;
  • сигнал usbSerialDevicesUpdated(UsbSerialDevicePtr device, bool added) — испускается при изменении списка последовательных USB-устройств.

Подробная документация класса приведена в разделе Aurora::Devices::Manager.

Класс Usb

Aurora::Devices::Usb описывает подключённое USB-устройство и предоставляет доступ к его идентификационным параметрам. Класс содержит следующие свойства и функции:

  • deviceClass() — класс устройства согласно спецификации USB-IF;
  • manufacturer() — имя производителя;
  • product() — название модели;
  • productId() — уникальный 16-битный код модели;
  • productVersion() — версия модели;
  • serial() — серийный номер;
  • vendorId() — уникальный 16-битный код производителя;
  • fileDescriptor() — файловый дескриптор узла устройства, который может быть использован для создания устройства libusb.

Подробная документация класса приведена в разделе Aurora::Devices::Usb.

Класс UsbSerial

Aurora::Devices::UsbSerial описывает подключённое последовательное USB-устройство. Класс наследует идентификационные свойства класса Usb и дополнительно предоставляет sysPath() — системный путь устройства.

Подробная документация класса приведена в разделе Aurora::Devices::UsbSerial.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования файлов cookies.