首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于IOBluetooth的问题

关于IOBluetooth的问题
EN

Stack Overflow用户
提问于 2020-12-31 19:44:57
回答 1查看 181关注 0票数 0

我有一些关于IOBluetooth框架的问题,下面列出了这些问题。

  1. 我现在有一款MacBook Pro (13英寸,2018年),运行的是Big v11.1,当我打电话询问并试图找到附近的设备时,它经常会失败,并且不能一致工作。另一方面,我有第二个MacBook Pro (13英寸,2015年)运行Mojavv10.14.6,它的功能完全相同,每次都能工作。我还一直在使用blueutil命令行工具:https://github.com/toy/blueutil和PyBluez:https://github.com/pybluez/pybluez进行测试,并发现运行Mojave的第二个MacBook总是找到附近的设备,而运行Big的MacBook很难找到附近的设备。你知道这是因为框架的潜在更新吗,还是我的笔记本电脑运行Big有什么问题?

  1. ,我试图从第一台笔记本到第二台打开L2CAPChannel,反之亦然,但是在IOBluetoothDevice对象上调用openL2CAPChannelSync (我已经正确实例化)似乎永远不会返回kIOReturnSuccess。我是不是也做错了什么?我附加了下面使用的代码片段(其中删除了另一个设备的addressString )。

代码语言:javascript
复制
import IOBluetooth
import PlaygroundSupport

class ChannelDelegate : IOBluetoothL2CAPChannelDelegate {

    func l2capChannelOpenComplete(_ l2capChannel: IOBluetoothL2CAPChannel!, status error: IOReturn) {
        print("Channel Opened!")
    }

}

var remoteDevice = IOBluetoothDevice(addressString: ***deviceString***)
print((remoteDevice?.name ?? "nil") as String)

remoteDevice?.openConnection()
var connection = remoteDevice?.isConnected()
print(connection!)

var channelPtr: AutoreleasingUnsafeMutablePointer<IOBluetoothL2CAPChannel?>?
var success = remoteDevice?.openL2CAPChannelSync(channelPtr, withPSM: 0x0000, delegate: ChannelDelegate())
print(success == kIOReturnSuccess)

PlaygroundPage.current.needsIndefiniteExecution = true
EN

回答 1

Stack Overflow用户

发布于 2021-01-02 01:42:03

关于第二点,我修复了代码,并粘贴在下面。问题是,苹果的文档称,该对象是使用函数调用openL2CAPChannelSync实例化的,但事实并非如此。您需要先实例化对象,然后传递对实例化对象的引用。希望这能为人们节省一些时间,因为IOBluetooth API上的例子是如此之少。

代码语言:javascript
复制
import IOBluetooth
import PlaygroundSupport

class ChannelDelegate : IOBluetoothL2CAPChannelDelegate {

    func l2capChannelOpenComplete(_ l2capChannel: IOBluetoothL2CAPChannel!, status error: IOReturn) {
        print("Channel Opened!")
    }

}

var remoteDevice = IOBluetoothDevice(addressString: ***deviceString***)
print((remoteDevice?.name ?? "nil") as String)

remoteDevice?.openConnection()
var connection = remoteDevice?.isConnected()
print(connection!)

var channel: IOBluetoothL2CAPChannel? = IOBluetoothL2CAPChannel()
var success = remoteDevice?.openL2CAPChannelSync(&channel, withPSM: 0x0000, delegate: ChannelDelegate())
print(success == kIOReturnSuccess)

PlaygroundPage.current.needsIndefiniteExecution = true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65525019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档