Telephone Bearer Service (TBS)

 

Telephone Bearer Service (TBS)
Complete BLE Tutorial Series — From Spec to BlueZ Implementation
6
Chapters
16
Characteristics
BLE
LE Audio Profile
BlueZ
Linux Stack

What Is This Tutorial Series?

The Telephone Bearer Service (TBS) is a Bluetooth LE GATT-based service that exposes phone call control and status over BLE. It is part of the LE Audio ecosystem and replaces the traditional Hands-Free Profile (HFP) role for LE-connected audio peripherals such as wireless earbuds, smart speakers, and conference room systems.

This tutorial series takes you from zero to a working understanding of TBS — covering the specification architecture, every characteristic, the call state machine, call control opcodes, and finally how to implement a TBS GATT server using the BlueZ Linux Bluetooth stack.

Whether you are an embedded systems engineer building a BLE audio device, a firmware developer working on headset firmware, or a Linux developer working with BlueZ, this series gives you the practical depth you need.

Who Should Read This?

BLE Firmware Developers
Linux / BlueZ Engineers
Audio Profile Implementors
Embedded Systems Students

Prerequisites

You should be comfortable with BLE fundamentals (GAP, GATT, ATT), have a basic understanding of C programming, and ideally have some exposure to BlueZ or a BLE stack. Understanding of GATT characteristics, descriptors, and notifications will help you get the most from Chapters 3–6.

Topics Covered in This Series

Telephone Bearer Service TBS Generic Telephone Bearer Service GTBS BLE Call Control Point LE Audio Profile GATT Characteristics Call State Machine Bearer Signal Strength BlueZ TBS Implementation CCID Content Control ID Bearer UCI Multi-Party Calling BLE BLE Notifications GATT Termination Reason Incoming Call BLE

Where TBS Fits in the BLE Stack

TBS Position in the BLE / LE Audio Protocol Stack
Phone App / VoIP App (Cellular, WhatsApp, Teams) BLE Headset / Speaker (Client)
↕ GATT Server ↕ GATT Client
TBS / GTBS — Telephone Bearer Service (GATT Profile)
GATT — Generic Attribute Profile
ATT — Attribute Protocol
L2CAP — Logical Link Control and Adaptation Protocol
BLE Link Layer / HCI / Controller

Course Chapters

Chapter 1 — Introduction to Telephone Bearer Service

Understand why TBS was created, how it compares to HFP, and the foundational GATT concepts it builds on. Covers the two services (TBS and GTBS), application error codes, byte ordering, and all key terminology.

Why TBS? TBS vs HFP GATT Sub-Procedures TBS Terminology Application Error Codes

Read Chapter 1 →

Chapter 2 — TBS Service Architecture: TBS vs GTBS

Deep dive into service declaration, how a phone can run multiple TBS instances for different call apps, the role of GTBS as the aggregated single-point entry, and the complete call state machine for a single call.

Service Declaration TBS vs GTBS Multiple Bearers Call State Machine Multi-Party Calling

Read Chapter 2 →

Chapter 3 — Bearer Characteristics Deep Dive

Covers all bearer information characteristics: Provider Name, UCI, Technology, URI Schemes Supported List, Signal Strength, Reporting Interval, and Bearer List Current Calls. Includes packet formats and BlueZ code.

Bearer Provider Name Bearer UCI Bearer Technology URI Schemes List Signal Strength Current Calls List

Read Chapter 3 →

Chapter 4 — Call State Characteristics

Explore the characteristics that track live call status: Content Control ID (CCID), Status Flags, Incoming Call Target Bearer URI, the Call State array characteristic, and the Call_Flags bitmask that describes each active call.

Content Control ID Status Flags Incoming Call Target URI Call State Array Call Flags Bitmask

Read Chapter 4 →

Chapter 5 — Call Control Point and Opcodes

The heart of TBS: how the client controls calls via the Call Control Point. Covers all six opcodes (Accept, Terminate, Local Hold, Local Retrieve, Originate, Join), CCP notification result codes, optional opcodes, Termination Reason, Incoming Call, and Call Friendly Name.

CCP Opcodes Accept / Terminate Local Hold / Retrieve Originate / Join Result Codes Termination Reason

Read Chapter 5 →

Chapter 6 — BlueZ TBS Implementation Guide

Hands-on implementation guide using the BlueZ Linux Bluetooth stack. Covers BlueZ TBS source files, registering TBS as a GATT service, implementing characteristic handlers, sending call state notifications, handling CCP writes, and testing with bluetoothctl and nRF Connect.

BlueZ GATT Server tbs.c / tbs.h Characteristic Handlers CCP Write Handler Notification Sending Testing BlueZ TBS

Read Chapter 6 →

Ready to Master BLE Phone Call Control?

Start with Chapter 1 to build your foundation, or jump directly to the chapter relevant to your current work.

Start Chapter 1 Jump to BlueZ Code

Leave a Reply

Your email address will not be published. Required fields are marked *