gpt4 book ai didi

swift - 委托(delegate)方法没有被调用? (核心蓝牙)

转载 作者:行者123 更新时间:2023-11-30 13:18:32 25 4
gpt4 key购买 nike

我正在 Swift 3 中使用 CoreBluetooth 来模拟带有 BTLE 的串行端口。该服务对中央设备可见,并且外围(快速)端的任何更新都会更新中央端,不会出现问题。

当我从中央端发送读取或写入请求时,peripheralManager() 委托(delegate)方法之一应该处理该事件;但是,无论发生什么情况,都不会调用任何委托(delegate)方法,并且中央设备最终会失去连接(我认为是由于超时)。

class BTConnectionHandler: NSObject, CBPeripheralManagerDelegate {

var cbManager: CBPeripheralManager!

var serialService: CBMutableService!
var tx: CBMutableCharacteristic!
var rx: CBMutableCharacteristic!

override init() {

super.init()

cbManager = CBPeripheralManager(delegate: self, queue: nil)
cbManager.startAdvertising(ADVERTISEMENT_DATA)

serialService = CBMutableService(type: SERIAL_UUID, primary: true)
tx = CBMutableCharacteristic(type: TX_UUID, properties: TX_PROPERTIES, value: nil, permissions: TX_PERMISSIONS)
rx = CBMutableCharacteristic(type: RX_UUID, properties: RX_PROPERTIES, value: nil, permissions: RX_PERMISSIONS)
serialService.characteristics = [tx,rx]

cbManager.add(serialService)

}

// PERIPHERAL (this) Write to TX
internal func write(string: String) -> Bool {
let data = string.data(using: String.Encoding.utf8)!
tx.value = data
return cbManager.updateValue(data,for: tx,onSubscribedCentrals: nil)
}

// PERIPHERAL (this) Read from RX
internal func read() -> String? {
if let outString = String(data: rx.value!, encoding: String.Encoding.utf8) {
return outString
} else {
print("RX buffer is empty")
return nil
}
}

// CENTRAL read from TX
func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveRead request: CBATTRequest) {
print("Read request received from central device")
request.value = tx.value
cbManager.respond(to: request, withResult: .success)
}

// CENTRAL write to RX
func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) {
print("Write request(s) received from central device")
for request in requests {
rx.value = request.value
cbManager.respond(to: request, withResult: .success)
}
}

// Print state of peripheral manager as it changes
func peripheralManagerDidUpdateState(_ peripheral:CBPeripheralManager) {

print(peripheral.state)

}


}

最佳答案

我遇到了类似的问题,让我困惑了几个小时。我的问题是属性。一旦我添加了 .read 属性,didReceiveRead 回调就会被调用:

myCharacteristic = CBMutableCharacteristic(
type: myUUID,
properties: [CBCharacteristicProperties.notify, CBCharacteristicProperties.read], //*** Need Read Permission to READ!!
value: nil,
permissions: CBAttributePermissions.readEncryptionRequired
)

关于swift - 委托(delegate)方法没有被调用? (核心蓝牙),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38002730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com