Skip to main content
BlueBus provides full hands-free telephony capabilities by integrating with your BMW’s factory telephone controls and emulating the original BMW phone system on the I-Bus.

Hands-Free Profile (HFP)

The Bluetooth module implements the Hands-Free Profile to enable calling features.

HFP features

  • Answer and end calls via vehicle controls
  • Caller ID display on all supported screens
  • Outgoing call support with number entry
  • Redial last number
  • Voice recognition (Siri/Google Assistant)
  • Microphone integration with factory telephone microphone
You can enable or disable HFP through the vehicle’s configuration menu (CONFIG_SETTING_HFP). When enabled, BlueBus establishes both A2DP and HFP profiles with your phone (firmware/application/lib/bt.c:183).

Call control

Answering calls

Incoming calls can be answered using:
  • Telephone button on BMBT (Board Monitor)
  • Telephone button on MID (Multi-Information Display)
  • Steering wheel telephone button (MFL)
The BTCommandCallAccept function (firmware/application/lib/bt.c:72) sends the appropriate command to the Bluetooth module (BM83_CMD_MMI_ACTION_ACCEPT_CALL).

Ending calls

Active calls can be terminated using:
  • Same telephone controls used to answer
  • BTCommandCallEnd function sends BM83_CMD_MMI_ACTION_END_CALL

Making calls

You can initiate calls through several methods:1. Dial from phonebook
  • Access downloaded contacts via PBAP
  • Select contact and dial
2. Manual number entry
  • Enter number using vehicle’s input controls
  • Cleaned and validated per ITU-T V.250 standard
  • Supports +, comma (,), #, *, digits 0-9, and A-C
3. Redial last number
  • Quick access via redial function
  • Uses phone’s last dialed number memory
The BTCommandDial function (firmware/application/lib/bt.c:110) handles number validation and sends properly formatted dial commands.

Redial functionality

The redial feature uses the phone’s native last number redial:
BTCommandRedial(bt)  // firmware/application/lib/bt.c:150
This sends either the BC127 AT+BLDN command or the BM83 redial command depending on your Bluetooth module variant.

Caller ID display

Incoming and outgoing call information is displayed on your vehicle’s screen.

Caller ID information

  • Phone number for unknown callers
  • Contact name from phone’s contact list
  • Call status indicators
The caller ID is stored in the bt.callerId field (BT_CALLER_ID_FIELD_SIZE) and displayed using telephone UI commands.

Display formats

BMBT (Board Monitor):
  • Full graphical telephone interface
  • Caller name and number
  • On-call indicators (IBUS_TEL_CHAR_ON_CALL_LEFT, IBUS_TEL_CHAR_ON_CALL_RIGHT)
  • Handsfree icon (IBUS_TEL_CHAR_HANDSFREE_ICON)
MID (Multi-Information Display):
  • Caller information on single line display
  • Scrolling for long names/numbers
IKE (Instrument Cluster):
  • Basic caller information on check control display
  • Call status notifications

Telephone LED control

BlueBus controls the factory telephone LED to indicate system status:
LED StateMeaning
RedBluetooth device disconnected
GreenDevice connected and ready
Green BlinkingIncoming call
YellowCall in progress
LED control uses IBUS_TEL_CMD_LED_STATUS (0x2B) with states defined in firmware/application/lib/ibus.h:424-431.

Voice recognition

Activate your phone’s voice assistant (Siri or Google Assistant) using the vehicle’s voice button.

Activation

  • Press and hold the voice/telephone button on the steering wheel
  • BTCommandToggleVoiceRecognition (firmware/application/lib/bt.c:624) sends the command
  • Voice recognition status tracked: BT_VOICE_RECOG_ON / BT_VOICE_RECOG_OFF
When voice recognition is active, the caller ID field displays “Voice Assistant” and the system enters voice recognition mode for audio routing.

Microphone configuration

BlueBus uses your vehicle’s factory telephone microphone with configurable gain settings.

