Skip to main content
BlueBus integrates deeply with your BMW’s I-Bus systems to provide enhanced features beyond basic Bluetooth connectivity. These integrations leverage existing vehicle modules and data sources.

On-Board Computer (OBC) data

BlueBus can display various vehicle sensor data on the vehicle’s screens by monitoring I-Bus messages from the Instrument Cluster Electronics (IKE).

Temperature monitoring

The system monitors and displays multiple temperature sensors: Coolant temperature:
  • Source: IKE temperature update message (IBUS_CMD_IKE_TEMP_UPDATE)
  • Storage: ibus.coolantTemperature (firmware/application/lib/ibus.c:391)
  • Range: 0-127°C (values above 0x7F are ignored)
  • Event: IBUS_SENSOR_VALUE_COOLANT_TEMP
Ambient temperature:
  • Source: IKE temperature update message
  • Storage: ibus.ambientTemperature (signed char)
  • Range: -60°C to +60°C
  • Event: IBUS_SENSOR_VALUE_AMBIENT_TEMP
Oil temperature:
  • Source: Light Control Module I/O diagnostics (E38/E39/E52/E53 only)
  • Calculation: Logarithmic formula based on sensor voltage
  • Offset varies by LCM variant: 310 (standard) or 510 (LCM_IV)
  • Formula: 67.2529 * log(rawTemp) + offset (firmware/application/lib/ibus.c:556)
  • Event: IBUS_SENSOR_VALUE_OIL_TEMP
You can configure which temperature is displayed:
  • CONFIG_SETTING_TEMP_COOLANT (0x01) - Coolant temperature
  • CONFIG_SETTING_TEMP_AMBIENT (0x02) - Outside air temperature
  • CONFIG_SETTING_TEMP_OIL (0x03) - Engine oil temperature
Temperature units (Celsius/Fahrenheit) are also configurable:
  • CONFIG_SETTING_TEMP_CELSIUS (0x00)
  • CONFIG_SETTING_TEMP_FAHRENHEIT (0x01)

Vehicle range

BlueBus monitors the vehicle’s calculated range from the IKE:
  • Parsed from OBC text messages (IBUS_IKE_OBC_PROPERTY_RANGE)
  • Format: “123 KM” or “123 MLS”
  • Storage: ibus.vehicleRange (uint16_t)
  • Parsing: Extracts numeric value, ignores ”---” invalid readings
  • Event: IBUS_SENSOR_VALUE_VEHICLE_RANGE
Code reference: firmware/application/lib/ibus.c:482-497

Speed and RPM data

The system receives real-time speed and RPM updates:
  • Source: IBUS_CMD_IKE_SPEED_RPM_UPDATE (0x18)
  • Event: IBUS_EVENT_IKE_SPEED_RPM_UPDATE
  • Used for speed-dependent features like auto-lock

Gear position

Automatic transmission gear position is monitored:
  • Source: IKE sensor response (IBUS_CMD_IKE_SENSOR_RESP)
  • Storage: ibus.gearPosition (4-bit value)
  • Event: IBUS_SENSOR_VALUE_GEAR_POS
Gear positions defined in firmware/application/lib/ibus.h:533-542:
  • IBUS_IKE_GEAR_PARK (0x0B)
  • IBUS_IKE_GEAR_REVERSE (0x01)
  • IBUS_IKE_GEAR_NEUTRAL (0x07)
  • IBUS_IKE_GEAR_FIRST through IBUS_IKE_GEAR_SIXTH

GPS time synchronization

For vehicles equipped with factory navigation, BlueBus can synchronize the vehicle’s clock with GPS time.

GPS time reception

BlueBus monitors GPS time broadcasts from the navigation system:
// Navigation GPS time message
IBUS_NAV_CMD_GPSTIME (0x1F)
The GPS time data is parsed from the navigation module (firmware/application/lib/ibus.c:633):
  • Hour: BCD format at IBUS_PKT_DB2
  • Minute: BCD format at IBUS_PKT_DB3
  • Day: BCD format at IBUS_PKT_DB4
  • Month: BCD format at IBUS_PKT_DB6
  • Year: BCD format at IBUS_PKT_DB7 and IBUS_PKT_DB8
BlueBus automatically adjusts for the GPS week rollover issue by adding 1024 weeks (in seconds) to the epoch calculation: epoch + (1024 * 604800) (firmware/application/lib/ibus.c:643).

Time synchronization modes

The CONFIG_SETTING_AUTO_TIME setting controls automatic time synchronization:
GPS synchronization (CONFIG_SETTING_AUTO_TIME_GPS, bit 1):
  • Synchronize from factory navigation GPS
  • Automatic correction for GPS week rollover
  • Requires navigation system (IBUS_DEVICE_NAVE)
Phone synchronization (CONFIG_SETTING_AUTO_TIME_PHONE, bit 0):
  • Get time from connected Bluetooth phone
  • Useful for vehicles without navigation
Daylight Saving Time (CONFIG_SETTING_AUTO_TIME_DST, bit 2):
  • Automatic DST adjustment
  • Timezone offset configuration (CONFIG_SETTING_AUTO_TIME_TZ)
Multiple sources can be enabled simultaneously, with GPS taking priority when available.

Timezone configuration

The system supports 32 different timezone offsets (CONFIG_TIMEZONE_COUNT):
  • Stored as index: ConfigGetTimeOffsetIndex() / ConfigSetTimeOffsetIndex()
  • Actual offset: ConfigGetTimeOffset() / ConfigSetTimeOffset() (int16_t minutes)
  • DST flag: ConfigGetTimeDST() / ConfigSetTimeDST()

