[BT C#] Fix BLE adapter issues
authorSudha Bheemanna <b.sudha@samsung.com>
Mon, 6 Feb 2017 06:12:28 +0000 (11:42 +0530)
committerSudha Bheemanna <b.sudha@samsung.com>
Mon, 6 Feb 2017 06:12:28 +0000 (11:42 +0530)
Fixed failing tcts in the le adapter.
re-arrangement of code and fix issues to handle crash

Change-Id: I9cf2efa6b88527eb934342ffb1d2010395a54860
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth/BluetoothData.cs [changed mode: 0644->0755]
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth/BluetoothLeAdapterImpl.cs
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth/BluetoothStructs.cs

old mode 100644 (file)
new mode 100755 (executable)
index f219bc5..3122e59
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the License);
@@ -247,26 +247,6 @@ namespace Tizen.Network.Bluetooth
         }
     }
 
-    /// </summary>
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct BluetoothLeScanDataStruct
-    {
-        [MarshalAsAttribute(UnmanagedType.LPStr)]
-        internal string RemoteAddress;
-
-        internal BluetoothLeDeviceAddressType AddressType;
-
-        internal int Rssi;
-
-        internal int AdvDataLength;
-
-        internal IntPtr AdvData;
-
-        internal int ScanDataLength;
-
-        internal IntPtr ScanData;
-    }
-
     /// <summary>
     /// A class containing the information of Manufacturer data.
     /// </summary>
@@ -344,22 +324,6 @@ namespace Tizen.Network.Bluetooth
         }
     }
 
-    internal struct BluetoothLeServiceDataStruct
-    {
-        /// <summary>
-        /// Bluetooth Le service uuid.
-        /// </summary>
-        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=16)]
-        internal string ServiceUuid;
-        /// <summary>
-        /// Bluetooth Le service data
-        /// </summary>
-        [MarshalAs(UnmanagedType.LPStr)]
-        internal string ServiceData;
-
-        internal int ServiceDataLength;
-    }
-
     /// <summary>
     /// A class containing the information of Bluetooth service data.
     /// </summary>
@@ -404,7 +368,7 @@ namespace Tizen.Network.Bluetooth
     public class BluetoothLeServiceData
     {
         internal string Uuid;
-        internal string Data;
+        internal byte[] Data;
         internal int Length;
 
         internal BluetoothLeServiceData()
@@ -424,7 +388,7 @@ namespace Tizen.Network.Bluetooth
         /// <summary>
         /// Bluetooth Le service data
         /// </summary>
-        public string ServiceData
+        public byte[] ServiceData
         {
             get
             {
index c25b360..e1cf43a 100755 (executable)
@@ -305,13 +305,14 @@ namespace Tizen.Network.Bluetooth
                 return null;
             }
 
-            IntPtr[] svcList = new IntPtr[_serviceListCount];
-            Marshal.Copy(serviceListArray, svcList, 0, _serviceListCount);
-            foreach (IntPtr svcs in svcList)
+            BluetoothLeServiceDataStruct[] svcList = new BluetoothLeServiceDataStruct[_serviceListCount];
+            int sizePointerToABC = Marshal.SizeOf(new BluetoothLeServiceDataStruct());
+            for (int i = 0; i < _serviceListCount; i++)
             {
-                BluetoothLeServiceDataStruct svcstruct = (BluetoothLeServiceDataStruct)Marshal.PtrToStructure(svcs, typeof(BluetoothLeServiceDataStruct));
-                _list.Add(BluetoothUtils.ConvertStructToLeServiceData(svcstruct));
-                Interop.Libc.Free(svcs);
+                svcList[i] = (BluetoothLeServiceDataStruct)Marshal.PtrToStructure(new IntPtr(serviceListArray.ToInt32() + (i * sizePointerToABC)), typeof(BluetoothLeServiceDataStruct));
+                Log.Info(Globals.LogTag, " Uuid : " + svcList[i].ServiceUuid + "length :  " + svcList[i].ServiceDataLength);
+
+                _list.Add(BluetoothUtils.ConvertStructToLeServiceData(svcList[i]));
             }
 
             serviceCount = _serviceListCount;
@@ -374,7 +375,8 @@ namespace Tizen.Network.Bluetooth
 
             data.Id = dataId;
             data.DataLength = dataLength;
-            Marshal.Copy(manufData, data.Data, 0, data.DataLength);
+            if (data.DataLength > 0)
+                Marshal.Copy(manufData, data.Data, 0, data.DataLength);
 
             return data;
         }
index afdf4f3..ec41b9c 100755 (executable)
@@ -166,6 +166,42 @@ namespace Tizen.Network.Bluetooth
         internal string ServiceUuid;
     }
 
+    /// </summary>
+    [StructLayout(LayoutKind.Sequential)]
+    internal struct BluetoothLeScanDataStruct
+    {
+        [MarshalAsAttribute(UnmanagedType.LPStr)]
+        internal string RemoteAddress;
+
+        internal BluetoothLeDeviceAddressType AddressType;
+
+        internal int Rssi;
+
+        internal int AdvDataLength;
+
+        internal IntPtr AdvData;
+
+        internal int ScanDataLength;
+
+        internal IntPtr ScanData;
+    }
+
+    [StructLayout(LayoutKind.Sequential)]
+    internal struct BluetoothLeServiceDataStruct
+    {
+        /// <summary>
+        /// Bluetooth Le service uuid.
+        /// </summary>
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string ServiceUuid;
+        /// <summary>
+        /// Bluetooth Le service data
+        /// </summary>
+        internal IntPtr ServiceData;
+
+        internal int ServiceDataLength;
+    }
+
     internal static class BluetoothUtils
     {
         internal static BluetoothDevice ConvertStructToDeviceClass(BluetoothDeviceStruct device)
@@ -320,11 +356,14 @@ namespace Tizen.Network.Bluetooth
         internal static BluetoothLeServiceData ConvertStructToLeServiceData(BluetoothLeServiceDataStruct structServiceData)
         {
             BluetoothLeServiceData serviceData = new BluetoothLeServiceData();
+            Log.Info(Globals.LogTag, "ServiceDataLength" + structServiceData.ServiceDataLength);
+
             if (structServiceData.ServiceDataLength > 0)
             {
                 serviceData.Uuid = structServiceData.ServiceUuid;
                 serviceData.Length = structServiceData.ServiceDataLength;
-                serviceData.Data = structServiceData.ServiceData;
+                serviceData.Data = new byte[serviceData.Length];
+                Marshal.Copy(structServiceData.ServiceData, serviceData.Data, 0, serviceData.Length);
             }
             return serviceData;
         }