Skip to content

Commit

Permalink
bump simpleble version, new macos backend (#666)
Browse files Browse the repository at this point in the history
Signed-off-by: Andrey Parfenov <a1994ndrey@gmail.com>
  • Loading branch information
Andrey1994 committed Aug 13, 2023
1 parent 1e8ce33 commit d598971
Show file tree
Hide file tree
Showing 7 changed files with 366 additions and 244 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ class AdapterBase {
void delegate_did_discover_peripheral(void* opaque_peripheral, void* opaque_adapter,
advertising_data_t advertising_data);
void delegate_did_connect_peripheral(void* opaque_peripheral);
void delegate_did_disconnect_peripheral(void* opaque_peripheral);
void delegate_did_fail_to_connect_peripheral(void* opaque_peripheral, void* opaque_error);
void delegate_did_disconnect_peripheral(void* opaque_peripheral, void* opaque_error);

protected:
/**
Expand Down
16 changes: 13 additions & 3 deletions third_party/SimpleBLE/simpleble/src/backends/macos/AdapterBase.mm
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@

std::vector<Peripheral> AdapterBase::scan_get_results() {
std::vector<Peripheral> peripherals;
for (auto& [opaque_peripheral, base_peripheral] : this->peripherals_) {
for (auto& [opaque_peripheral, base_peripheral] : this->seen_peripherals_) {
PeripheralBuilder peripheral_builder(base_peripheral);
peripherals.push_back(peripheral_builder);
}
Expand Down Expand Up @@ -165,12 +165,22 @@
base_peripheral->delegate_did_connect();
}

void AdapterBase::delegate_did_disconnect_peripheral(void* opaque_peripheral) {
void AdapterBase::delegate_did_fail_to_connect_peripheral(void* opaque_peripheral, void* opaque_error) {
if (this->peripherals_.count(opaque_peripheral) == 0) {
throw Exception::InvalidReference();
}

// Load the existing PeripheralBase object
std::shared_ptr<PeripheralBase> base_peripheral = this->peripherals_.at(opaque_peripheral);
base_peripheral->delegate_did_disconnect();
base_peripheral->delegate_did_fail_to_connect(opaque_error);
}

void AdapterBase::delegate_did_disconnect_peripheral(void* opaque_peripheral, void* opaque_error) {
if (this->peripherals_.count(opaque_peripheral) == 0) {
throw Exception::InvalidReference();
}

// Load the existing PeripheralBase object
std::shared_ptr<PeripheralBase> base_peripheral = this->peripherals_.at(opaque_peripheral);
base_peripheral->delegate_did_disconnect(opaque_error);
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ - (instancetype)init:(SimpleBLE::AdapterBase*)adapter {
self = [super init];
if (self) {
_adapter = adapter;
_uuid = [[NSUUID UUID] UUIDString];
_uuid = @"39a76676-2788-46c9-afa0-f0c0c31e6fd9";

// Use a high-priority queue to ensure that events are processed immediately.
dispatch_queue_attr_t qos = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1);
Expand Down Expand Up @@ -150,16 +150,11 @@ - (void)centralManager:(CBCentralManager*)central didConnectPeripheral:(CBPeriph
}

- (void)centralManager:(CBCentralManager*)central didDisconnectPeripheral:(CBPeripheral*)peripheral error:(NSError*)error {
if (error != nil) {
NSLog(@"Peripheral %@ disconnected: %@\n", peripheral.name, error);
}
_adapter->delegate_did_disconnect_peripheral((__bridge void*)peripheral);
_adapter->delegate_did_disconnect_peripheral((__bridge void*)peripheral, (__bridge void*)error);
}

- (void)centralManager:(CBCentralManager*)central didFailToConnectPeripheral:(CBPeripheral*)peripheral error:(NSError*)error {
if (error != nil) {
NSLog(@"Failed to connect to peripheral %@: %@\n", peripheral.name, error);
}
_adapter->delegate_did_fail_to_connect_peripheral((__bridge void*)peripheral, (__bridge void*)error);
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ class PeripheralBase {
void set_callback_on_disconnected(std::function<void()> on_disconnected);

void delegate_did_connect();
void delegate_did_disconnect();
void delegate_did_fail_to_connect(void* opaque_error);
void delegate_did_disconnect(void* opaque_error);

void update_advertising_data(advertising_data_t advertising_data);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,9 +215,16 @@
[internal delegateDidConnect];
}

void PeripheralBase::delegate_did_disconnect() {
void PeripheralBase::delegate_did_fail_to_connect(void* opaque_error) {
PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
[internal delegateDidDisconnect];
NSError* error = (__bridge NSError*)opaque_error;
[internal delegateDidFailToConnect : error];
}

void PeripheralBase::delegate_did_disconnect(void* opaque_error) {
PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
NSError* error = (__bridge NSError*)opaque_error;
[internal delegateDidDisconnect : error];

// If the user manually disconnects the peripheral, don't call the callback at this point.
if (callback_on_disconnected_ && !manual_disconnect_triggered_) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
payload:(NSData*)payload;

- (void)delegateDidConnect;
- (void)delegateDidDisconnect;
- (void)delegateDidFailToConnect:(NSError*)error;
- (void)delegateDidDisconnect:(NSError*)error;

@end

0 comments on commit d598971

Please sign in to comment.