5.7 KiB
5.7 KiB
代码阅读顺序
这份顺序不是按“文件名排序”,而是按“学生最容易建立整体理解”的顺序排的。
第一轮:先看最上层界面怎么把链路串起来
-
main.cpp 先看程序从哪里启动,主题在哪里设置,主窗口是哪个类。
-
APP/APP_UIWindow.h 先看主窗口成员和函数声明,建立“APP 层到底做什么”的总印象。
-
APP/APP_UIWindow.cpp 重点看这几个函数:
App_Func_InitWindow()App_Func_InitUi()App_Func_InitConnect()App_Func_InitLogic()App_Func_OnPollTimer()App_Func_RefreshDebugView()
这一轮的目标是先搞清楚:
- 主窗口什么时候创建
- 调试窗口什么时候插入
- 定时轮询什么时候启动
- UI 是怎么调用 LGC 的
第二轮:看调试开关和调试界面
-
DEBUG/Debug_Config.h 看总开关宏
APP_ENABLE_DEBUG_WINDOW。 -
DEBUG/Debug_Panel.cpp 看调试窗口只负责“显示”,不负责“解析”。
这一轮的目标是搞清楚:
- 为什么调试功能可以整体开关
- 为什么 UI 层只显示文本,不做协议解析
第三轮:看 APP 层自己的纯界面数据
-
APP/APP_KeypadModel.cpp 这是界面按键布局数据,不是 HID 协议。
-
APP/APP_Theme.cpp 这是界面主题,不是协议,也不是设备层。
这一轮的目标是明确:
- APP 层有哪些东西只是“画界面”
- 哪些东西绝对不能混进 DRI / LGC
第四轮:看 MID 层,建立协议常量和公共结构认知
这一轮一定要记住:
- 当前有 3 个主链 report:
0x01 / 0x03 / 0x04 0x04是FF00 / 00020x04固定结构是[report_id | modifier | usage_bitmap(29)]- MID 只放“大家共用的固定定义”,不放设备打开逻辑,也不放协议语义判断
第五轮:看 LGC 总控,理解“谁调用谁”
重点看:
Lgc_Core_Func_Start()Lgc_Core_Func_RefreshDevice()Lgc_Core_Func_Poll()
这一轮要看懂:
- LGC 怎么分别驱动
Dri_NkroRaw / Dri_Consumer / Dri_Vendor - 收到原始包以后,怎么分流给不同解析函数
- 最后为什么 UI 只拿到整理好的文本
第六轮:看三个 report 的协议解析
-
LOGIC/Lgc_Vendor.cpp 这一组最重要,先精读。
这一轮的目标:
- 彻底看懂
0x04的完整解析流程 - 再回头看
0x01和0x03
第七轮:最后看 DRI,理解“原始包从哪来”
-
DRI/Dri_Vendor.cpp 先看 vendor,因为当前调试最关键。
这一轮要明确:
- DRI 只负责枚举、打开、读写
- DRI 不判断业务语义
- DRI 不解释
report id 0x04代表什么
一个最推荐的实际阅读路径
如果你这次只想先吃透“调试抓包 + 0x04 解析”这一条线,最推荐按下面顺序读:
main.cppAPP/APP_UIWindow.hAPP/APP_UIWindow.cppDEBUG/Debug_Config.hDEBUG/Debug_Panel.hDEBUG/Debug_Panel.cppLOGIC/Lgc_Core.hLOGIC/Lgc_Core.cppLOGIC/Lgc_Vendor.hLOGIC/Lgc_Vendor.cppMID/Mid_Def.hMID/Mid_Def.cppDRI/Dri_Vendor.hDRI/Dri_Vendor.cpp
这个顺序最符合教学。 原因很简单:
- 先知道“程序怎么串起来”
- 再知道“调试窗口怎么显示”
- 再知道“逻辑层怎么分流”
- 再知道“0x04 怎么解析”
- 最后才看“Windows HID 怎么打开”