OSX の Bluetooth LE バグの回避策を見つけようとしています。特に、Bluetooth LE GATT テーブルの読み取りで OSX がどこで問題を起こすかを知りたいです。したがって、 XCode の Hardware IO Tools から PacketLogger でL2CAP パケットを表示しています。
Bluetooth Explorer を使用して Bluetooth LE デバイスに接続すると、3.4.4.9 Read By Group Type Request (uuid=0x2800 «Primary Service»、startingHandle=0x0001、endingHandle=0xffff) が表示され、プライマリ サービスが検出される (または検索される) と予想されます。 Type Value Request (uuid=0x2800, value:uuid of service))、続いて 3.4.4.1 Read By Type Request (uuid=0x2803 «Characteristic») で特性を発見します。これは、(CC2540 を使用して) iPhone からパケットを盗聴したときに表示されるものです。
しかし、OSX では、接続後に PacketLogger (および CC2540) に表示される L2CAP リクエストは次のとおりです。
- タイプ要求による読み取り(attributeType=0x2803、startingHandle=0x001a、endingHandle=0x001a)
- Read By Type Request (attributeType=0x2802 «Include»、startingHandle=0x0001、endingHandle=0x0004)
- タイプ別読み取りリクエスト(attributeType=0x2802、startingHandle=0x0005、endingHandle=0x0009)
- タイプ要求による読み取り(attributeType=0x2802、startingHandle=0x0010、endingHandle=0x0019)
- Read By Type リクエスト(attributeType=0x2802、startingHandle=0x001a、endingHandle=0x001a)
- タイプ要求による読み取り(attributeType=0x2803、startingHandle=0x001a、endingHandle=0x001a)
- Read By Type リクエスト(attributeType=0x2802、startingHandle=0x0021、endingHandle=0x0027)
- タイプ要求による読み取り(属性タイプ = 0x2802、開始ハンドル = 0x002b、終了ハンドル = 0x002e)
これらはサービスを検出するのに十分な要求ではありませんが、Bluetooth Explorer はこの時点ですべてのサービス UUID を一覧表示します。これは、OSX がこの Bluetooth LE デバイス上のサービスの場所を既に認識していることを示しています。blued はデバイス サービスをキャッシュし、起動時にそれらを読み取りますか? もしそうなら、どうすればキャッシュをクリアできますか?
Bluetooth をオフにし、blued を強制終了し、OSX を再起動しようとしましたが、OSX がサービスを再検出するたびに。