Bluetooth GATT Characteristic Reference
PnP ID (0x2A50)
The PnP_ID characteristic is a set of values that used to create a device ID value that is unique for this device. Included in the characteristic is a Vendor ID Source field, a Vendor ID field, a Product ID field and a Product Version field. These values are used to identify all devices of a given type/model/version using numbers.
Quick Summary
Payload length is 7 bytes. This page is generated from official GATT XML and presented as implementation-ready guidance.
At a Glance
Key reference details for BLE implementation, interoperability testing, and AI-assisted troubleshooting.
| Property | Value |
|---|---|
| Name | PnP ID |
| UUID | 0x2A50 |
| Type | org.bluetooth.characteristic.pnp_id |
| XML Root | Characteristic |
| Source File | org.bluetooth.characteristic.pnp_id.xml |
| Field Count | 4 |
Field Specification
Parsed field definitions from the source XML value structure.
| Field | Requirement | Format | Unit | Exponent | Notes |
|---|---|---|---|---|---|
| Vendor ID Source | Mandatory | uint8 | - | - | Identifies the source of the Vendor ID field |
| Vendor ID | Mandatory | uint16 | - | - | Identifies the product vendor from the namespace in the Vendor ID Source |
| Product ID | Mandatory | uint16 | - | - | Manufacturer managed identifier for this product |
| Product Version | Mandatory | uint16 | - | - | Manufacturer managed version for this product |
Byte Layout and Decode
Payload length is 7 bytes.
function decodePayload(dataView, offset = 0) {
const vendor_id_source = dataView.getUint8(offset + 0);
const vendor_id = dataView.getUint16(offset + 1, true);
const product_id = dataView.getUint16(offset + 3, true);
const product_version = dataView.getUint16(offset + 5, true);
return { vendor_id_source, vendor_id, product_id, product_version };
}
Use Cases and Integration Notes
BLE Telemetry
Map characteristic values into dashboards and alerts for device observability.
Firmware Regression
Compare decoded fields across builds to detect protocol or scaling changes.
App Integration
Build stable parsing paths that convert raw payloads into typed app models.
Implementation Checklist
- Validate payload length and mandatory fields before decode.
- Decode with Bluetooth-specified signedness, unit, and exponent handling.
- Convert units at presentation boundaries to avoid drift in business logic.
- Persist raw packets and decoded values for reproducible troubleshooting.
FAQ
What is PnP ID in Bluetooth GATT?
PnP ID is defined as a Bluetooth GATT characteristic entry with type org.bluetooth.characteristic.pnp_id and UUID 0x2A50.
What UUID identifies PnP ID?
The UUID for PnP ID is 0x2A50.
How should I parse PnP ID?
Payload length is 7 bytes.
Where does this definition come from?
This page is generated from the Bluetooth SIG mirror XML in the oesmith/gatt-xml repository.
How does this page support BLE implementation?
The page combines structured tables, practical Q&A, and JSON-LD metadata to help teams validate integrations and troubleshoot consistently.