Document incoming BLE tuning and refine cancellation test

This commit is contained in:
evgeny committed 2026-10-30 23:05:52 +01:00
1 parent 2902602d7f
commit ca2bebcbd3
2 files changed
+17 -8

No files matched your search

+13 -5
View File
@@ -177,10 +177,15 @@ GATT-клиент использует WriteValueWithResultAsync, сервер
NotifyValueAsync(value, subscribedClient): DATA/ACK — notify-only, INVITE — indicate-only.
DATA/ACK пишут с WriteWithoutResponse и подписываются на Notify; INVITE сохраняет
WriteWithResponse/Indicate. Сервер отвечает Respond только на WriteWithResponse.
После открытия исходящего GATT при наличии IBluetoothLEDevice6 (Windows 11)
запрашивается ThroughputOptimized. Request хранится до close линка и закрывается
отдельно. GetConnectionParameters/GetConnectionPhy и события изменений логируют
фактический интервал/latency/timeout и TX/RX PHY. Установка 2M этим API не доступна;
В обеих ролях при наличии IBluetoothLEDevice6 (Windows 11) запрашивается
ThroughputOptimized. Для входящего link BluetoothLEDevice получается через
FromIdAsync(session.DeviceId().Id()), без discovery и нового подключения.
Этот запрос независим от DATA; отказ настройки логируется и не закрывает GATT.
При close запрос получения device отменяется, device и throughput request закрываются;
запоздавший результат закрытого link освобождается без изменения других соединений.
Request хранится до close линка. DEBUG выводит запрошенный диапазон интервалов,
latency/timeout. GetConnectionParameters/GetConnectionPhy и события изменений логируют
на INFO роль и фактический интервал/latency/timeout и TX/RX PHY. Установка 2M этим API не доступна;
Windows выбирает PHY с peer. Отсутствие/отказ API не ломает GATT-подключение.
Результаты WinRT сериализуются в uasync через bounded mailbox (256 событий).
Опоздавшие callbacks используют weak ownership и ID, закрытые handles не трогают.
@@ -222,7 +227,10 @@ test_ble_bluez: отдельный dbus-run-session с подставным Blue
test_ble_winrt (Windows): объявления с настоящим QueryInterface без EventArgs2 (1809)
и с EventArgs2 (2004), сохранение адреса/типа; настоящий mailbox и hresult_error без радио; исключение
одного link не останавливает другого, ошибка radio прекращает доставку batch,
shutdown отменяет диагностический таймер, posted_task и поздние callbacks. Тест можно запускать в Wine;
shutdown отменяет диагностический таймер, posted_task и поздние callbacks.
Входящая настройка скорости проверяет независимость от DATA при успехе, отказе,
NULL и исключении, закрытие device и гонку отмены с поздним результатом.
Тест можно запускать в Wine;
он не проверяет драйвер, доступность Bluetooth API и физическую передачу.
ble_probe 3: ручная проверка реального радио (scan, GATT registration, публикация
и замена тестового manufacturer-объявления); не подключается к чужим устройствам.
+4 -3
View File
@@ -104,9 +104,10 @@ static void incoming_speed(UASYNC* ua) {
s->close(7); CHECK(speed->cancelled == 1);
speed->finish(AsyncStatus::Completed); uasync_poll(ua, 0);
CHECK(device->closed == 1 && !s->link(7) && s->link(9) && !s->failed && !owner.link_failures);
s->tune_incoming(*s->link(9), speed.as<IAsyncOperation<BluetoothLEDevice>>());
s->shutdown(); CHECK(speed->cancelled == 2);
speed->finish(AsyncStatus::Canceled); uasync_poll(ua, 0);
auto pending = make_self<TestSpeedOperation>();
s->tune_incoming(*s->link(9), pending.as<IAsyncOperation<BluetoothLEDevice>>());
s->shutdown(); CHECK(pending->cancelled == 1);
pending->finish(AsyncStatus::Canceled); uasync_poll(ua, 0);
CHECK(s->events.empty() && !s->posted && !owner.radio_failures && !owner.link_failures);
DEBUG_INFO(CAT, "WinRT test PASS: incoming speed preserves DATA on success/failure, closes device and cancels late/shutdown work");
}