Import ble code
diff --git a/src/ble/WeaveBleServiceData.h b/src/ble/WeaveBleServiceData.h
new file mode 100644
index 0000000..4b65485
--- /dev/null
+++ b/src/ble/WeaveBleServiceData.h
@@ -0,0 +1,111 @@
+/*
+ *
+ * Copyright (c) 2019 Google LLC.
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Definitions for Weave BLE service advertisement data.
+ */
+
+#ifndef WEAVE_BLE_SERVICE_DATA_H
+#define WEAVE_BLE_SERVICE_DATA_H
+
+namespace nl {
+namespace Ble {
+
+/**
+ * Weave data block types that may appear with Weave BLE service advertisement data.
+ */
+enum WeaveBLEServiceDataType
+{
+ kWeaveBLEServiceDataType_DeviceIdentificationInfo = 0x01,
+ kWeaveBLEServiceDataType_TokenIdentificationInfo = 0x02,
+};
+
+/**
+ * Weave BLE Device Identification Information Block
+ *
+ * Defines the over-the-air encoded format of the device identification information block that appears
+ * within Weave BLE service advertisement data.
+ */
+struct WeaveBLEDeviceIdentificationInfo
+{
+ 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 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 = kWeaveBLEServiceDataType_DeviceIdentificationInfo;
+ MajorVersion = kMajorVersion;
+ MinorVersion = kMinorVersion;
+ }
+
+ uint16_t GetVendorId(void)
+ {
+ return nl::Weave::Encoding::LittleEndian::Get16(DeviceVendorId);
+ }
+
+ void SetVendorId(uint16_t vendorId)
+ {
+ nl::Weave::Encoding::LittleEndian::Put16(DeviceVendorId, vendorId);
+ }
+
+ uint16_t GetProductId(void)
+ {
+ return nl::Weave::Encoding::LittleEndian::Get16(DeviceProductId);
+ }
+
+ void SetProductId(uint16_t productId)
+ {
+ nl::Weave::Encoding::LittleEndian::Put16(DeviceProductId, productId);
+ }
+
+ uint64_t GetDeviceId(void)
+ {
+ return nl::Weave::Encoding::LittleEndian::Get64(DeviceId);
+ }
+
+ void SetDeviceId(uint64_t deviceId)
+ {
+ nl::Weave::Encoding::LittleEndian::Put64(DeviceId, deviceId);
+ }
+} __attribute__((packed));
+
+} /* namespace Ble */
+} /* namespace nl */
+
+#endif // WEAVE_BLE_SERVICE_DATA_H