diff --git a/src/ble/CHIPBleServiceData.h b/src/ble/CHIPBleServiceData.h index 2c803020edd103..6b8647b6966126 100644 --- a/src/ble/CHIPBleServiceData.h +++ b/src/ble/CHIPBleServiceData.h @@ -46,34 +46,20 @@ enum chipBLEServiceDataType */ struct ChipBLEDeviceIdentificationInfo { - enum - { - kMajorVersion = 0, - kMinorVersion = 1, - }; - enum { kPairingStatus_Unpaired = 0, kPairingStatus_Paired = 1, }; - uint8_t BlockLen; - uint8_t BlockType; - uint8_t MajorVersion; - uint8_t MinorVersion; + uint8_t PairingStatus; + uint8_t DeviceDiscriminator[2]; uint8_t DeviceVendorId[2]; uint8_t DeviceProductId[2]; - uint8_t DeviceId[8]; - uint8_t PairingStatus; void Init() { memset(this, 0, sizeof(*this)); - BlockLen = sizeof(*this) - sizeof(BlockLen); // size of all fields EXCEPT BlockLen - BlockType = kchipBLEServiceDataType_DeviceIdentificationInfo; - MajorVersion = kMajorVersion; - MinorVersion = kMinorVersion; } uint16_t GetVendorId(void) { return chip::Encoding::LittleEndian::Get16(DeviceVendorId); } @@ -84,9 +70,19 @@ struct ChipBLEDeviceIdentificationInfo void SetProductId(uint16_t productId) { chip::Encoding::LittleEndian::Put16(DeviceProductId, productId); } - uint64_t GetDeviceId(void) { return chip::Encoding::LittleEndian::Get64(DeviceId); } + uint16_t GetDeviceDiscriminator(void) + { + uint16_t discriminator = chip::Encoding::LittleEndian::Get16(DeviceDiscriminator); + constexpr uint16_t kDiscriminatorMask = 0x7f; + + return discriminator & kDiscriminatorMask; + } - void SetDeviceId(uint64_t deviceId) { chip::Encoding::LittleEndian::Put64(DeviceId, deviceId); } + void SetDeviceDiscriminator(uint16_t deviceDiscriminator) + { + chip::Encoding::LittleEndian::Put16(DeviceDiscriminator, deviceDiscriminator); + DeviceDiscriminator[1] &= 0x0f; + } } __attribute__((packed)); } /* namespace Ble */ diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp index eb108df2aa6c6f..a03235b9cc77cb 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp @@ -756,6 +756,7 @@ GenericConfigurationManagerImpl::_GetBLEDeviceIdentificationInfo(Ble: { CHIP_ERROR err; uint16_t id; + uint16_t discriminator = 0x0ABC; // FIXME: use discriminator from factory data deviceIdInfo.Init(); @@ -766,10 +767,7 @@ GenericConfigurationManagerImpl::_GetBLEDeviceIdentificationInfo(Ble: err = Impl()->_GetProductId(id); SuccessOrExit(err); deviceIdInfo.SetProductId(id); - -#if CHIP_CONFIG_ENABLE_FABRIC_STATE - deviceIdInfo.SetDeviceId(FabricState.LocalNodeId); -#endif + deviceIdInfo.SetDeviceDiscriminator(discriminator); deviceIdInfo.PairingStatus = Impl()->_IsPairedToAccount() ? Ble::ChipBLEDeviceIdentificationInfo::kPairingStatus_Paired : Ble::ChipBLEDeviceIdentificationInfo::kPairingStatus_Unpaired; diff --git a/src/platform/nRF5/BLEManagerImpl.cpp b/src/platform/nRF5/BLEManagerImpl.cpp index 3000af5d5d23bf..45ce074c113c07 100644 --- a/src/platform/nRF5/BLEManagerImpl.cpp +++ b/src/platform/nRF5/BLEManagerImpl.cpp @@ -253,7 +253,7 @@ CHIP_ERROR BLEManagerImpl::_SetDeviceName(const char * devName) } else { - snprintf(devNameBuf, sizeof(devNameBuf), "%s%04" PRIX32, CHIP_DEVICE_CONFIG_BLE_DEVICE_NAME_PREFIX, (uint32_t) 0); + snprintf(devNameBuf, sizeof(devNameBuf), "%s%04" PRIX32, CHIP_DEVICE_CONFIG_BLE_DEVICE_NAME_PREFIX, (uint32_t) 0xabcd); devNameBuf[kMaxDeviceNameLength] = 0; }