BluetoothGATTSetCharacteristicValue 函数 (bluetoothleapis.h)

BluetoothGATTSetCharacteristicValue 函数将指定的特征值写入蓝牙设备。

语法

HRESULT BluetoothGATTSetCharacteristicValue(
  [in]           HANDLE                             hDevice,
  [in]           PBTH_LE_GATT_CHARACTERISTIC        Characteristic,
  [in]           PBTH_LE_GATT_CHARACTERISTIC_VALUE  CharacteristicValue,
  [in, optional] BTH_LE_GATT_RELIABLE_WRITE_CONTEXT ReliableWriteContext,
  [in]           ULONG                              Flags
);

参数

[in] hDevice

服务的句柄。

[in] Characteristic

指向包含父特征 的BTH_LE_GATT_CHARACTERISTIC 结构的指针。

[in] CharacteristicValue

指向包含特征值的 BTH_LE_GATT_CHARACTERISTIC_VALUE 结构的指针。

[in, optional] ReliableWriteContext

BTH_LE_GATT_RELIABLE_WRITE_CONTEXT结构,其中包含描述从之前调用 BluetoothGATTBeginReliableWrite 返回的可靠写入操作的上下文。

[in] Flags

用于修改 BluetoothGATTSetCharacteristicValue 行为的标志:

标志 描述
BLUETOOTH_GATT_FLAG_NONE 客户端没有特定的 GATT 要求 (默认) 。
BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED 客户端请求通过加密通道传输数据。
BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED 客户端请求通过经过身份验证的通道传输数据。
BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE 不带响应的写入。
BLUETOOTH_GATT_FLAG_SIGNED_WRITE 已签名写入。 配置文件驱动程序必须与 BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE 一起使用,以便生成没有响应的已签名写入。

返回值

BluetoothGATTSetCharacteristicValue 函数返回以下值:

返回代码 说明
S_OK
操作已成功完成。
ERROR_ACCESS_DENIED
如果同时提供了父服务和服务句柄,并且服务层次结构不汇总到提供的父服务句柄,则返回 。
ERROR_INVALID_PARAMETER
参数无效。
ERROR_BAD_NET_RESP
目标服务器未提供适当的网络响应。
ERROR_SEM_TIMEOUT
请求超时。
ERROR_NO_SYSTEM_RESOURCES
操作内存不足。
ERROR_INVALID_FUNCTION
可靠的写入操作目前正在进行中。
E_BLUETOOTH_ATT_INVALID_HANDLE
给定的属性句柄在此服务器上无效。
E_BLUETOOTH_ATT_READ_NOT_PERMITTED
无法读取属性。
E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED
无法写入特性。
E_BLUETOOTH_ATT_INVALID_PDU
属性 PDU 无效。
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION
属性需要身份验证,然后才能读取或写入该属性。
E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED
属性服务器不支持从客户端收到的请求。
E_BLUETOOTH_ATT_INVALID_OFFSET
指定的偏移量超过属性的末尾。
E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION
属性需要授权才能读取或写入。
E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL
太多准备写入已排队。
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND
在给定的属性句柄范围内找不到任何属性。
E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG
不能使用读取 Blob 请求读取或写入属性。
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE
用于加密此链接的加密密钥大小不足。
E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH
属性值长度对于操作无效。
E_BLUETOOTH_ATT_UNLIKELY
请求的属性请求遇到不太可能的错误,因此无法按请求完成。
E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION
属性需要加密,然后才能读取或写入该属性。
E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE
属性类型不是更高层规范所定义的受支持的分组属性。
E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES
资源不足,无法完成请求。
E_BLUETOOTH_ATT_UNKNOWN_ERROR
已收到位于保留范围内的错误。

注解

在 BluetoothGATTBeginReliableWrite 之后调用 BluetoothGATTSetCharacteristicValue,通知远程蓝牙设备将此请求存储在设备上的准备队列中。

如果需要签名,则操作不得要求响应,并且不得通过安全通道进行。

父特征是从之前调用 BluetoothGATTGetCharacteristics 返回的,不得更改。 如果调用方执行此操作,则行为未定义。

示例


BTH_LE_GATT_CHARACTERISTIC_VALUE newValue;

RtlZeroMemory(&newValue,(sizeof(newValue)));

newValue.DataSize = sizeof(valueData);
newValue.Data = (UCHAR*)&valueData;

// Set the new characteristic value
hr = BluetoothGATTSetCharacteristicValue(hDevice,
                                    parentCharacteristic,
                                    &newValue,
                                    NULL,
                                    BLUETOOTH_GATT_FLAG_NONE);

要求

   
最低受支持的客户端 在 Windows 8 及更高版本的 Windows 中受支持。
目标平台 通用
标头 bluetoothleapis.h
Library BluetoothAPIs.lib
DLL BluetoothAPIs.dll

另请参阅

BTH_LE_GATT_CHARACTERISTIC

BTH_LE_GATT_CHARACTERISTIC_VALUE