news 2026/10/8 7:20:20

FeitCSI v2.0.0 修复 dat 文件 timestamp=0问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FeitCSI v2.0.0 修复 dat 文件 timestamp=0问题

0. 找到 FeitCSI 源码目录

方式 1:搜索文件定位

find ~ -name "FeitCSI" -type d

执行后会输出类似:

/home/h/FeitCSI-iwlwifi/FeitCSI

这就是源码根目录,复制这个路径。

进入源码目录(把下面路径替换成你搜索出来的真实路径):

cd /home/h/FeitCSI-iwlwifi/FeitCSI

方式 2:查找 Csi.cpp

find ~ -name "Csi.cpp"

输出示例:

/home/h/FeitCSI-iwlwifi/FeitCSI/src/Csi.cpp

去掉/src/Csi.cpp剩下的路径就是源码根目录:/home/h/FeitCSI-iwlwifi/FeitCSI

1. 修改 src/Csi.cpp

nano src/Csi.cpp

1.1 在文件最上方 #include 区域添加

#include <chrono> // 如果是直接删掉 timestamp 前面的注释“//”,则需要添加这个头 #include <sys/time.h> #include <cstdio>

1.2 修改函数 1:loadFromMemory (pHeader, pRawCsiData)(读取本地 dat)

nano 内定位目标代码(任选其一)
方式 A(推荐):Ctrl+W,输入timestamp回车,直接跳转到需要修改的这一行
方式 B:Ctrl+_,输入61回车,跳转到 61 行

void Csi::loadFromMemory(uint8_t *pHeader, uint8_t *pRawCsiData) { memcpy(&this->rawHeaderData, pHeader, CSI_HEADER_LENGTH); this->rawCsiData = new uint8_t[this->rawHeaderData.csiDataSize]; memcpy(this->rawCsiData, pRawCsiData, this->rawHeaderData.csiDataSize); // 原始的代码是this->rawHeaderData.timestamp = (uint64_t)std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 修改为下面的代码 struct timeval tv; gettimeofday(&tv, nullptr); this->rawHeaderData.timestamp = (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec; // 添加调试代码,想要看这个函数修改后是否有效,可以添加以下printf代码 // printf("[DEBUG-FILE] CSI timestamp = %lu\n", this->rawHeaderData.timestamp); this->processRawCsi(); }

1.3 修改函数 2:loadFromMemory (rawData)【网卡实时抓包,核心】

void Csi::loadFromMemory(uint8_t *rawData) { memcpy(&this->rawHeaderData, rawData, CSI_HEADER_LENGTH); this->rawCsiData = new uint8_t[this->rawHeaderData.csiDataSize]; memcpy(this->rawCsiData, &rawData[CSI_HEADER_LENGTH], this->rawHeaderData.csiDataSize); // 下面三句代码都是新增的 struct timeval tv; gettimeofday(&tv, nullptr); this->rawHeaderData.timestamp = (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec; // 可以添加下面调试代码 // printf("[DEBUG-CAPTURE] CSI timestamp = %lu\n", this->rawHeaderData.timestamp); this->processRawCsi(); }

1.4 检查 Csi::save()

找到Csi::save()。如果代码是一次性写入整个结构体:

outfile.write((char*)&rawHeaderData, CSI_HEADER_LENGTH);

✅ 不需要额外修改,timestamp 会跟着 header 存入 dat。

如果是逐个字段手动写 header,则需要手动增加 timestamp 写入。

保存退出 nano:Ctrl+O→ 回车 →Ctrl+X

2. 编译(必须在源码根目录执行)

make clean make

出现 fgets 警告无需处理,只要最后生成bin/app即编译成功。

3. 创建全局软链接(任意目录可执行 feitcsi)

依然在源码根目录运行:

sudo ln -s $PWD/bin/app /usr/local/bin/feitcsi

验证全局命令:新开终端,随便cd到别的文件夹。

cd ~ which feitcsi

有路径输出代表成功。

4. 启动 GUI

xhost +local:root sudo feitcsi --gui

终端保持打开,抓包时会打印 DEBUG 时间戳。

5. 测试与判断

GUI 开始采集 CSI,观察终端输出打印一串大数:

[DEBUG-CAPTURE] CSI timestamp = 176...

✅ 内存获取时间戳成功。

  • 若 dat 解析仍然是 0:save保存函数没有写入 timestamp。
  • 打印一直等于 0 ❌ 赋值代码未生效,检查是否重新编译、代码位置。
  • 采集全新 dat 文件测试,旧 dat 不会更新。

6. 调试完成后(正式版本)

删掉两处printf调试语句,重新编译:

make clean make

快速排查清单

  • 确认当前目录是 FeitCSI 源码根目录(ls src/Csi.cpp能找到文件)。
  • 修改代码后必须make clean && make。
  • 抓包看终端printf输出,定位问题在【内存赋值】还是【文件保存】。
  • 测试用新采集 dat。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 7:20:08

279模式深度解析:[279模式的最新发展趋势2025]

279模式深度解析&#xff1a;279模式的最新发展趋势2025摘要/引言本白皮书旨在深入探讨“279模式”的核心理念、操作机制及其在当前商业环境中的应用价值。随着市场竞争的日益激烈和消费者需求的多样化&#xff0c;企业正积极寻求创新的商业模式以实现可持续增长。本文将重点解…

作者头像 李华
网站建设 2026/10/8 7:19:55

Codex 与 Claude Code 实测:AI 编程助手的真实能力边界与配置指南

最近一个月&#xff0c;我至少刷到二十条类似的短视频&#xff1a;主播把 Codex 或 Claude Code 拉进终端&#xff0c;敲一句“帮我写一个股票交易软件”&#xff0c;屏幕上的代码飞速滚动&#xff0c;几分钟后一个带 K 线、能下单的网页应用就出来了。评论区清一色“这也太强了…

作者头像 李华
网站建设 2026/10/8 7:18:05

企业AI落地实战:从RAG知识库到智能体与GEO增长闭环

过去两年&#xff0c;很多企业都在讨论大模型、智能体和数字员工&#xff0c;但真正进入业务现场后&#xff0c;常见结果却是&#xff1a;演示效果很好&#xff0c;上线以后没人用&#xff1b;采购了多个工具&#xff0c;数据仍然彼此割裂&#xff1b;知识库做出来了&#xff0…

作者头像 李华
网站建设 2026/10/8 7:17:10

药品感冒药999感冒灵检测数据集实战:VOC转YOLO与训练避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华