2016-12-12 56 views
2

BlueZ APIを使用してBLEデバイス用のC言語でプログラムを書く方法を教えてきました。しかし、私はsockaddr_l2構造体の1つの特定の側面に困惑しているようです。私が使用しています定義は以下の通りです:Bluetooth LE L2CAP CID vs. PSM

struct sockaddr_l2 { 
    sa_family_t l2_family; 
    unsigned short l2_psm; 
    bdaddr_t l2_bdaddr; 
    unsigned short l2_cid; 
    uint8_t  l2_bdaddr_type; 
}; 

は今、一部のために私は理解していない:l2_psmとl2_cidの違いは何ですか?これは私が今までに集めたものです:

PSMは "プロトコルサービスマルチプレクサ"の略で、L2CAP接続の "ポート"です。出典:Albert Huang著、プログラマー向けBluetooth

CIDは、「チャネル識別子」の略で、デバイスの論理チャネルのエンドポイントを表すローカル名です。出典:http://ecee.colorado.edu/~ecen4242/marko/Bluetooth/Bluetooth/SPECIFICATION/L2CAP.html

私はこれらの定義に答えがあると確信していますが、私はCIDの定義を頭に入れていないようです。 PSMとCIDの違いをもっと包括的に説明することはできますか?

感謝:)

答えて

1

私はBluetooth通信には専門家でないが、私は現在、モバイルアプリとLinuxベースのサーバ間のL2CAP LEベースの通信に取り組んでいます。

この開発作業中、私はBluetoothのSIG仕様であるCore 4.2でConnection-oriented ChannelsとConnectionless Data Channelと呼ばれるものを見つけました。 https://www.bluetooth.com/specifications/bluetooth-core-specification

私が理解していることは、部分的には、接続指向のチャネルは、名前が示すように、接続指向であることです。つまり、各サービスはチャネルに関連付けられています。

コネクションレスチャネルの場合、psmはマルチプレクサとして機能し、複数のサービスがコネクションレスチャネル0x0002を使用することを容易にします。したがって、psm(プロトコル/サービスマルチプレクサ)は基本的にこのチャネルのポート番号に似ています。

これは私の理解と観察です。私はこれが初めてで、間違っているかもしれません。人々がこのコンセプトの理解を説明するのを心配していた実際のドキュメンテーションやフォーラムは見ないので、私はこれを書くよう努力しました。多いほどもっと良いでしょう。