| // Copyright 2016 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| #import <CoreBluetooth/CoreBluetooth.h> |
| #import <Foundation/Foundation.h> |
| #import "CBAdvertisingDriver.h" |
| #import "CBScanningDriver.h" |
| |
| extern NSString *_Nonnull kCBDriverErrorDomain; |
| |
| typedef enum { |
| CBDriverErrorUnsupportedHardware = -100, |
| CBDriverErrorUnauthorized = -101, |
| CBDriverErrorServiceAlreadyAdded = -102, |
| } CBDriverError; |
| |
| @interface CBDriver : NSObject |
| |
| @property(nonatomic, strong) dispatch_queue_t _Nonnull queue; |
| @property(nonatomic) CBAdvertisingDriver *_Nullable advertisingDriver; |
| @property(nonatomic) CBScanningDriver *_Nullable scanningDriver; |
| |
| /** Shared instance for the CBDriver -- only one can ever be alive to correctly use CoreBluetooth. |
| */ |
| + (CBDriver *_Nonnull)instance; |
| |
| /** Call to remove all services, stop all scans, and remove central/peripheral managers. */ |
| + (void)shutdown; |
| |
| @end |
| |
| #pragma mark - CGO exports |
| |
| typedef struct { |
| char *_Nonnull uuid; |
| const void *_Nonnull data; |
| int dataLength; |
| } CBDriverCharacteristicMapEntry; |
| |
| // Debug String via CGO |
| char *_Nonnull v23_cbdriver_debug_string(); |
| |
| // Advertising via CGO |
| BOOL v23_cbdriver_addService(const char *_Nonnull uuid, |
| CBDriverCharacteristicMapEntry *_Nonnull entries, int entriesLength, |
| char *_Nullable *_Nullable errorOut); |
| int v23_cbdriver_advertisingServiceCount(); |
| void v23_cbdriver_removeService(const char *_Nonnull uuid); |
| void v23_cbdriver_setAdRotateDelay(float seconds); |
| |
| // Discovery via CGO |
| BOOL v23_cbdriver_startScan(const char *_Nonnull *_Nonnull uuids, int uuidsLength, |
| const char *_Nonnull baseUuid, const char *_Nonnull maskUuid, |
| char *_Nullable *_Nullable errorOut); |
| void v23_cbdriver_stopScan(); |
| |
| // Removes the driver from memory and stops all bluetooth activity |
| void v23_cbdriver_clean(); |