Characteristics
Service Type
Required on all
What We Cover in Part 2
Part 2 zooms into the structural layout of AICS. You will understand why AICS is declared as a Secondary Service, what it means to be an Included Service, how all six characteristics are organized, what properties each one has, and why encryption is required on every single characteristic.
Service Declaration — Secondary & Included
When you define a GATT service, you write a service declaration attribute into the attribute table. This declaration tells clients: “Here starts a new service, and its UUID is X.” For most services you are familiar with (Heart Rate, Battery, etc.) the declaration type is Primary Service.
AICS is different. Its declaration type is Secondary Service. A Secondary Service exists to be referenced by other services — it cannot be used standalone. The rule from the specification is: AICS shall only be instantiated as an included service. This means a Primary Service such as the Volume Control Service (VCS) will have an Include Declaration pointing at the AICS Secondary Service.
| ATT Handle | Attribute Type UUID | Attribute Value |
|---|---|---|
| 0x0001 | 0x2800 (Primary Service) | UUID of Volume Control Service |
| 0x0002 | 0x2802 (Include Declaration) | Handle=0x0010, End=0x001F, UUID of AICS |
| 0x0010 | 0x2801 (Secondary Service) | UUID of Audio Input Control Service |
| 0x0011 | 0x2803 (Char Declaration) | Properties=Read|Notify, Handle=0x0012, UUID of Audio Input State |
| 0x0012 | Audio Input State UUID | [Gain_Setting][Mute][Gain_Mode][Change_Counter] |
| … | … (remaining AICS characteristics) | … |
Multiple AICS Instances — One Per Audio Input
A single device can have multiple AICS instances. Each instance represents one audio input. The client uses the Audio Input Description characteristic (a plain UTF-8 string) to figure out which instance belongs to which physical input.
All Six AICS Characteristics at a Glance
Every AICS instance contains exactly six characteristics, all Mandatory (M). Here is what each one does and the permitted operations on it. Every characteristic requires link-layer encryption — you cannot access any of them over an unencrypted connection.
| # | Characteristic Name | Req | Mandatory Properties | Optional Properties | Security |
|---|---|---|---|---|---|
| 1 | Audio Input State | M | Read, Notify | None | Encryption Required |
| 2 | Gain Setting Properties | M | Read | None | Encryption Required |
| 3 | Audio Input Type | M | Read | None | Encryption Required |
| 4 | Audio Input Status | M | Read, Notify | None | Encryption Required |
| 5 | Audio Input Control Point | M | Write | None | Encryption Required |
| 6 | Audio Input Description | M | Read, Notify (C.1) | Write Without Response, Notify | Encryption Required |
Visual Service Map — Characteristic Relationships
These six characteristics do not work in isolation. The diagram below shows how they relate. The Audio Input State characteristic is the central piece — everything else either limits what values it can hold, or lets the client change it.
|
Gain Setting Properties
Read-only static
Sets valid range for Gain_Setting Units Min Max
Audio Input Type
Read-only static
Source type: mic, line-in, BT stream Audio Input Description
Human-readable label
e.g., “Left Mic”, “Line In” |
constrains
& labels |
Audio Input State
Read + Notify
Gain_Setting Mute Gain_Mode Change_Counter
Audio Input Status
Read + Notify
Active (0x01) or Inactive (0x00) |
writes to
|
Audio Input Control Point
Write-only
Client sends opcodes here 0x01 Set Gain
0x02 Unmute 0x03 Mute 0x04 Manual Mode 0x05 Auto Mode |
Audio Input Type — What Values Are Possible?
The Audio Input Type characteristic holds a single byte whose meaning is defined in the Bluetooth SIG Assigned Numbers document. The most common values you will see in practice are:
| Hex Value | Input Type Name | Typical Device Example |
|---|---|---|
| 0x00 | Unspecified | Generic device, type not defined |
| 0x01 | Bluetooth (Isochronous Stream) | LE Audio isochronous stream from another BT device |
| 0x02 | Microphone | Built-in or external microphone |
| 0x03 | Analog (Line In) | 3.5mm jack or RCA line input |
| 0x04 | Digital | S/PDIF, I2S digital input |
| 0x05 | Ambient / Environment | Hearing aid passthrough microphone |
| 0x06 | Local / Internal | Audio mixed internally on the device |
Audio Input Status — Active or Inactive
The Audio Input Status tells the client whether the audio input is currently active (processing audio) or inactive (disconnected, disabled, or off). This is separate from mute — an inactive input is not producing audio at all; a muted input is active but silenced at output.
| Status Value | Mute Field | What Is Happening | Audio Output |
|---|---|---|---|
| Active (0x01) | Not Muted (0) | Microphone is powered and capturing audio; output is passing through with current gain | ▶ SOUND |
| Active (0x01) | Muted (1) | Microphone is powered and capturing audio; output is silenced by software mute | 🔇 MUTED |
| Inactive (0x00) | Any | The audio input is powered off, physically disconnected, or the stream source has ended | ⏹ NOTHING |
Security — Why Encryption is Required on Every Characteristic
All six AICS characteristics are marked Encryption Required. This means the BLE link must be encrypted (bonding or at minimum just-works pairing with encryption) before the server will respond to any ATT operation. If a client attempts to read or write without encryption, the server returns ATT error code 0x0F (Insufficient Encryption).
The reason is straightforward: AICS controls the microphone gain of medical-grade and privacy-sensitive devices like hearing aids. You do not want a random nearby device to be able to silently mute someone’s hearing aid or boost their microphone gain without consent.
|
GATT Client (Phone)
1. Pair & encrypt link
(SMP pairing completes) 3. ATT Read Request
Handle: 0x0012 5. Receives: [03][00][02][07]
(Gain=3, NotMuted, Manual, CC=7) |
⇆
Encrypted BLE
ATT over L2CAP |
GATT Server (Hearing Aid)
2. SMP keys exchanged
Link now encrypted 4. Checks: link encrypted? YES
Returns ATT Read Response If NOT encrypted: returns
ATT Error 0x0F (Insuff. Enc.) |
Quick Reference — Characteristic Properties Summary
Key Terms in Part 2
Next: Part 3 — Audio Input State Deep Dive
Part 3 explains every bit of the 4-byte Audio Input State characteristic — Gain, Mute, Mode, and the Change_Counter anti-race mechanism.