Park Distance Control integration

BlueBus integrates with the factory PDC (Park Distance Control) system to provide visual feedback.

PDC sensor monitoring

The system monitors eight PDC sensors: Front sensors:
  • frontLeft (ibus.pdc.frontLeft)
  • frontCenterLeft (ibus.pdc.frontCenterLeft)
  • frontCenterRight (ibus.pdc.frontCenterRight)
  • frontRight (ibus.pdc.frontRight)
Rear sensors:
  • rearLeft (ibus.pdc.rearLeft)
  • rearCenterLeft (ibus.pdc.rearCenterLeft)
  • rearCenterRight (ibus.pdc.rearCenterRight)
  • rearRight (ibus.pdc.rearRight)
Sensor values are received via IBUS_CMD_PDC_SENSOR_RESPONSE (0xA0) messages from the PDC module at address 0x60. Invalid/no-obstacle readings return 0xFF (firmware/application/lib/ibus.c:684).

PDC status tracking

The PDC status structure (IBUSPDCStatus_t) tracks:
uint8_t status;        // IBUS_PDC_STATUS_ACTIVE or INACTIVE
uint8_t isUpdated;     // Whether data changed since last reading
uint8_t checksum;      // For detecting data changes
PDC activation is detected from:
  • IBUS_CMD_PDC_STATUS (0x07) - PDC active broadcast
  • Bit 0 of 10th data byte in sensor response - PDC enabled flag

Visual PDC display

BlueBus can display PDC information in multiple locations:
Cluster display (CONFIG_SETTING_PDC_CLUSTER, 0x01):
  • Shows PDC warnings in instrument cluster
  • Uses IKE check control display
Radio display (CONFIG_SETTING_PDC_RADIO, 0x02):
  • Shows PDC information on radio/navigation screen
  • Graphical representation on BMBT
Both displays (CONFIG_SETTING_PDC_BOTH, 0x03):
  • Simultaneous display on cluster and radio
  • Maximum visibility
Disable visual PDC entirely by setting CONFIG_SETTING_VISUAL_PDC to OFF.

Light module integration

BlueBus monitors the Light Control Module (LCM) for various sensor data.

LCM variants

The system auto-detects and supports eight LCM variants:
  • IBUS_LM_LME38 (E38)
  • IBUS_LM_LCM (E39 early)
  • IBUS_LM_LCM_A (E39 mid)
  • IBUS_LM_LCM_II (E39 late/E46/E53)
  • IBUS_LM_LCM_III (E46 facelift)
  • IBUS_LM_LCM_IV (E83/E85/E86)
  • IBUS_LM_LSZ (E6x)
  • IBUS_LM_LSZ_2 (E6x facelift)
Detection via diagnostic response: IBusGetLMVariant() (firmware/application/lib/ibus.c:1381)

Light sensor data

BlueBus monitors LCM sensor voltages: Dimmer (58G) voltage:
  • ibus.lmDimmerVoltage
  • Controls automatic display brightness
Photosensor voltage (LSZ only):
  • ibus.lmPhotoVoltage
  • Ambient light detection
Load sensors (Xenon-equipped vehicles):
  • ibus.lmLoadFrontVoltage
  • ibus.lmLoadRearVoltage
  • Headlight self-leveling
All values retrieved from LCM I/O status (0x0B diagnostic job). For vehicles with factory navigation, additional features are available: Automatic map zoom based on vehicle speed:
  • CONFIG_SETTING_NAV_MAP_DEFAULT - Manual zoom control
  • CONFIG_SETTING_NAV_MAP_SPEED_20 - Auto-zoom at 20 km/h
  • CONFIG_SETTING_NAV_MAP_SPEED_30 - Auto-zoom at 30 km/h
  • CONFIG_SETTING_NAV_MAP_SPEED_50 - Auto-zoom at 50 km/h
  • CONFIG_SETTING_NAV_MAP_TIME_5 - Zoom change every 5 seconds
  • CONFIG_SETTING_NAV_MAP_TIME_10 - Zoom change every 10 seconds
Implemented using IBUS_SES_CMD_NAV_CTRL with IBUS_SES_DATA_NAV_CTRL_SETZOOM. BlueBus can send commands to the navigation system:
IBusCommandSESShowMap()        // Display map screen
IBusCommandSESSetMapZoom()     // Set zoom level (8 levels)
IBusCommandSESRouteFuel()      // Show route fuel consumption  
IBusCommandSESSilentNavigation() // Mute navigation announcements

Silent navigation mode

The CONFIG_SETTING_NAV_SILENT bit (0b10000000) in the NAV setting enables silent navigation mode, preventing voice guidance from interrupting audio playback.

Vehicle type detection

BlueBus auto-detects the vehicle platform:
  • IBUS_VEHICLE_TYPE_E38_E39_E52_E53 (0x01)
  • IBUS_VEHICLE_TYPE_E46 (0x02)
  • IBUS_VEHICLE_TYPE_E8X (0x03)
  • IBUS_VEHICLE_TYPE_R50 (0x04)
Detection via IKE vehicle config response (IBUS_CMD_IKE_RESP_VEHICLE_CONFIG). Vehicle type affects:
  • Oil temperature calculation offset
  • Feature availability
  • UI rendering
  • Module compatibility checks

Build docs developers (and LLMs) love