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.