Post

Replies

Boosts

Views

Activity

BLE peripheral connection intermittently enters supervision-timeout loop with CBPeripheralManager
I am developing a macOS app that acts as a BLE peripheral using CBPeripheralManager. On one MacBook M2, an established BLE connection to a central drops approximately every 14 seconds indefinitely. The disconnect is reported as a supervision timeout. Immediately before the timeout, the controller reports excellent RF conditions, but the peripheral stops receiving packets and all transmitted packets become unacknowledged. I can reproduce this with a minimal ~150-line sample project that publishes one service with a single notify characteristic and does nothing else. I use LightBlue on an iPhone as the central. Hardware Failing: MacBook Air 15" M2 macOS 26.6 and macOS 26.6.2 BLE peripheral implemented with CBPeripheralManager Bluetooth controller: BCM_4387, firmware 23.5.636.5347, PCIe Working: MacBook Pro 16" M1 macOS 26.6 identical application/build On the MacBook M1, the identical sample holds the connection indefinitely. I tested with the same iPhone and LightBlue central, as well as another iPhone. The affected MacBook M2 Mac also worked correctly for approximately one month before the problem appeared suddenly after a normal restart. There was no application or OS update immediately before the failure. Updating the affected MacBook from macOS 26.6 to 26.6.2 did not change the behavior. Reproduction: Run the minimal CBPeripheralManager sample on the M2. Publish one service with one notify characteristic. Connect from LightBlue on an iPhone. Subscribe to the characteristic. Leave the connection idle. The connection repeatedly drops after approximately 14 seconds. Running the identical sample on the MacBook M1 with the same macOS version and the same central works indefinitely. On the failing Mac, bluetoothd reports: lsto: 72 (720 ms supervision timeout) RSSI approximately -46 dBm SNR 60+ receiver initially synchronized during the final ~30 connection events before each timeout: zero packets received every transmitted packet is unacknowledged So this does not appear to be a marginal-RF situation. The peripheral appears to stop receiving the central's connection-event packets, after which its own transmissions are no longer acknowledged and the controller eventually declares a supervision timeout. I have already tried: resetting Bluetooth settings restarting the Mac restarting bluetoothd restarting rapportd disabling Handoff (was already disabled) disabling AirPlay (was already disabled) Safe Mode Bluetooth/system diagnostics None changed the behavior. There are no other applications involved in the reproduction; the minimal sample alone reproduces the problem on MacBook M2, works on MacBook M1 properly. Could anything in CBPeripheralManager usage account for this behavior, such as connection parameters, peripheral latency, or supervision timeout configuration? I have not found a public CBPeripheralManager API that allows the peripheral to configure connection interval, peripheral latency, or supervision timeout. The Generic Access service also appears to be reserved by the system. Given that the identical peripheral application works indefinitely on another MacBook M1 running the same macOS version, could this indicate a Bluetooth controller/firmware or macOS Bluetooth stack issue affecting only some Mac hardware/configurations or system states? I can provide the minimal reproduction project and relevant bluetoothd/Bluetooth controller logs. The sample does not reproduce the issue on the MacBook M1, so the reproduction appears to be dependent on the affected MacBook M2 rather than the application alone.
1
0
364
9h
BLE peripheral connection intermittently enters supervision-timeout loop with CBPeripheralManager
I am developing a macOS app that acts as a BLE peripheral using CBPeripheralManager. On one MacBook M2, an established BLE connection to a central drops approximately every 14 seconds indefinitely. The disconnect is reported as a supervision timeout. Immediately before the timeout, the controller reports excellent RF conditions, but the peripheral stops receiving packets and all transmitted packets become unacknowledged. I can reproduce this with a minimal ~150-line sample project that publishes one service with a single notify characteristic and does nothing else. I use LightBlue on an iPhone as the central. Hardware Failing: MacBook Air 15" M2 macOS 26.6 and macOS 26.6.2 BLE peripheral implemented with CBPeripheralManager Bluetooth controller: BCM_4387, firmware 23.5.636.5347, PCIe Working: MacBook Pro 16" M1 macOS 26.6 identical application/build On the MacBook M1, the identical sample holds the connection indefinitely. I tested with the same iPhone and LightBlue central, as well as another iPhone. The affected MacBook M2 Mac also worked correctly for approximately one month before the problem appeared suddenly after a normal restart. There was no application or OS update immediately before the failure. Updating the affected MacBook from macOS 26.6 to 26.6.2 did not change the behavior. Reproduction: Run the minimal CBPeripheralManager sample on the M2. Publish one service with one notify characteristic. Connect from LightBlue on an iPhone. Subscribe to the characteristic. Leave the connection idle. The connection repeatedly drops after approximately 14 seconds. Running the identical sample on the MacBook M1 with the same macOS version and the same central works indefinitely. On the failing Mac, bluetoothd reports: lsto: 72 (720 ms supervision timeout) RSSI approximately -46 dBm SNR 60+ receiver initially synchronized during the final ~30 connection events before each timeout: zero packets received every transmitted packet is unacknowledged So this does not appear to be a marginal-RF situation. The peripheral appears to stop receiving the central's connection-event packets, after which its own transmissions are no longer acknowledged and the controller eventually declares a supervision timeout. I have already tried: resetting Bluetooth settings restarting the Mac restarting bluetoothd restarting rapportd disabling Handoff (was already disabled) disabling AirPlay (was already disabled) Safe Mode Bluetooth/system diagnostics None changed the behavior. There are no other applications involved in the reproduction; the minimal sample alone reproduces the problem on MacBook M2, works on MacBook M1 properly. Could anything in CBPeripheralManager usage account for this behavior, such as connection parameters, peripheral latency, or supervision timeout configuration? I have not found a public CBPeripheralManager API that allows the peripheral to configure connection interval, peripheral latency, or supervision timeout. The Generic Access service also appears to be reserved by the system. Given that the identical peripheral application works indefinitely on another MacBook M1 running the same macOS version, could this indicate a Bluetooth controller/firmware or macOS Bluetooth stack issue affecting only some Mac hardware/configurations or system states? I can provide the minimal reproduction project and relevant bluetoothd/Bluetooth controller logs. The sample does not reproduce the issue on the MacBook M1, so the reproduction appears to be dependent on the affected MacBook M2 rather than the application alone.
Replies
1
Boosts
0
Views
364
Activity
9h