Files
0417_QT_code/CODE_READING_ORDER.md
2026-03-26 10:45:29 +08:00

5.7 KiB
Raw Blame History

代码阅读顺序

这份顺序不是按“文件名排序”,而是按“学生最容易建立整体理解”的顺序排的。

第一轮:先看最上层界面怎么把链路串起来

  1. main.cpp 先看程序从哪里启动,主题在哪里设置,主窗口是哪个类。

  2. APP/APP_UIWindow.h 先看主窗口成员和函数声明建立“APP 层到底做什么”的总印象。

  3. APP/APP_UIWindow.cpp 重点看这几个函数:

    • App_Func_InitWindow()
    • App_Func_InitUi()
    • App_Func_InitConnect()
    • App_Func_InitLogic()
    • App_Func_OnPollTimer()
    • App_Func_RefreshDebugView()

这一轮的目标是先搞清楚:

  • 主窗口什么时候创建
  • 调试窗口什么时候插入
  • 定时轮询什么时候启动
  • UI 是怎么调用 LGC 的

第二轮:看调试开关和调试界面

  1. DEBUG/Debug_Config.h 看总开关宏 APP_ENABLE_DEBUG_WINDOW

  2. DEBUG/Debug_Panel.h

  3. DEBUG/Debug_Panel.cpp 看调试窗口只负责“显示”,不负责“解析”。

这一轮的目标是搞清楚:

  • 为什么调试功能可以整体开关
  • 为什么 UI 层只显示文本,不做协议解析

第三轮:看 APP 层自己的纯界面数据

  1. APP/APP_KeypadModel.h

  2. APP/APP_KeypadModel.cpp 这是界面按键布局数据,不是 HID 协议。

  3. APP/APP_Theme.h

  4. APP/APP_Theme.cpp 这是界面主题,不是协议,也不是设备层。

这一轮的目标是明确:

  • APP 层有哪些东西只是“画界面”
  • 哪些东西绝对不能混进 DRI / LGC

第四轮:看 MID 层,建立协议常量和公共结构认知

  1. MID/Mid_Def.h
  2. MID/Mid_Def.cpp

这一轮一定要记住:

  • 当前有 3 个主链 report0x01 / 0x03 / 0x04
  • 0x04FF00 / 0002
  • 0x04 固定结构是 [report_id | modifier | usage_bitmap(29)]
  • MID 只放“大家共用的固定定义”,不放设备打开逻辑,也不放协议语义判断

第五轮:看 LGC 总控,理解“谁调用谁”

  1. LOGIC/Lgc_Core.h
  2. LOGIC/Lgc_Core.cpp

重点看:

  • Lgc_Core_Func_Start()
  • Lgc_Core_Func_RefreshDevice()
  • Lgc_Core_Func_Poll()

这一轮要看懂:

  • LGC 怎么分别驱动 Dri_NkroRaw / Dri_Consumer / Dri_Vendor
  • 收到原始包以后,怎么分流给不同解析函数
  • 最后为什么 UI 只拿到整理好的文本

第六轮:看三个 report 的协议解析

  1. LOGIC/Lgc_Vendor.h

  2. LOGIC/Lgc_Vendor.cpp 这一组最重要,先精读。

  3. LOGIC/Lgc_Nkro.h

  4. LOGIC/Lgc_Nkro.cpp

  5. LOGIC/Lgc_Consumer.h

  6. LOGIC/Lgc_Consumer.cpp

这一轮的目标:

  • 彻底看懂 0x04 的完整解析流程
  • 再回头看 0x010x03

第七轮:最后看 DRI理解“原始包从哪来”

  1. DRI/Dri_Vendor.h

  2. DRI/Dri_Vendor.cpp 先看 vendor因为当前调试最关键。

  3. DRI/Dri_NkroRaw.h

  4. DRI/Dri_NkroRaw.cpp

  5. DRI/Dri_Consumer.h

  6. DRI/Dri_Consumer.cpp

这一轮要明确:

  • DRI 只负责枚举、打开、读写
  • DRI 不判断业务语义
  • DRI 不解释 report id 0x04 代表什么

一个最推荐的实际阅读路径

如果你这次只想先吃透“调试抓包 + 0x04 解析”这一条线,最推荐按下面顺序读:

  1. main.cpp
  2. APP/APP_UIWindow.h
  3. APP/APP_UIWindow.cpp
  4. DEBUG/Debug_Config.h
  5. DEBUG/Debug_Panel.h
  6. DEBUG/Debug_Panel.cpp
  7. LOGIC/Lgc_Core.h
  8. LOGIC/Lgc_Core.cpp
  9. LOGIC/Lgc_Vendor.h
  10. LOGIC/Lgc_Vendor.cpp
  11. MID/Mid_Def.h
  12. MID/Mid_Def.cpp
  13. DRI/Dri_Vendor.h
  14. DRI/Dri_Vendor.cpp

这个顺序最符合教学。 原因很简单:

  • 先知道“程序怎么串起来”
  • 再知道“调试窗口怎么显示”
  • 再知道“逻辑层怎么分流”
  • 再知道“0x04 怎么解析”
  • 最后才看“Windows HID 怎么打开”