# 请求消息

Source: [https://docs.qualcomm.com/doc/80-PK177-134Y/topic/requesting_message.html](https://docs.qualcomm.com/doc/80-PK177-134Y/topic/requesting_message.html)

传感器子系统只能理解协议缓冲区编码的请求。必须准备 `sns_client_request_msg` 才能通过协议缓冲区 Java API（由 .proto 文件生成）启用 `activity_recognition` 传感器。

## 编码请求消息

要向传感器子系统发送所有类型的客户端请求，应使用 `sns_client_request_msg` proto 消息，并且必须使用生成的 Java Protobuf API 对该消息进行编码。

要在 `sns_client_request_msg` 的必填字段中填入值，可通过 `newBuilder()` 方法获取此消息的构建器。

**SUID 请求**

传感器子系统包含 SUID 传感器，该传感器具有子系统上所有可用传感器的 &lt;数据类型, SUID&gt; 映射。收到 SUID 请求后，该 SUID 传感器会提供客户端查找的传感器的 SUID。

要发送 SUID 请求，必须使用 SUID 请求配置来编码 sns\_client\_request\_msg。必须按照 SUID 请求来填充 sns\_std\_suid 和 suspend\_config 子消息，sns\_suid\_req 消息用于 SUID 请求，SUID 上下限必须为“12370169555311111083”，必须按照如下所示填充值：

     sns_suid_req.Builder suid_req_build = sns_suid_req.newBuilder();
                        suid_req_build.setDataType("activity_recognition");
                        suid_req_build.setDefaultOnly(true);
                        suid_req_build.setRegisterUpdates(true);
                        sns_std_suid.Builder std_suid_build = sns_std_suid.newBuilder();
                        LOOKUP_SUID = Long.parseUnsignedLong("12370169555311111083")
                        std_suid_build.setSuidHigh(LOOKUP_SUID);
                        std_suid_build.setSuidLow(LOOKUP_SUID);
                        sns_std_suid std_suid = std_suid_build.build();Copy to clipboard

必须将填充的 sns\_suid\_req 消息设置为 sns\_std\_request 的净荷字段，具体如下所示：

     sns_std_request.Builder std_request = sns_std_request.newBuilder();
                        std_request.setPayload(suid_req_build.build().toByteString());
                        
                        sns_std_request must be set as request field for sns_client_request_msg as follows:
                        request_msg.setRequest(std_request.build());
                        sns_client_request_msg.Builder client_req_msg = sns_client_request_msg.newBuilder();
                        client_req_msg.setMsgId(sns_suid_msgid.SNS_SUID_MSGID_SNS_SUID_REQ_VALUE);
                        client_req_msg.setSuid(std_suid);
                        client_req_msg.setSuspConfig(suspend_config.build());
                        client_req_msg.setRequest(std_request);Copy to clipboard

应将 client\_req\_msg 转换为 byteArray，并使用 send\_request() API 将其发送至传感器子系统。

     byte[] bytedata = request_msg.build().toByteArray();Copy to clipboard

## Sns 构建器

    sns_client_request_msg.Builder request_msg=sns_client_request_msg.newBuilder();Copy to clipboard

sns\_client\_request\_msg 中包含子消息，即 `sns_std_suid`、`suspend_config` 和 `sns_std_request`。`sns_std_suid` 用于保存请求专用传感器的 SUID。

以下代码用于编码 `sns_std_suid` 子消息：

    sns_std_suid.Builder std_suid_build = sns_std_suid.newBuilder();
                std_suid_build.setSuidHigh(SuidHigh);
                std_suid_build.setSuidLow(SuidLow);
                sns_std_suid std_suid = std_suid_build.build();Copy to clipboard

suspend\_config 用于保存客户端处理器的传输类型配置。

以下示例代码用于编码此子消息：

    sns_client_request_msg.suspend_config.Builder suspend_config = sns_client_request_msg.suspend_config.newBuilder();
                suspend_config.setClientProcType(sns_std_client_processor.SNS_STD_CLIENT_PROCESSOR_APSS);
                suspend_config.setDeliveryType(sns_client_delivery.SNS_CLIENT_DELIVERY_WAKEUP);Copy to clipboard

sns\_std\_request 用于设置批处理配置、发送属性请求和 SUID 请求。

## 通过配置启动传感器

如果客户端要收集传感器子系统上某一特定传感器的数据，则必须使用 send\_request API 向子系统发送 protobuf 编码的特殊 sns\_client\_request\_msg 启动请求。

必须在 `sns_std_suid` 子消息中填充要启动的传感器的 SUID 值。必须根据客户端类型来填充 `suspend_config` 子消息。

必须按如下所示填充 `sns_std_request` 子消息的值：

    sns_std_request.Builder std_request = sns_std_request.newBuilder();
                request_msg.setSuid(std_suid);
                request_msg.setMsgId(SNS_STD_SENSOR_MSGID_SNS_STD_ON_CHANGE_CONFIG_VALUE); // MsgId 514 is for on-change Sensor configuration 
                request_msg.setSuspConfig(suspend_config.build());Copy to clipboard

必须将填充的 `sns_std_request` 设置为 `sns_client_request_msg` 的请求字段，具体如下所示：

    request_msg.setRequest(std_request.build());Copy to clipboard

应将 `client_req_msg` 转换为 byteArray，并使用 send\_request() API 将其发送至传感器子系统。

    byte[] bytedata = request_msg.build().toByteArray();Copy to clipboard

**Parent Topic:** [编码和解码 protobuf 消息](https://docs.qualcomm.com/doc/80-PK177-134Y/topic/encoding_and_decoding_protobuf_messages.html)

Last Published: Jun 22, 2023

[Previous Topic
编码和解码 protobuf 消息](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134Y/topics/encoding_and_decoding_protobuf_messages.md) [Next Topic
解码消息](https://docs.qualcomm.com/bundle/publicresource/80-PK177-134Y/topics/decoding_message.md)