Skip to content

Commit 0ae2ea3

Browse files
author
Mikołaj Piechocki
committed
Add connecting to peripheral
1 parent 6dc6040 commit 0ae2ea3

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

ExampleApp/ExampleApp/Screens/Central/CentralViewController.swift

+44
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import CoreBluetooth
2+
import RxBluetoothKit
3+
import RxSwift
14
import UIKit
25

36
class CentralViewController: UIViewController {
@@ -16,4 +19,45 @@ class CentralViewController: UIViewController {
1619
view = centralView
1720
}
1821

22+
override func viewDidLoad() {
23+
super.viewDidLoad()
24+
25+
centralView.connectButton.addTarget(self, action: #selector(handleConnectButton), for: .touchUpInside)
26+
}
27+
28+
// MARK: - Private
29+
30+
private let disposeBag = DisposeBag()
31+
private lazy var manager = CentralManager()
32+
33+
@objc private func handleConnectButton() {
34+
guard let serviceUuidString = centralView.serviceUuidTextField.text,
35+
let characteristicUuidString = centralView.characteristicUuidTextField.text else { return }
36+
37+
let serviceUuid = CBUUID(string: serviceUuidString)
38+
let characteristicUuid = CBUUID(string: characteristicUuidString)
39+
40+
scanAndConnect(serviceUuid: serviceUuid, characteristicUuid: characteristicUuid)
41+
}
42+
43+
private func scanAndConnect(serviceUuid: CBUUID, characteristicUuid: CBUUID) {
44+
let managerIsOn = manager.observeStateWithInitialValue()
45+
.filter { $0 == .poweredOn }
46+
.map { _ in }
47+
48+
Observable.combineLatest(managerIsOn, Observable.just(manager)) { $1 }
49+
.flatMap { $0.scanForPeripherals(withServices: [serviceUuid]) }
50+
.take(1)
51+
.flatMap { $0.peripheral.establishConnection() }
52+
.flatMap { $0.discoverServices([serviceUuid]) }
53+
.take(1)
54+
.compactMap { $0.first }
55+
.flatMap { $0.discoverCharacteristics([characteristicUuid]) }
56+
.take(1)
57+
.compactMap { $0.first }
58+
.flatMap { $0.readValue() }
59+
.subscribe(onNext: { print($0) })
60+
.disposed(by: disposeBag)
61+
}
62+
1963
}

0 commit comments

Comments
 (0)