Skip to content

ToioCoreCube.disconnect()で切断されない #8

@nrskd

Description

@nrskd

概要

macOSにて下記コードを動かした際、ToioCoreCube.disconnect() を呼んでも切断が実行されないようでした。

おそらく、bleakのバージョンが1.0.0に上がった際の変更に関連しているかと思います。(詳しくは後述します)

再現コード

import asyncio
from toio import ToioCoreCube

async def scan_and_connect():
    cube = ToioCoreCube()
    await cube.scan()
    await cube.connect()
    print("connnected")

    await asyncio.sleep(3)

    await cube.disconnect()
    print("disconnnected")  # このタイミングでは切断されない

    await asyncio.sleep(3)
    # コードの終了時に切断される

if __name__ == "__main__":
    asyncio.run(scan_and_connect())

動作環境

Python: 3.11.3
OS: macOS 15.6.1
toio.py: 1.1.0
bleak: 1.1.0

調査結果

確認したところ、接続後もBleCube.connectedFalseとなっているようでした。(下記のwarningが出ていました)
https://github.com/toio/toio.py/blob/main/toio/device_interface/ble.py#L99

cubeへの接続時にBleakClient.connect()の返り値がBleCube.connectedに代入されますが、
https://github.com/toio/toio.py/blob/main/toio/device_interface/ble.py#L86

bleakがバージョン1.0.0でBleakClient.connect()の返り値をNoneに固定しており、この影響で常にBleCube.connectedFalseに評価されているようです。
hbldh/bleak@28e4f53

BleakClient.connect()の返り値ではなく、BleakClient.is_connectedを使用するか、BleakClient.connect()でexceptionが出ない場合は常にTrueとして更新する形が良いかと思いました。

 

以上になります。ご確認よろしくお願いいたします。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions