【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)流程是标准范式。

相关推荐
发量惊人的中年网工2 小时前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos
GuoFeng.Wan3 小时前
深入理解经典蓝牙的L2CAP协议
网络
夜月yeyue3 小时前
SOME/IP-SD 服务发现故障
网络·单片机·网络协议·tcp/ip·安全·服务发现
程序员z73 小时前
深入理解 GMP 模型:Go 协程调度器的设计与调度场景全解析
服务器·网络·golang
stolentime3 小时前
OpenClaw 网络数据采集新手入门指南
网络·ai·ai编程
小白说大模型4 小时前
Codex 实战:用 AI 写运维脚本
大数据·运维·网络·人工智能·机器学习·prompt
数字护盾(和中)4 小时前
和中科技剖析 EDR 绕过全链路,AMSI、ETW 规避技术与防御对策
运维·网络·人工智能·科技·安全·web安全
Demons_kirit4 小时前
PortSwigger网络缓存欺骗(1)
网络·缓存
初願致夕霞5 小时前
《为什么公网访问不了内网?正向代理、内网穿透与 NAT 打洞一次说清》
linux·网络·tcp/ip·智能路由器
喜欢吃燃面5 小时前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发