You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bluetooth Low Energy (BLE) - Apple Proximity Pairing Message
This document describes how the AirPods BLE "Proximity Pairing Message" is parsed and interpreted in the application. This message is broadcast by Apple devices (such as AirPods) and contains key information about the device's state, battery, and other properties.
Overview
When scanning for BLE devices, the application looks for manufacturer data with Apple's ID (0x004C). If the data starts with 0x07, it is identified as a Proximity Pairing Message. The message contains various fields, each representing a specific property of the AirPods.
Proximity Pairing Message Structure
Byte Index
Field Name
Description
Example Value(s)
0
Prefix
Message type (should be 0x07 for proximity pairing)
0x07
1
Length
Length of the message
0x12
2
Pairing Mode
0x01 = Paired, 0x00 = Pairing mode
0x01, 0x00
3-4
Device Model
Big-endian: [3]=high, [4]=low
0x0E20 (AirPods Pro)
5
Status
Bitfield, see below
0x62
6
Pods Battery Byte
Nibbles for left/right pod battery
0xA7
7
Flags & Case Battery
Upper nibble: case battery, lower: flags
0xB3
8
Lid Indicator
Bits for lid state and open counter
0x09
9
Device Color
Color code
0x02
10
Connection State
Enum, see below
0x04
11-26
Encrypted Payload
16 bytes, not parsed
Field Details
Device Model
Value (hex)
Model Name
0x0220
AirPods 1st Gen
0x0F20
AirPods 2nd Gen
0x1320
AirPods 3rd Gen
0x1920
AirPods 4th Gen
0x1B20
AirPods 4th Gen (ANC)
0x0A20
AirPods Max
0x1F20
AirPods Max (USB-C)
0x0E20
AirPods Pro
0x1420
AirPods Pro 2nd Gen
0x2420
AirPods Pro 2nd Gen (USB-C)
Status Byte (Bitfield)
Bit
Meaning
Value if Set
0
Right Pod In Ear (XOR logic)
true
1
Right Pod In Ear (XOR logic)
true
2
Both Pods In Case
true
3
Left Pod In Ear (XOR logic)
true
4
One Pod In Case
true
5
Primary Pod (1=Left, 0=Right)
true/false
6
This Pod In Case
true
Ear Detection Logic
The in-ear detection uses XOR logic based on:
Whether the right pod is primary (areValuesFlipped)
Whether this pod is in the case (isThisPodInTheCase)