> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# QMI 示例

> 基于描述符的 QMI 请求、响应和指示模式。

以下示例展示了 QMI 请求/响应和指示交换的操作顺序。它们侧重于流程和所有权，而非具体的服务定义。

## 同步客户端请求

客户端创建一个句柄，连接到服务，然后发送请求。客户端等待响应直到达到超时时间。在整个调用期间，调用方拥有请求和响应存储。传输层成功返回意味着已收到并解码响应；服务级的结果字段仍需检查。

流程如下：

1. 使用一个用于服务事件的回调创建 QMI 句柄。
2. 通过服务 ID 和实例 ID 将句柄连接到服务。
3. 发送请求并等待响应（直到超时）。
4. 检查响应是成功还是失败。
5. 完成后销毁句柄。

## 异步客户端请求

客户端发送请求但不等待响应。响应到达时会调用响应回调。回调上下文应包含完成请求所需的全部状态。它必须在回调运行之后或按接口的生命周期规则取消请求之后才被释放。

流程如下：

1. 使用一个用于服务事件的回调创建 QMI 句柄。
2. 通过服务 ID 和实例 ID 将句柄连接到服务。
3. 发送请求，并附带响应回调和私有上下文。
4. 响应到达时调用回调。
5. 回调处理响应并清理上下文。
6. 完成后销毁句柄。

## 服务端请求处理

服务从客户端收到一个请求。服务可以同步处理该请求，或保存请求上下文以稍后完成。服务必须保留请求句柄、客户端引用以及构造响应所需的任何已解码请求状态。断开处理必须安全地取消延迟工作。

流程如下：

1. 客户端向服务发送请求。
2. 服务接收带有消息 ID 和已解码数据的请求。
3. 服务处理请求（或保存以后续处理）。
4. 服务使用请求句柄发送响应。
5. 响应被送达客户端。

## 指示传递

服务向客户端发送非请求触发的事件。指示不消耗请求事务 ID，客户端应做好在正常请求/响应操作之间接收指示的准备。

流程如下：

1. 客户端注册以接收来自某个服务的指示。
2. 事件发生时，服务发送指示。
3. 客户端接收并处理指示。
4. 客户端可以继续发送请求并接收响应。

## 可选字段

描述符可以表示可选字段。解码器必须遵循传入的字段存在性和长度信息。不要假设字段以固定顺序到达，也不要假设可选字段在每个响应中都存在。当服务契约允许向前兼容时，应忽略未知字段。
