Bluetooth LE L2CAP CID vs. PSM
I am no expert in Bluetooth communication, but I am currently working on an L2CAP LE based communication between a mobile app and a linux based server.
During this development work, I came across something called Connection-oriented Channels and Connectionless Data Channel in the bluetooth SIG specification - Core 4.2. Particluarly in this link: https://www.bluetooth.com/specifications/bluetooth-core-specification
As far as what I have understood from reading it partly is that the connection-oriented channels are, as the name suggests, connection oriented. That is, each service is associated with a channel.
In case of a connectionless channel, the psm acts as a multiplexer and facilitates multiple services to use the connectionless channel: 0x0002. Thus, psm(protocol/Service multiplexer) basically is similar to a port number in this channel.
These are just my understanding and observations. I am new to this and maybe wrong. I made an effort to write this since I see no real documentation or forum where people have cared to explain their understanding of this concept. The more the merrier.
Found the following in Syngress' Bluetooth Application Developer Guide from 2002
Q: What is the difference between an L2CAP PSM value and an L2CAP CID?
A: Protocol Service Multiplexor (PSM) values identify the protocol used to communicate over an L2CAP channel. In effect, this defines the higher layer that uses the channel. Multiple instances of the same higher layer may use different L2CAP channels, but they will all be identified by the same PSM value. Each separate channel is uniquely identified by its Channel ID (CID). A higher layer may request an L2CAP connection to a remote RFCOMM entity by specifying a PSM value of 0x0003. The local and remote L2CAP layers then assign CIDs to this link. The CIDs are used to actually identify traffic sent between RFCOMM layers.