6

When I run bluetoothctl info it shows me information about the COWIN E9 headset I have connected,

Device REDACTED (public)
    Name: COWIN E9
    Alias: COWIN E9
    Class: 0x00240418
    Icon: audio-card
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Vendor specific           (REDACTED)
    UUID: Serial Port               (REDACTED)
    UUID: Headset                   (REDACTED)
    UUID: Audio Sink                (REDACTED)
    UUID: A/V Remote Control Target (REDACTED)
    UUID: Advanced Audio Distribu.. (REDACTED)
    UUID: A/V Remote Control        (REDACTED)
    UUID: Handsfree                 (REDACTED)
    UUID: PnP Information           (REDACTED)
    UUID: Generic Access Profile    (REDACTED)
    UUID: Generic Attribute Profile (REDACTED)
    UUID: Battery Service           (REDACTED)
    UUID: Google                    (REDACTED)
    Modalias: bluetooth:REDACTED

Why does this headset have a UUID: Google, what are these UUIDs for? Why does one headset need so many unique identifiers? Are these provided by the bluetooth controller on the headset?

Evan Carroll
  • 30,763
  • 48
  • 183
  • 315

2 Answers2

3

The Bluetooth UUIDs cover completely different purposes. Ranges of the 16 bit UUID are reserved for

  • Protocol Identifiers (example: 0x000C for HTTP)
  • Service Classes and Profiles (example: 0x1108 for Headset)
  • GATT Services (example: 0x180F for Battery)
  • Units (for my business, Bluetooth sensors, for example: 0x272F for degree Celsius)
  • GATT Characteristics and Object Types (example: 0x2A1C for temperature measurement)
  • Bluetooth SIG member (example: 0xFCF1 and others for Google. Of course not every member has an own UUID, we don't have one and you usually don't need it. Others have a bunch of UUIDs.)

and some more that I don't care.

So those UUIDs have a completely different range of meaning, but all serve one purpose: interoperatability. On handshake devices interchange there UUIDs to get to know each other. When an instrument of ours is searching for temperature sensors, it can scan all devices that support it, not only our own sensors.

Not every headset supports remote control or battery services, so the UUIDs help to understand what your application can expect from a certain device.

This also plays an important role in certification by the Bluetooth SIG. You have to prove that you correctly support all protocols that you advertise.

Philippos
  • 13,453
3

You posted several related questions.

What are these UUIDs for?
They are used for identifying types, services, and profiles that the Bluetooth Special Interest Group (Bluetooth SIG) defines and specifies. Note that a UUID is 128-bit. For efficiency, and because 16 bytes would take a large chunk of the 27-byte data payload length of the Link Layer, the BLE (Bluetooth Low Energy) specification adds two additional shortened UUID formats: 16-bit and 32-bit.

Why does one headset need so many unique identifiers?
Because it has many services. UUIDs are not identifiers of the device (your probable guess, source of the question).

Are these provided by the bluetooth controller on the headset?
Yes.

Why does this headset have a UUID: Google?
It might be related to the Google Fast Pair Service, but I am not sure.

See a full list here.

Related:

  1. https://www.bluetooth.com/specifications/assigned-numbers/
  2. https://stackoverflow.com/questions/13964342/android-how-do-bluetooth-uuids-work
  • "You posted several related questions." ? What other question is related? – Evan Carroll Apr 10 '22 at 17:34
  • 3
    @EvanCarroll - I mean, several related questions within a single post. So I went answering one by one. Note that I have seen before some kind of rejection by mods and others when there is "more than one question" in a post. For me, it is perfectly fine as posted, there is no lack of focus or else. You don't know what you don't know, and that is why you are asking. +1 – sancho.s ReinstateMonicaCellio Apr 10 '22 at 18:15