Skip to content

重构:AT与模组层与底层硬件解耦,建立硬件抽象层(HAL)#1

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/refactor-hardware-interface-abstract
Draft

重构:AT与模组层与底层硬件解耦,建立硬件抽象层(HAL)#1
Copilot wants to merge 2 commits intomainfrom
copilot/refactor-hardware-interface-abstract

Conversation

Copy link
Copy Markdown

Copilot AI commented Mar 31, 2026

AT 命令层和模组业务层直接依赖芯片专用驱动(drv_uart、CW32L011 GPIO/NVIC),导致移植困难。HAL 层存在反向依赖(hal-at.c 调用 dev 层的 module_notify_init())。

架构变更

分层现在严格单向:

dev/at.c / dev/module.c   ← 仅调用 hal-at.h / hal_module.h
        ↓
hal/hal-at.c / hal_module.c   ← 移植时只需替换此层
        ↓
drv/ + chip/(芯片专用)

新增文件

  • hal/inc/hal_module.h — 模组硬件抽象接口:hal_module_rst()hal_module_notify_init/deInit/resume()hal_module_notify_callback()(回调由 dev 层实现,HAL ISR 调用)
  • hal/src/hal_module.c — CW32L011 实现:将原 module.c 中的 GPIOB_IRQHandler、GPIO 配置、NVIC 操作全部移入此处

解耦变更

  • dev/src/at.c — 删除 drv_uart.h 引用;getAtUart()->line_ready / drv_atUart_getLine() / drv_atUart_init() 统一替换为 hal_at_is_line_ready() / hal_at_get_line() / hal_at_reinit_baudrate()
  • hal/inc/hal-at.h — 新增上述三个接口 + HAL_AT_LINE_BUF_LEN
  • hal/src/hal-at.c — 实现新接口;移除对 module_notify_init/deInit 的调用(消除反向依赖)
  • dev/src/module.c — 所有芯片专用代码替换为 hal_module_* 调用;实现 hal_module_notify_callback();移除 GPIOB_IRQHandler
  • dev/inc/module.h — 删除 #include "cw32l011_gpio.h"POWER_KEY_PORT/PIN 等 GPIO 宏(移至 app_lowpower.c 本地定义)

移植方法

移植到新平台只需实现两个文件:

// hal/src/hal-at.c — 实现 UART 收发
void hal_at_init(void)         { /* 初始化目标平台 UART */ }
bool hal_at_is_line_ready(void){ /* 返回行接收就绪标志 */ }
bool hal_at_get_line(char *buf, uint16_t size) { /* 读取一行 */ }
// ...

// hal/src/hal_module.c — 实现 GPIO/中断
void hal_module_rst(void)      { /* RST 引脚复位时序 */ }
void hal_module_notify_init(void) { /* 配置通知引脚中断 */ }
void YOUR_GPIO_IRQHandler(void){ hal_module_notify_callback(); }

dev/ 层及以上代码无需任何修改。

文档

README.md 新增完整的架构说明、各层接口参考表及移植检查清单。

Original prompt
  1. 将AT指令相关的代码与底层硬件解耦,抽象出硬件接口层,以便于在不同的芯片和平台上进行移植。
  2. 将业务模块(module)相关的代码与底层脱离,降低系统耦合度,提升模块的可复用性和可移植性。
  3. 优化软件架构,使得其他开发者在使用或移植该代码时,只需要对接或实现底层的硬件接口层(如UART发送/接收等),而无需修改上层业务代码。
  4. 保证重构后的代码在当前的芯片上依然能够正常编译和运行,实现原有的所有功能。
  5. 在项目中生成一份详细的使用手册(如 README.md 或专门的文档),说明重构后的代码结构以及如何适配底层接口进行移植和使用。

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: 你完成的拉取请求很好,现在重新在另一个分支也建立一个请求
1,阅读所有的todotree插件的标签,包括todo bug xxx test 等,给出你的优化
2,尽最大可能将代码更加的容易懂,条理清晰,结构分层,减少耦合
3,应用层上,以现有的事件驱动的思想,尽可能的完善这个驱动。并且让他尽可能的有可复用的特性。
4,在lib文件里面提供更多的嵌入式裸机单片机应该用到的库
5,给出你自己的见解,完成代码修改

Assistant: 等待您确认拉取请求的创建操作后,我们即可继续进行后续的代码优化和修改。

Assistant: 我已经开始在仓库 zlun10/interphone_expandIC_code 上创建拉取请求以完成您描述的任务。您可以随时跟踪进度并查看任务完成状态。

User: 是在feat sgid 分支

User: 在feat sgid分支
1,创建一个请求
2,将串口的驱动完善,特别是at指令这一块,完善错误处理,增强健壮性
3,用中文

Assistant: 我已经收到您的要求,正在等待您确认该操作以继续创建新的拉取请求。

Assistant: 在尝试创建拉取请求时,未能找到仓库 zlun10/interphone_expandIC_code 或其 feat sgid 分支

User: 创建一个拉取请求
1,将at相关的与底层脱离出来,以便于在别的芯片能移植
2,将module相关的与底层脱离出来,降低耦合,以便于他人可以移植
3,我希望别人用的时候,只需要接管底层的接口就行了,上层不需要更改
4,要能够在现在的芯片还能实现功能
5,生成一个使用手册

Assistant: 等待您确认拉取请求操作后,我们即可开始解耦AT和模块层的代码并生成使用手册。

This pull request was created from Copilot chat.

Copilot AI changed the title [WIP] Refactor code to decouple AT commands from hardware 重构:AT与模组层与底层硬件解耦,建立硬件抽象层(HAL) Mar 31, 2026
Copilot AI requested a review from zlun10 March 31, 2026 15:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants