alpha_generate_pwd.h
源文件路径:
common/alpha_generate_pwd.h所属模块:common(通用工具库) 代码行数:9
1. 文件职责
本文件是 common/alpha_generate_pwd.c 的对外接口头文件,只暴露一个函数原型 alpha_generate_pwd 和一个缓冲长度常量 ALPHA_GENERATE_PWD_LENGTH。它的唯一用途是为「一机一密」的 Wi-Fi 模块(易联/E-Linker)生成 8 字符接入密钥:midware/ethernt/wireless/wifi/e_linker_wifi.c 把设备 SN 作为输入,得到固定 8 位密钥串后再写入无线模组。本文件不含实现、不含状态、不参与数据流计算,属纯粹的声明文件;全部 9 行中有 5 行是空行与注释,实际代码只有 4 行。
2. 关键数据结构与宏
| 名称 | 类型 | 说明 |
|---|---|---|
__ALPHA_GENERATE_PWD_H__ | 宏 | include guard(第 2-3 行) |
ALPHA_GENERATE_PWD_LENGTH | 宏 | 9,输出缓冲长度,含结尾 \0(第 6 行注释明确)。因此生成的密钥恒为 8 个可见字符 |
alpha_generate_pwd | 函数原型 | s32 alpha_generate_pwd(char *input_str, char *output_str)(第 8 行) |
本文件不定义结构体、枚举、联合体、位域;没有其它宏常量。返回值类型 s32 由 #include "includes.h"(第 4 行)间接引入。
3. 函数清单
| 函数名 | 作用域 | 说明 |
|---|---|---|
alpha_generate_pwd | 全局(原型声明) | 由输入字符串(约定为设备 SN)按固定公式算出 8 位大写 HEX 密钥写入 output_str,成功返回 TRUE,定义于 alpha_generate_pwd.c:14 |
共 1 个原型声明,对应 alpha_generate_pwd.c 的全局定义;本头文件没有 static 函数、没有宏函数、没有回调类型。
4. 核心逻辑解析
本文件是纯声明文件,无可执行逻辑、无状态机、无定时器、不涉及 uCOS-II。要点在接口契约:
4.1 缓冲长度契约
ALPHA_GENERATE_PWD_LENGTH = 9 同时被两处使用,构成隐含契约:
- 调用方按该长度定义缓冲:
midware/ethernt/wireless/wifi/e_linker_wifi.c:188的char password_buf[ALPHA_GENERATE_PWD_LENGTH] = {0}; - 实现内部用该长度做
snprintf的 size 参数并把最后一个字节强制置 0(alpha_generate_pwd.c:55)
因此「输出恰好 8 字符 + \0」是本模块的对外不变式。若日后需要更长的密钥,必须同时改头文件宏、实现中的三段拼接公式(3+2+3=8)与 set_e_linker_key_algorithm 的写入逻辑,三者耦合度较高。
4.2 输入约定未在头文件声明
头文件没有注释说明输入字符串的长度范围(实际实现要求 11~18 字节,见 alpha_generate_pwd.c:3-4),缺失的约束只在 .c 内部以 printf 提示。使用者从本头文件无法得知调用前提。
4.3 返回值的语义
返回 s32,取值来自 chip.h 的 typedef enum {FALSE = 0, TRUE = !FALSE} bool;(system/sys/chip.h:64),即 0 / 1。函数仅在参数为空指针或输入过短时返回 FALSE;输入过长只打印提示、不返回失败(详见 alpha_generate_pwd.c 第 7 节风险 2)。调用方 e_linker_wifi.c:247 也确实忽略了返回值。
5. 对外接口
本文件导出(供谁调用)
- 宏:
ALPHA_GENERATE_PWD_LENGTH - 函数原型:
alpha_generate_pwd - 调用方:
midware/ethernt/wireless/wifi/e_linker_wifi.c(第 20 行 include;第 188 行用宏定义缓冲;第 247 行调用)。grep -rn "alpha_generate_pwd"在全工程只命中这两处加common自身。
本文件调用的外部函数/变量
- 无。头文件只 include
includes.h。
6. 依赖关系
- 依赖:
UCOSII/uCOS-CONFIG/includes.h(第 4 行),它进一步引入stdio.h、string.h、stdlib.h、ucos_ii.h、gd32f4xx.h、chip.h。本文件自己只需要s32与TRUE/FALSE(其实来自chip.h),却经includes.h把整个 RTOS 与芯片头链带入,属过重的传递依赖。 - 被依赖:
common/alpha_generate_pwd.c、midware/ethernt/wireless/wifi/e_linker_wifi.c。工程 Keil 目标user/EMS_3_0.uvprojx中包含alpha_generate_pwd.c,参与编译。
7. 备注与风险点
- 缺少文件头注释:文件第 1 行是空行,直接从 include guard 开始,没有
@file/@author/@version/@date,与同目录的simple_encryption.h(有完整注释模板)形成对比,无法从文件本身追溯来源与变更历史。 includes.h是过重依赖:只为一个s32与TRUE/FALSE就把 uCOS-II 与 GD32 全量头引入;改用chip.h可显著减轻编译单元负担,也避免 common 层绑定 RTOS。- 长度宏的双重语义:
ALPHA_GENERATE_PWD_LENGTH名为「密码长度」,实际是「缓冲长度(含\0)」。名字与语义差 1,调用方若按「字符数」理解写成char buf[8]会溢出。注释「包括\0」是唯一的保护。 - 输入长度约束只在实现里:11~18 字节的输入要求没有出现在头文件注释中,跨文件阅读时容易漏掉。
- 无
const修饰输入:char *input_str声明为非 const,而实现并不修改输入;调用方传入get_system_sn()返回的可写静态缓冲(net/server.c:414-422),实际无误,但接口语义不清晰。 - 返回值可被忽略且无二次校验:调用点
e_linker_wifi.c:247未检查返回值,password_buf在失败时保持全 0,随后仍会被写入模组(第 250 行),属调用方的容错缺口(见e_linker_wifi.c的重试循环for(i = 0;i < 3;i++))。