Microphone settings

Gain control:
  • Adjustable gain levels (CONFIG_SETTING_MIC_GAIN)
  • Preamp settings (CONFIG_SETTING_MIC_PREAMP)
  • Bias voltage (CONFIG_SETTING_MIC_BIAS)
Gain adjustment:
  • BM83CommandMicGainUp / BM83CommandMicGainDown functions
  • Multiple gain levels in BTBM83MicGainTable
  • Stored in EEPROM for persistence

Audio routing

During calls, audio is routed through:
  • Input: Factory telephone microphone
  • Output: Vehicle speakers (with volume control)
  • Mode: SCO (Synchronous Connection-Oriented) link for voice
The bt.scoStatus field tracks SCO connection state (BT_CALL_SCO_CLOSE / BT_CALL_SCO_OPEN).

Telephone modes

BlueBus supports multiple telephone operation modes:

Available modes

Default mode (CONFIG_SETTING_TEL_MODE_DEFAULT):
  • Standard HFP operation
  • Audio muting during calls
  • Full integration with vehicle systems
TCU mode (CONFIG_SETTING_TEL_MODE_TCU):
  • Emulates BMW Assist TCU module
  • Compatible with factory TCU wiring
  • Special volume handling
No-mute mode (CONFIG_SETTING_TEL_MODE_NO_MUTE):
  • Disables automatic audio muting
  • For custom audio setups
Analog mode (CONFIG_SETTING_TEL_MODE_ANALOG):
  • Direct analog audio path
  • Bypasses digital processing

Volume control

Telephone audio volume is independently adjustable:
  • Separate volume setting from music audio
  • Volume offset configuration (CONFIG_SETTING_TEL_VOL)
  • Offset range: 0 to CONFIG_SETTING_TEL_VOL_OFFSET_MAX (0x0F)
  • TCU mode volume (CONFIG_SETTING_DAC_TEL_TCU_MODE_VOL)

Call status tracking

The system tracks detailed call states:
// Call status values (firmware/application/lib/bt.h:33)
BT_CALL_INACTIVE      // No active call
BT_CALL_INCOMING      // Ringing
BT_CALL_OUTGOING      // Dialing
BT_CALL_ACTIVE        // Connected call
Call status from BM83 module (firmware/application/lib/bt/bt_bm83.h:254-260):
  • BM83_DATA_CALL_STATUS_IDLE
  • BM83_DATA_CALL_STATUS_VR (voice recognition)
  • BM83_DATA_CALL_STATUS_INCOMING
  • BM83_DATA_CALL_STATUS_OUTGOING
  • BM83_DATA_CALL_STATUS_ACTIVE
  • BM83_DATA_CALL_STATUS_ACTIVE_CALL_WAITING
  • BM83_DATA_CALL_STATUS_ACTIVE_CALL_HOLD

Phonebook access (PBAP)

BlueBus can download contacts from your phone using the Phone Book Access Profile.

PBAP features

  • Download contacts from phone memory
  • Access call history (incoming, outgoing, missed calls)
  • Support for favorites and speed dial
  • Multiple phonebook objects supported

Phonebook objects

The BTCommandPBAPGetPhonebook function (firmware/application/lib/bt.c:334) supports:
  • BT_PBAP_OBJ_PHONEBOOK - Main contact list
  • BT_PBAP_OBJ_INCOMING - Incoming call history
  • BT_PBAP_OBJ_OUTGOING - Outgoing call history
  • BT_PBAP_OBJ_MISSED - Missed calls
  • BT_PBAP_OBJ_COMBINED - Combined call history
  • BT_PBAP_OBJ_SPEEDDIAL - Speed dial entries
  • BT_PBAP_OBJ_FAVORITES - Favorite contacts
PBAP session management includes open (BTCommandPBAPOpen), close (BTCommandPBAPClose), and abort (BTCommandPBAPAbort) functions for reliable phonebook access.

Build docs developers (and LLMs) love