- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检索外围设备的固件版本字符串。
当通过“LightBlue”应用程序询问我的外围设备时,我能够查看设备信息,其中包括:
但是,在我的代码中,我无法发现固件修订字符串的特征。我尝试了以下 UUID:
如何检索固件修订字符串?
最佳答案
首先需要发现相关的CBService。在这种情况下,它是设备信息服务。
首先在类/结构中的某处定义设备信息服务的 CBUUID 和固件修订字符串
let deviceInformationServiceUUID = CBUUID(string: "180a")
let firmwareRevisionStringCharacteristicUUID = CBUUID(string: "2a26")
然后在你的 CBCentralManagerDelegate
中:
// 1. Discover the services we care about upon initial connection
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.discoverServices([deviceInformationServiceUUID])
}
然后在CBPeripheralDelegate
中:
// 2. Discover the characteristics of the services we care about
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
guard error == nil else {
print("Failed to discover services, error: \(error?.localizedDescription ?? "failed to obtain error description")")
return
}
if let services = peripheral.services {
services.forEach { peripheral.discoverCharacteristics(nil, for: $0) }
}
}
// 3. Interrogate the characteristics and single out the firmware revision string characteristic, and read its value
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
guard error == nil else {
print("Failed to discover characteristics for service \(service.uuid), error: \(error?.localizedDescription ?? "no error description")")
return
}
guard let discoveredCharacteristics = service.characteristics else {
print("peripheralDidDiscoverCharacteristics called for empty characteristics for service \(service.uuid)")
return
}
if service.uuid == deviceInformationServiceUUID {
for characteristic in discoveredCharacteristics {
if characteristic.uuid == firmwareRevisionStringCharacteristicUUID {
print("Reading FW revision string for peripheral...")
peripheral.readValue(for: characteristic)
break
}
}
}
}
// 4. Wait for value to be read and print it out
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
guard let data = characteristic.value else {
print("Unable to obtain notification/indication data from CBPeripheral")
return
}
if characteristic.uuid == firmwareRevisionStringCharacteristicUUID,
let firmwareRevisionString = String(data: data, encoding: .utf8) {
logger.log(message: "FW revision string read as \(firmwareRevisionString)!")
}
}
关于ios - CoreBluetooth 无法读取固件修订字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46433023/
为包含未推送变更集的 -r 选项指定修订/修订集的最佳方法是什么,这对于在本地克隆或在仅包含已推送变更集的存储库中创建书签很有用。 当您需要在工作中切换到其他您还没有准备好插入的事情时,通常需要这样做
我正在寻找一个合适的过程来保留数据库中行(及其关系)的修订或快照。 以电子商务平台为例- 客户创建订单。该订单与账单地址和送货地址相关联。 该客户随后更改了个人资料中地址簿中的地址。 原始订单的地址不
我喜欢 DocumentViewer 在 WPF 应用程序中显示 XPS 文档。但我还需要编辑 XPS 文档。我找到了用于编辑 XPS 的独立应用程序 (.exe)。我需要的是一个用于查看和编辑 XP
所以我目前正在分析我的 Spring Java 项目。我想做的一件事是计算文件/类已更改的次数。在 Eclipse 中,我可以右键单击一个类,选择 Team --> Show History,它会显示
目前我可以从没有纹理的 DAE 文件加载地球模型,只是为了显示屏幕上有东西。为此,我使用了 GLU。 但现在我正在尝试使用我们的GLM 和着色器 来加载带有纹理的模型。我遇到的问题是正确地让它们一起工
如何检查特定 Safari 二进制文件中使用了 webkit 的哪个修订版(svn 修订版)?例如,我想知道 Mac 上最新的 Safari(雪豹 10.6.7)使用的是哪个版本。 用户代理不提供此信
修订数据的存储方式每个受修订影响的对象在 _AUD 中都有一个单独的记录。 table 。因此,当我搜索影响对象的修订时 A ,我会找回修订版为3的条目用于对象 B , 但如果对象 A和/或 C修订版
在 git 中,您可以通过类似 master^^ 的方式引用修订版。 , 意思是 master 之前的两次修订。你能以某种方式(或通过某种扩展)在 Mercurial 中做同样的事情吗?例如,如果我想
我正在尝试使用 Python 2.7 对维基百科文章的内容如何随时间变化进行分析。我只对页面的内容感兴趣,发现最简单的方法是使用 Wikipedia package .我的代码成功加载了一篇文章,然后
我在 Alembic 中有一个依赖于特定后端的修订版,但语义并不明确依赖于它(只会让事情变得更快)。 我希望我的代码不依赖于特定的后端(即修改在运行时不会给出错误)。我应该在 def upgrade(
我有一个 Xcode 项目的本地 git 存储库。如何(从终端)将项目的特定修订 checkout 到不同的文件夹? 谢谢。 最佳答案 您可以将本地存储库克隆到另一个文件夹中: clone a spe
据我所知,git 通过保存更改的行来存储修订。运行文本文档,如文档或冗长的 LaTeX 文件,通常有很长的行或在 80 个字符后被强制中断。当一个词被更改时,它会导致更改行的巨大差异,从而使 git
我目前在我公司的官僚主义 hell 中,需要定义什么构成了我们测试程序的不同级别的软件更改。我们有一个我们内部遵循的粗略实践,但我正在寻找一个标准(如果存在)以在我们的质量体系中引用。我认识到开发人员
我已经开始使用 Hibernate Envers 来审计日志记录业务对象。我已经阅读了文档,并且从我看到的所有示例中,查询是通过修订号完成的。 我想按修订日期查询,即获取被审计实体在特定日期或日期范围
我正在构建一个网站,用户可以在其中更改其公开显示的个人资料。但是,我需要所有更改在上线之前都得到管理员的批准。在更改获得批准之前,他们的旧个人资料将显示。在管理员中应该有一个等待批准的配置文件列表。最
我正在构建一个网站,用户可以在其中更改其公开显示的个人资料。但是,我需要所有更改在上线之前都得到管理员的批准。在更改获得批准之前,他们的旧个人资料将显示。在管理员中应该有一个等待批准的配置文件列表。最
我编辑了这个问题,因为下面提到的答案是在使用 while 和 begin 时,它应该在存储过程中。 所以现在我在存储过程中运行它,但我仍然遇到错误。 counter; while counter <
我刚开始使用 Hibernate Envers 进行审计,我想知道是否有办法在两个日期之间获取一个类的所有修订。 到目前为止我一直在使用: AuditQuery query = reader.crea
我认为前缀++ 和后缀++ 之间的唯一区别是它们的优先级。显然我错了。也许重要的是返回值? 最佳答案 在 C++ 中,++++i 可以编译,因为前缀 operator++ 返回一个左值。但是,仍然不建
在 Jenkins 中,我使用 XML API 来获取提交的 SHA,例如 http://jenkins/view/job/test/470/api/xml?xpath=//lastBuiltRevi
我是一名优秀的程序员,十分优秀!