Open2
Bluetooth LE のアドレスタイプを判別する

Bluetooth LEのデバイスがアドバタイズしているとき、そのアドレス(AdvA)には4種類ある:
- RPA: resolvable private address
- NRPA: non-resolvable private address
- static address
- パブリックアドレス
最初の3つはランダムアドレスで、適当なタイミングで再生成される。RPAはbondingして鍵を交換しておけば、それを使って対象のアドレスが変化しても追跡が可能になっている(アドレスがシードとハッシュになっている)。
... で、ここまでの話と "アドレスの上位ビットで判別できる" という話自体は検索すれば0.5秒で出るわけだけど、実際の文字列からアドレス種別を判別する方法の解説がなぜか無い気がする。

Zephyrのコード
NordicのBluetoothデバイス等でRTOSとして使用されているZephyrのコードにこの辺の実装がある。
アドレスの文字列変換
メモリ上の最終バイトである val[5]
が最初に表示されていることに注意する。
判別
val[5]
の上位ビットで判別している。つまり、文字列なら最初に表記されたバイトの最上位ビットで判別できるということになる。