【V2X】BP QMI框架概述

核心原则

框架层隐形,业务层极简。BP侧服务开发者只需实现回调,TLV编解码、事务管理、连接状态都由框架自动处理。


一、服务生命周期(3个函数)

阶段 函数 作用
注册 qmi_csi_register() 服务上线,传入回调表
运行 process_req_cb() 处理请求,发送响应/指示
注销 qmi_csi_unregister() 服务下线

二、请求处理标准范式

复制代码
AP请求到达
    │
    ▼
┌─────────────────────────────────┐
│  QMI框架(自动完成)             │
│  • QMUX解复用                    │
│  • TLV decode → req_c_struct    │
│  • txn_id 提取到 req_handle      │
└─────────────────────────────────┘
    │
    ▼
process_req_cb(req_handle, msg_id, req_c_struct, req_len, service_cookie)
    │
    ├── switch(msg_id)
    │       │
    │       ├── case REQ_XXX:
    │       │       读取 req_c_struct
    │       │       业务逻辑处理
    │       │       填充 resp_c_struct
    │       │       
    │       │       qmi_csi_send_resp(req_handle, msg_id, 
    │       │                         resp_c_struct, resp_len)
    │       │       break
    │       │
    │       └── case REQ_YYY:
    │               ...
    │
    └── 异常/默认:返回错误码

三、发送接口(2个函数)

函数 场景 关键参数
qmi_csi_send_resp() 响应AP请求 req_handle(复用事务上下文)
qmi_csi_send_ind() 主动上报事件 client_handle(指定目标客户端)

四、回调表(注册时传入)

c 复制代码
// 连接/断开回调(可选,用于资源管理)
service_connect_cb(client_handle, service_cookie);
service_disconnect_cb(client_handle, service_cookie);

// 核心处理回调(必须)
process_req_cb(req_handle, msg_id, req_c_struct, req_len, service_cookie);

五、框架隐藏的细节(业务层不可见)

机制 AP侧显式处理 BP侧框架自动
TLV编解码 qmi_idl_message_encode/decode 回调直接收/发C结构体
事务ID(txn_id) 手动匹配请求-响应 封装在req_handle中自动复用
服务发现 qmi_client_get_service_list() 框架自动响应CTL查询
客户端标识 qmi_client_init()生成 client_handle区分多AP连接

六、与AP侧的对称关系

复制代码
AP侧(客户端)                      BP侧(服务端)
─────────────────────────────────────────────────────────
qmi_client_init()  ─────────────→  service_connect_cb
qmi_client_send_msg_sync() ─────→  process_req_cb
等待响应回调 ◄────────────────────  qmi_csi_send_resp()
qmi_client_release() ───────────→  service_disconnect_cb

七、关键修正

我之前瞎编的 实际正确的
qmi_framework_init() 不存在或RTOS静态完成,业务层不可见
qmi_service_register() qmi_csi_register()
qmi_csi_process_request() 框架内部函数,业务层看到的是process_req_cb回调
qmi_idl_message_decode()在回调中调用 框架已decode完,req_c_struct直接可用

这就是BP侧QMI框架的完整图景:极简回调驱动,框架包办底层 。你的switch(msg_id)流程是标准范式。

相关推荐
code monkey.34 分钟前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
2401_8924233636 分钟前
OSPF笔记
网络·智能路由器
草莓熊Lotso37 分钟前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
The Straggling Crow7 小时前
Network
网络
yyuuuzz7 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
Oll Correct10 小时前
实验二十九:TCP的运输连接管理
网络·笔记
Cheng小攸12 小时前
综合实验2
网络·windows
Soari13 小时前
SSH 主机密钥冲突
运维·网络·ssh
且听风吟_xincell14 小时前
用 TypeScript 从零写一个 TCP 聊天室(上)—— 网络编程入门实战
网络·tcp/ip·typescript
万法若空16 小时前
Libevent C语言开发完全教程:从入门到实战
c语言·网络