mirror of
https://github.com/inthehand/32feet.git
synced 2026-10-29 07:07:04 +08:00
155 lines
4.4 KiB
C#
155 lines
4.4 KiB
C#
// 32feet.NET - Personal Area Networking for .NET
|
|
//
|
|
// Copyright (c) 2013 Alan J McFarlane, All rights reserved.
|
|
// Copyright (c) 2013 In The Hand Ltd, All rights reserved.
|
|
// This source code is licensed under the MIT License
|
|
|
|
#if ANDROID_BTH
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using InTheHand.Net.Bluetooth.Factory;
|
|
using Android.Bluetooth;
|
|
|
|
namespace InTheHand.Net.Bluetooth.Droid
|
|
{
|
|
sealed class AndroidBthFactory : AndroidBthFactoryBase
|
|
{
|
|
public AndroidBthFactory()
|
|
: base(GetDefaultAdapter())
|
|
{
|
|
}
|
|
|
|
static BluetoothAdapter GetDefaultAdapter()
|
|
{
|
|
var a = BluetoothAdapter.DefaultAdapter;
|
|
if (a == null) throw new InvalidOperationException("No Android Bluetooth radio.");
|
|
return a;
|
|
}
|
|
|
|
}
|
|
|
|
#if DEBUG
|
|
[CLSCompliant(false)]
|
|
public
|
|
#endif
|
|
abstract class AndroidBthFactoryBase : BluetoothFactory
|
|
{
|
|
AndroidBthRadio _radio;
|
|
|
|
//--
|
|
protected AndroidBthFactoryBase(BluetoothAdapter adapter)
|
|
{
|
|
if (adapter == null) throw new ArgumentNullException("adapter");
|
|
_radio = new AndroidBthRadio(adapter);
|
|
}
|
|
|
|
//--
|
|
internal BluetoothAdapter GetAdapter()
|
|
{
|
|
return _radio.Adapter;
|
|
}
|
|
|
|
internal AndroidBthInquiry GetInquiry()
|
|
{
|
|
return new AndroidBthInquiry(this);
|
|
}
|
|
|
|
//--
|
|
protected override IBluetoothRadio GetPrimaryRadio()
|
|
{
|
|
return _radio;
|
|
}
|
|
|
|
protected override IBluetoothRadio[] GetAllRadios()
|
|
{
|
|
var arr = new IBluetoothRadio[1];
|
|
arr[0] = GetPrimaryRadio();
|
|
return arr;
|
|
}
|
|
|
|
//--
|
|
protected override IBluetoothDeviceInfo GetBluetoothDeviceInfo(BluetoothAddress address)
|
|
{
|
|
return AndroidBthDeviceInfo.CreateFromGivenAddress(this, address, true);
|
|
}
|
|
|
|
internal AndroidBthDeviceInfo DoGetBluetoothDeviceInfoInternalOnly(BluetoothAddress address)
|
|
{
|
|
return AndroidBthDeviceInfo.CreateFromGivenAddress(this, address, false);
|
|
}
|
|
|
|
//--
|
|
protected override IBluetoothClient GetBluetoothClient()
|
|
{
|
|
return new AndroidBthClient(this);
|
|
}
|
|
|
|
protected override IBluetoothClient GetBluetoothClient(BluetoothEndPoint localEP)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
protected override IBluetoothClient GetBluetoothClient(System.Net.Sockets.Socket acceptedSocket)
|
|
{
|
|
throw new NotSupportedException();
|
|
}
|
|
|
|
protected internal virtual IBluetoothClient DoGetBluetoothClientForListener(BluetoothSocket sock)
|
|
{
|
|
return AndroidBthClient.CreateFromListener(this, sock);
|
|
}
|
|
|
|
protected override IBluetoothClient GetBluetoothClientForListener(CommonRfcommStream acceptedStrm)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
//--
|
|
protected override IBluetoothListener GetBluetoothListener()
|
|
{
|
|
return new AndroidBthListener(this);
|
|
}
|
|
|
|
protected override IBluetoothSecurity GetBluetoothSecurity()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
//--
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
// throw new NotImplementedException();
|
|
}
|
|
|
|
// virtual on Factory so it is mockable.
|
|
public virtual Java.Util.UUID ToJavaUuid(Guid guid)
|
|
{
|
|
var uuid = Java.Util.UUID.FromString(guid.ToString("D")); // Hyphens no braces.
|
|
#if true || DEBUG
|
|
var txtN = guid.ToString("D"); // Hyphens no braces.
|
|
var txtJ = uuid.ToString();
|
|
Utils.MiscUtils.Trace_Assert(string.Equals(txtJ, txtN, StringComparison.OrdinalIgnoreCase),
|
|
"NOT equal " + txtJ + " and " + txtN);
|
|
#endif
|
|
return uuid;
|
|
}
|
|
|
|
public virtual Guid FromJavaUuid(Java.Util.UUID uuid)
|
|
{
|
|
var str = uuid.ToString();
|
|
var guid = new Guid(str);
|
|
#if true || DEBUG
|
|
var txtN = guid.ToString("D"); // Hyphens no braces.
|
|
var txtJ = uuid.ToString();
|
|
Utils.MiscUtils.Trace_Assert(string.Equals(txtJ, txtN, StringComparison.OrdinalIgnoreCase),
|
|
"NOT equal " + txtJ + " and " + txtN);
|
|
#endif
|
|
return guid;
|
|
}
|
|
|
|
}
|
|
}
|
|
#endif
|