Skip to content

Commit

Permalink
[ble] update ble advertisement packet format
Browse files Browse the repository at this point in the history
Update the packet format to be coherent with the current specification.
  • Loading branch information
gjc13 committed Jul 20, 2020
1 parent bca8b6e commit 780b472
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 23 deletions.
32 changes: 14 additions & 18 deletions src/ble/CHIPBleServiceData.h
Original file line number Diff line number Diff line change
Expand Up @@ -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); }
Expand All @@ -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 */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,7 @@ GenericConfigurationManagerImpl<ImplClass>::_GetBLEDeviceIdentificationInfo(Ble:
{
CHIP_ERROR err;
uint16_t id;
uint16_t discriminator = 0x0ABC; // FIXME: use discriminator from factory data

deviceIdInfo.Init();

Expand All @@ -766,10 +767,7 @@ GenericConfigurationManagerImpl<ImplClass>::_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;
Expand Down
2 changes: 1 addition & 1 deletion src/platform/nRF5/BLEManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 780b472

Please sign in to comment.