我一直在教自己如何使用BlueZ API用C语言为BLE设备编写程序。然而,我似乎对sockaddr_l2结构的一个特定方面感到困惑。我所用的定义如下:
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连接的“端口”。来源:面向程序员的蓝牙,作者:阿尔伯特·黄
CID代表“通道标识符”,是表示设备上逻辑通道端点的本地名称。来源:http://ecee.colorado.edu/~ecen4242/marko/Bluetooth/Bluetooth/SPECIFICATION/L2CAP.html
现在我确信答案是在这些定义中,但我似乎无法理解CID的定义。有人能以更全面的方式向我解释PSM和CID之间的区别吗?
谢谢:)
发布于 2020-04-30 14:15:46
从2002年开始,在合成主题的蓝牙应用程序开发人员指南中发现了以下内容
问: L2CAP PSM值和L2CAP CID之间有什么区别? A:协议服务复用器(PSM)值标识用于在L2CAP信道上通信的协议。实际上,这定义了使用通道的更高层。同一高层的多个实例可能使用不同的L2CAP通道,但它们都将由相同的PSM值标识。每个单独的通道都通过其信道ID (CID)进行唯一标识。高层可以通过指定0x0003的PSM值来请求到远程RFCOMM实体的L2CAP连接。然后,本地和远程L2CAP层为该链接分配CID。CID用于实际识别RFCOMM层之间发送的通信量。
https://stackoverflow.com/questions/41106770
复制相似问题