internal static BluetoothDevice ConvertStructToDeviceClass(BluetoothDeviceStruct device) { BluetoothDevice resultDevice = new BluetoothDevice(); Collection <string> uuidList = null; if (device.ServiceCount > 0) { IntPtr[] extensionList = new IntPtr[device.ServiceCount]; Marshal.Copy(device.ServiceUuidList, extensionList, 0, device.ServiceCount); uuidList = new Collection <string> (); foreach (IntPtr extension in extensionList) { string uuid = Marshal.PtrToStringAnsi(extension); uuidList.Add(uuid); } } resultDevice.RemoteDeviceAddress = device.Address; resultDevice.RemoteDeviceName = device.Name; resultDevice.RemoteDeviceClass = new BluetoothClass(); resultDevice.Class.MajorType = device.Class.MajorDeviceClassType; resultDevice.Class.MinorType = device.Class.MinorDeviceClassType; resultDevice.Class.Mask = device.Class.MajorServiceClassMask; resultDevice.RemotePaired = device.IsPaired; resultDevice.RemoteConnected = device.IsConnected; resultDevice.RemoteAuthorized = device.IsAuthorized; resultDevice.RemoteDeviceService = uuidList; resultDevice.RemoteDeviceCount = device.ServiceCount; resultDevice.RemoteManufLength = device.ManufacturerDataLength; resultDevice.RemoteManufData = device.ManufacturerData; return(resultDevice); }
internal BluetoothDevice GetBondedDevice(string address) { IntPtr deviceInfo; int ret = Interop.Bluetooth.GetBondedDeviceByAddress(address, out deviceInfo); if (ret != (int)BluetoothError.None) { Log.Error(Globals.LogTag, "Failed to get bonded device by address, Error - " + (BluetoothError)ret); BluetoothErrorFactory.ThrowBluetoothException(ret); } BluetoothDeviceStruct device = (BluetoothDeviceStruct)Marshal.PtrToStructure(deviceInfo, typeof(BluetoothDeviceStruct)); return(BluetoothUtils.ConvertStructToDeviceClass(device)); }
internal static BluetoothDevice ConvertStructToDeviceClass(BluetoothDeviceStruct device) { const int DeviceNameLengthMax = 248; const int UuidLengthMax = 50; BluetoothDevice resultDevice = new BluetoothDevice(); Collection <string> uuidList = null; if (device.ServiceCount > 0) { IntPtr[] extensionList = new IntPtr[device.ServiceCount]; Marshal.Copy(device.ServiceUuidList, extensionList, 0, device.ServiceCount); uuidList = new Collection <string> (); Log.Info(Globals.LogTag, "UUID Count: " + device.ServiceCount); foreach (IntPtr extension in extensionList) { if (extension != IntPtr.Zero) { string uuid = Marshal.PtrToStringAnsi(extension, UuidLengthMax); Log.Info(Globals.LogTag, "UUID: " + uuid); uuidList.Add(uuid); } } } resultDevice.RemoteDeviceAddress = device.Address; if (device.Name != IntPtr.Zero) { resultDevice.RemoteDeviceName = Marshal.PtrToStringAnsi(device.Name, DeviceNameLengthMax); Log.Info(Globals.LogTag, "Device Name: " + resultDevice.RemoteDeviceName); } resultDevice.RemoteDeviceClass = new BluetoothClass(); resultDevice.Class.MajorType = device.Class.MajorDeviceClassType; resultDevice.Class.MinorType = device.Class.MinorDeviceClassType; resultDevice.Class.Mask = device.Class.MajorServiceClassMask; resultDevice.RemotePaired = device.IsPaired; resultDevice.RemoteConnected = device.IsConnected; resultDevice.RemoteAuthorized = device.IsAuthorized; resultDevice.RemoteDeviceService = uuidList; resultDevice.RemoteDeviceCount = device.ServiceCount; resultDevice.RemoteManufLength = device.ManufacturerDataLength; if (device.ManufacturerData != IntPtr.Zero) { resultDevice.RemoteManufData = Marshal.PtrToStringAnsi(device.ManufacturerData, device.ManufacturerDataLength); } return(resultDevice); }