Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public class SampleDebug_Peripheral : MonoBehaviour, ICBPeripheralManagerDelegat

void Start()
{
_peripheralManager = new CBPeripheralManager(this);
var initOptions = new CBPeripheralManagerInitOptions() { ShowPowerAlert = true };
_peripheralManager = new CBPeripheralManager(this, initOptions);
_disposables.Add(_peripheralManager);
}

Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,17 @@ public ICBPeripheralManagerDelegate Delegate
static readonly int s_maxATTRequests = 10;
Queue<IDisposable> _attRequestDisposables = new Queue<IDisposable>();

public CBPeripheralManager(ICBPeripheralManagerDelegate peripheralDelegate = null)
public CBPeripheralManager(ICBPeripheralManagerDelegate peripheralDelegate = null, CBPeripheralManagerInitOptions options = null)
{
_handle = SafeNativePeripheralManagerHandle.Create();
if (options == null)
{
_handle = SafeNativePeripheralManagerHandle.Create();
}
else
{
using var optionsDict = options.ToNativeDictionary();
_handle = SafeNativePeripheralManagerHandle.Create(optionsDict.Handle);
}
Delegate = peripheralDelegate;
_nativePeripheralManagerProxy = new NativePeripheralManagerProxy(_handle, this);
CallbackContext = SynchronizationContext.Current;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using CoreBluetooth.Foundation;

namespace CoreBluetooth
{
public class CBPeripheralManagerInitOptions
{
public static readonly string ShowPowerAlertKey = "kCBInitOptionShowPowerAlert";
public bool? ShowPowerAlert { get; set; } = null;

public CBPeripheralManagerInitOptions()
{
}

internal NSMutableDictionary ToNativeDictionary()
{
var dict = new NSMutableDictionary();
if (ShowPowerAlert.HasValue)
{
using var value = new NSNumber(ShowPowerAlert.Value);
dict.SetValue(ShowPowerAlertKey, value.Handle);
}
return dict;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ internal static extern int cb4u_peripheral_characteristic_properties(
);

[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
internal static extern SafeNativePeripheralManagerHandle cb4u_peripheral_manager_new();
internal static extern SafeNativePeripheralManagerHandle cb4u_peripheral_manager_new(IntPtr options);

[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
internal static extern void cb4u_peripheral_manager_release(IntPtr handle);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,23 @@ public class SafeNativePeripheralManagerHandle : SafeHandleZeroOrMinusOneIsInval

SafeNativePeripheralManagerHandle() : base(true) { }

internal static SafeNativePeripheralManagerHandle Create()
internal static SafeNativePeripheralManagerHandle Create(IntPtr options)
{
var instance = NativeMethods.cb4u_peripheral_manager_new();
var instance = NativeMethods.cb4u_peripheral_manager_new(options);
instance.RegisterHandlers();
return instance;
}

internal static SafeNativePeripheralManagerHandle Create(Foundation.SafeNSMutableDictionaryHandle options)
{
return Create(options.DangerousGetHandle());
}

internal static SafeNativePeripheralManagerHandle Create()
{
return Create(IntPtr.Zero);
}

void RegisterHandlers()
{
NativeMethods.cb4u_peripheral_manager_register_handlers(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ public class CB4UPeripheralManager : NSObject {
public var didReceiveReadRequestHandler: CB4UPeripheralManagerDidReceiveReadRequestHandler?
public var didReceiveWriteRequestsHandler: CB4UPeripheralManagerDidReceiveWriteRequestsHandler?

public override init() {
public init(_ options: [String: Any]? = nil) {
super.init()

peripheralManager = CBPeripheralManager(delegate: self, queue: nil)
peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: options)
}

func selfPointer() -> UnsafeMutableRawPointer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,14 @@ public func cb4u_peripheral_characteristic_properties(
}

@_cdecl("cb4u_peripheral_manager_new")
public func cb4u_peripheral_manager_new() -> UnsafeMutableRawPointer {
return Unmanaged.passRetained(CB4UPeripheralManager()).toOpaque()
public func cb4u_peripheral_manager_new(_ optionsPtr: UnsafeRawPointer?) -> UnsafeMutableRawPointer {
var options: [String: Any]? = nil
if let optionsPtr = optionsPtr {
let nsMutableDictionary = Unmanaged<NSMutableDictionary>.fromOpaque(optionsPtr).takeUnretainedValue()
options = nsMutableDictionary as? [String: Any]
}

return Unmanaged.passRetained(CB4UPeripheralManager(options)).toOpaque()
}

@_cdecl("cb4u_peripheral_manager_release")
Expand Down