|
|
|
@ -32,7 +32,7 @@ pub async fn scan_devices(adapter: &Adapter, scan_seconds: u64) -> Result<Vec<De
|
|
|
|
|
|
|
|
|
|
|
|
let mut devices = Vec::new();
|
|
|
|
let mut devices = Vec::new();
|
|
|
|
for peripheral in peripherals {
|
|
|
|
for peripheral in peripherals {
|
|
|
|
// Свойства берём из рекламы; если устройство уже пропало — пропускаем.
|
|
|
|
// Свойства берём из рекламы; если устройство уже пропало - пропускаем.
|
|
|
|
let Some(props) = peripheral.properties().await.unwrap_or(None) else {
|
|
|
|
let Some(props) = peripheral.properties().await.unwrap_or(None) else {
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
@ -42,7 +42,7 @@ pub async fn scan_devices(adapter: &Adapter, scan_seconds: u64) -> Result<Vec<De
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Для классификации по типу нужны характеристики — подключаемся, читаем,
|
|
|
|
// Для классификации по типу нужны характеристики - подключаемся, читаем,
|
|
|
|
// отключаемся (best-effort: при сбое устройство всё равно попадёт в список,
|
|
|
|
// отключаемся (best-effort: при сбое устройство всё равно попадёт в список,
|
|
|
|
// просто без характеристик).
|
|
|
|
// просто без характеристик).
|
|
|
|
let characteristics = discover_characteristics(&peripheral).await;
|
|
|
|
let characteristics = discover_characteristics(&peripheral).await;
|
|
|
|
@ -66,7 +66,7 @@ pub async fn scan_devices(adapter: &Adapter, scan_seconds: u64) -> Result<Vec<De
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Подключается к устройству, читает характеристики и отключается.
|
|
|
|
/// Подключается к устройству, читает характеристики и отключается.
|
|
|
|
/// Возвращает список характеристик в формате «service::characteristic».
|
|
|
|
/// Возвращает список характеристик в формате "service::characteristic".
|
|
|
|
/// Best-effort: неудачи connect/discover игнорируются.
|
|
|
|
/// Best-effort: неудачи connect/discover игнорируются.
|
|
|
|
async fn discover_characteristics(peripheral: &impl Peripheral) -> Vec<String> {
|
|
|
|
async fn discover_characteristics(peripheral: &impl Peripheral) -> Vec<String> {
|
|
|
|
let was_connected = peripheral.is_connected().await.unwrap_or(false);
|
|
|
|
let was_connected = peripheral.is_connected().await.unwrap_or(false);
|
|
|
|
|