PySide6.QtBluetooth.QLowEnergyCharacteristic

class QLowEnergyCharacteristic

QLowEnergyCharacteristic 类存储有关蓝牙低功耗服务特性的信息。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

QLowEnergyCharacteristic 提供了关于蓝牙低功耗服务特性的信息,包括 name()uuid()value()properties()descriptors()。要获取特性的规范和信息,需要使用 QLowEnergyServiceQLowEnergyController 类连接到设备。

特征值可以通过管理此特征所属服务的QLowEnergyService实例进行写入。writeCharacteristic()函数用于写入新值。成功时,characteristicWritten()信号会被发出。此对象的value()会自动相应更新。

特性可能包含零个、一个或多个描述符。可以使用descriptor()函数单独检索它们。descriptors()函数将所有描述符作为列表返回。描述符的一般目的是为特性添加上下文信息。例如,描述符可能提供格式或范围信息,指定如何解释特性的值。

class PropertyType

(继承自 enum.Flag) 此枚举描述了一个特性的属性。

常量

描述

QLowEnergyCharacteristic.Unknown

类型未知。

QLowEnergyCharacteristic.Broadcasting

允许广播通用属性(GATT)特征值。

QLowEnergyCharacteristic.Read

允许读取特征值。

QLowEnergyCharacteristic.WriteNoResponse

允许写入不需要响应的特征值。

QLowEnergyCharacteristic.Write

允许写入特征值。

QLowEnergyCharacteristic.Notify

允许特征值的通知。

QLowEnergyCharacteristic.Indicate

允许特征值的指示。

QLowEnergyCharacteristic.WriteSigned

允许对GATT特性值进行签名写入。

QLowEnergyCharacteristic.ExtendedProperty

特性的扩展属性描述符中定义了额外的特性属性。

不建议在同一特性上同时设置Notify和Indicate属性,因为底层蓝牙堆栈的行为因平台而异。请参阅clientCharacteristicConfiguration

另请参阅

properties()

PySide6.QtBluetooth.QLowEnergyCharacteristic.CCCDDisable
PySide6.QtBluetooth.QLowEnergyCharacteristic.CCCDEnableNotification
PySide6.QtBluetooth.QLowEnergyCharacteristic.CCCDEnableIndication
__init__()

构造一个新的 QLowEnergyCharacteristic。默认构造的此类的实例始终无效。

另请参阅

isValid()

__init__(other)
Parameters:

其他QLowEnergyCharacteristic

构造一个新的QLowEnergyCharacteristic,它是other的副本。

两个副本继续共享相同的基础数据,这些数据在写入时不会分离。

clientCharacteristicConfiguration()
Return type:

QLowEnergyDescriptor

返回客户端特性配置描述符,如果不存在客户端特性配置描述符,则返回无效的QLowEnergyDescriptor实例。

BTLE特性可以支持通知和/或指示。在这两种情况下,外围设备都会在特性值每次更改时通知中央设备。在BTLE属性协议中,通知消息不会被中央设备确认,而指示消息会被确认。通知被认为更快,但不可靠,而指示则较慢但更可靠。

如果一个特性支持通知或指示,可以通过向客户端特性配置描述符写入特殊的位模式来启用这些功能。为了方便起见,这些位模式被提供为 QLowEnergyCharacteristic::CCCDDisableQLowEnergyCharacteristic::CCCDEnableNotificationQLowEnergyCharacteristic::CCCDEnableIndication

启用例如名为 mycharacteristic 的特征的通知,该特征位于名为 myservice 的服务中,可以使用以下代码完成。

auto cccd = mycharacteristic.clientCharacteristicConfiguration();
if (!cccd.isValid()) {
    // your error handling
    return error;
}
myservice->writeDescriptor(cccd, QLowEnergyCharacteristic::CCCDEnableNotification);

注意

调用 characteristic.clientCharacteristicConfiguration() 等同于调用 characteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration)

注意

不建议在同一特性上同时使用通知和指示。这适用于在设置特性时的服务器端,以及在启用它们时的客户端。蓝牙堆栈的行为因平台而异,跨平台的行为可能会不一致。例如,一个Bluez Linux客户端可能会无条件地尝试启用这两种机制(如果两者都支持),而一个macOS客户端可能会无条件地仅启用通知。如果需要两者,请考虑创建两个独立的特性。

另请参阅

descriptor()

descriptor(uuid)
Parameters:

uuidQBluetoothUuid

Return type:

QLowEnergyDescriptor

返回uuid的描述符或一个无效的QLowEnergyDescriptor实例。

另请参阅

descriptors()

descriptors()
Return type:

QLowEnergyDescriptor的列表

返回属于此特征的描述符列表;否则返回空列表。

另请参阅

descriptor()

isValid()
Return type:

布尔

如果 QLowEnergyCharacteristic 对象有效,则返回 true,否则返回 false

无效的特征对象未与任何服务关联(默认构造的),或者由于与底层蓝牙低功耗设备断开连接等原因,关联的服务不再有效。一旦对象无效,它将无法再次变为有效。

注意

如果QLowEnergyCharacteristic实例由于与底层设备的断开连接而变为无效,当前实例封装的信息将保持断开连接时的状态。因此,可以在断开连接事件后检索这些信息。

name()
Return type:

字符串

返回特征的可读名称。

名称基于特征的uuid(),该特征必须已经标准化。完整的特征类型列表可以在Bluetooth.org Characteristics下找到。

如果uuid()未知,则返回的字符串为空。

__ne__(b)
Parameters:

bQLowEnergyCharacteristic

Return type:

布尔

如果 ab 不相等,则返回 true;否则返回 false

如果两个QLowEnergyCharacteristic实例引用的是同一个远程蓝牙低功耗设备上的相同特性,或者两个实例都是默认构造的,则认为它们是相等的。

__eq__(b)
Parameters:

bQLowEnergyCharacteristic

Return type:

布尔

如果 a 等于 b,则返回 true,否则返回 false

如果两个QLowEnergyCharacteristic实例引用的是同一个远程蓝牙低功耗设备上的相同特性,或者两个实例都是默认构造的,则认为它们是相等的。

properties()
Return type:

PropertyType 的组合

返回特征的属性。

属性定义了特征的访问权限。

uuid()
Return type:

QBluetoothUuid

如果isValid()返回true,则返回特征的UUID;否则返回一个空的UUID。

value()
Return type:

QByteArray

返回特征的缓存值。

如果特性的properties()允许写入新值,可以使用writeCharacteristic()更新该值。

缓存会在相关服务的detail discovery期间更新,成功的read / write操作或接收到更新通知时也会更新。

如果特征没有read permission,返回的QByteArray将始终为空。在这种情况下,只有characteristicChanged()characteristicWritten()可能提供有关此特征值的信息。