ESP32: Rotating device ID for BLE transport (#13206)
* ESP32: Rotating device ID for BLE transport
* Remove the ifdefs and fix the Zephyr static assert
Also, set the default value of chip_enable_additional_data_advertising
to false in src/platform/BUILD.gn. If this flag is set then Linux and
ESP32 set the Additional Data flag and displayes the C3 characteristic.
* Changed kServiceDataLenSize to kServiceDataTypeSize
Added chip_enable_additional_data_advertising = true to tv-app and
tv-cast-app
Removed the unused characteristic definitions
diff --git a/src/ble/CHIPBleServiceData.h b/src/ble/CHIPBleServiceData.h
index cd4d84e..e8ca517 100644
--- a/src/ble/CHIPBleServiceData.h
+++ b/src/ble/CHIPBleServiceData.h
@@ -45,12 +45,14 @@
*/
struct ChipBLEDeviceIdentificationInfo
{
- constexpr static uint16_t kDiscriminatorMask = 0xfff;
+ constexpr static uint16_t kDiscriminatorMask = 0xfff;
+ constexpr static uint8_t kAdditionalDataFlagMask = 0x1;
uint8_t OpCode;
uint8_t DeviceDiscriminator[2];
uint8_t DeviceVendorId[2];
uint8_t DeviceProductId[2];
+ uint8_t AdditionalDataFlag;
void Init() { memset(this, 0, sizeof(*this)); }
@@ -74,6 +76,20 @@
deviceDiscriminator |= static_cast<uint16_t>(DeviceDiscriminator[1] << 8u & ~kDiscriminatorMask);
chip::Encoding::LittleEndian::Put16(DeviceDiscriminator, deviceDiscriminator);
}
+
+ uint8_t GetAdditionalDataFlag() const { return (AdditionalDataFlag & kAdditionalDataFlagMask); }
+
+ void SetAdditionalDataFlag(bool flag)
+ {
+ if (flag)
+ {
+ AdditionalDataFlag |= kAdditionalDataFlagMask;
+ }
+ else
+ {
+ AdditionalDataFlag &= static_cast<uint8_t>(~kAdditionalDataFlagMask);
+ }
+ }
} __attribute__((packed));
} /* namespace Ble */