Kindle --FBInk绘图与zforce2 触摸应用开发
一、FBInk帧缓冲绘图FBInk是 Kindle/Kobo 电子墨水屏帧缓冲绘图工具可以直接在 eInk 屏幕输出文字、图片、进度条、局部刷屏、清屏无需调用系统 UI。 版本FBInk v1.24.0-161-gb7a8146设备识别信息前置[FBInk] 检测到 Kindle Basic 2 (0KA - 0x26A Eanab Heisenberg) [FBInk] 系统时钟频率100 Hz [FBInk] 屏幕DPI167 [FBInk] 帧缓冲600×8008位色深屏幕旋转 270°逆时针 [FBInk] 帧缓冲设备mxc_epdc_fb显存大小6537216字节行宽608字节 [FBInk] 默认字体 16×16基础8×8 IBM点阵字库 [FBInk] 默认文本区域37列 × 50行 [FBInk] 默认颜色前景黑色背景白色1、 文本位置控制参数基础语法fbink [参数] [文本内容...]参数全称说明-x NUM--col起始列默认 0负数代表从屏幕右侧倒数建议起始≥1 避免被边框遮挡-y NUM--row起始行默认 0负数代表从屏幕底部倒数建议起始≥1-X NUM--hoffset水平像素偏移叠加在行列之上可正负-Y NUM--voffset垂直像素偏移-m--centered文本水平居中-M--halfway垂直居中此时-y的数值是相对于屏幕中线的偏移量-p--padded两端填充空格配合-m实现整行居中铺满-r--rpadded右侧填充空格2、 文本外观控制参数参数全称说明-h--invert反转颜色背景色写字、前景色做底色黑底白字-f--flash刷新区域启用黑屏全刷eink 清除残影耗电更高-c--clear打印前全屏清屏仅清屏建议改用-k-k--cls清屏可全屏 / 局部矩形执行完成直接退出优先级最高-W MODE--waveform指定墨水刷新波形A2,DU,GC16,GL16,AUTOKindle 额外支持 REAGL、GC16_FAST 等-D--dither硬件抖动仅新设备支持-H--nightmode硬件全局反色和-h可叠加-b--norefresh只写入帧缓冲不触发屏幕刷新适合批量绘图最后统一刷新-w--wait阻塞等待内核刷新完成再返回-S NUM--size字体缩放倍数自动 0范围 1~45-F NAME--font内置点阵字体IBM、UNSCII、THIN、TEWI、ORP、TERMINUS 等-C COLOR--color文字颜色BLACK、GRAY1~GRAYE、WHITE-B COLOR--background文字底色-O--bgless不绘制文字背景只渲染文字轮廓-o--overlay叠加模式自动取底层像素反色优先级高于 - O-T--fgless不绘制前景文字3、特殊绘图模式进度条-P NUMfbink -P 35绘制全屏宽度 35% 进度条活动加载条-A NUMfbink -A 80~16负数自动循环动画局部 / 全屏刷新-s只触发屏幕刷新不修改画面fbink -s top20,left10,width500,height600 -W GC16图片显示-g / -i支持 PNG/JPG/BMP可缩放、对齐、软件抖动fbink -g file/mnt/us/test.png,halignCENTER,valignMIDDLE4、TrueType/OTF 矢量字体可以调用 ttf 自定义字体Kindle 内置 Caecilia支持 Markdown 粗体 / 斜体fbink -t regular/usr/java/lib/fonts/Caecilia_LT_65_Medium.ttf,size22,top50 自定义矢量文字5、输出调试与脚本参数-q静默关闭硬件检测日志-v详细日志-E输出绘制区域坐标方便 shell 脚本解析-e输出设备环境变量eval $(fbink -e)直接导入变量-d NUM守护进程模式启动 FIFO 管道/tmp/fbink-fifo持续接收文本输出适合仪表盘常驻刷新6、常用命令示例适配 Kindle Basic2 600×8001. 基础文字输出# 第10行、第2列输出文字 fbink -x 1 -y 10 Hello Kindle!2. 居中、黑底白字# 水平居中垂直居中向上偏移5行、反色高亮 fbink -pmh -y -5 System Information-m居中-p两端空格填充-h反转颜色-y -5距离底部向上 5 行3. 全屏清屏后打印文字fbink -c -m -M Clear4. 局部矩形清屏清空底部状态栏区域fbink -k top720,left0,width600,height805. 快速局部 GC16 刷新不绘图只消残影fbink -s top700,left0,width600,height100 -W GC166. 显示图片屏幕居中fbink -g file/mnt/us/img.png,halignCENTER,valignMIDDLE7. 启动守护进程常驻仪表盘推荐做动态面板# 最多容纳8行文本 PID$(fbink -d 8) # 向管道写入内容屏幕实时更新 echo CPU: 32% Battery:78% /tmp/fbink-fifo # 关闭 kill $PID8. 使用更大字体、更换内置字体fbink -F TEWI -S 2 -m Hello Kindle9. 无背景文字叠加不覆盖原有画面fbink -O -x 2 -y 2 Test...重要使用提示多次连续绘图建议搭配-b先写入缓冲区最后一次不带-b统一刷新减少墨水刷屏次数、减缓老化-W A2快速刷新残影重GC16/GL16灰度高质量刷新大量动态刷新尽量少用-fflash 黑屏全刷频繁全刷损耗屏幕多行文本文字直接写在同一个引号内不要分成多个参数多个参数配合-c只会显示最后一行坐标同时支持「绝对正数」和「负数反向计数」很适合做自适应底部状态栏。7、显示时间程序#include stdio.h #include unistd.h #include sys/types.h #include sys/wait.h #include time.h static int fbink_exec(char *const argv[]) { pid_t pid fork(); if (pid 0) { perror(fork); return -1; } if (pid 0) { execvp(argv[0], argv); perror(execvp fbink); _exit(127); } int status; waitpid(pid, status, 0); if(WIFEXITED(status)){ return WEXITSTATUS(status); } return -1; } //局部区域白色擦除 static int fbink_local_clear(void) { char * const argv[] { /usr/bin/fbink, -k, top400,left0,width600,height15, NULL }; return fbink_exec(argv); } //屏幕居中输出文本 static int fbink_center_text(const char *text) { char * const argv[] { /usr/bin/fbink, -m, -M, (char *)text, NULL }; return fbink_exec(argv); } int main(void) { char timestr[64]; time_t now; struct tm *tm_ptr; for(;;) { now time(NULL); tm_ptr localtime(now); snprintf(timestr, sizeof(timestr), %04d/%02d/%02d %02d:%02d, tm_ptr-tm_year 1900, tm_ptr-tm_mon 1, tm_ptr-tm_mday, tm_ptr-tm_hour, tm_ptr-tm_min); printf(%s\n, timestr); fbink_local_clear(); //局部擦除旧内容 fbink_center_text(timestr); //输出新时间 sleep(1); } return 0; }Linux 主机交叉编译arm-linux-gnueabi-gcc -marcharmv7-a -mtunecortex-a9 -msoft-float -mabiaapcs-linux show-time.c -o show-time上传程序scp ./show-time root192.168.1.4:/mnt/us/gcc-testkindle端运行#cd /mnt/us/gcc-test #./show-time二、kindle 触摸屏开发1、触摸屏设备设备节点确认cat /proc/bus/input/devices I: Bus0000 Vendor0000 Product0000 Version0000 N: Namezforce2 P: Physzforce2/input0 S: Sysfs/devices/platform/zforce2.0/input/input0 U: Uniq H: Handlersevent0 B: PROP2 B: EVb B: KEY6420 0 0 0 0 0 0 0 0 0 0 B: ABS2608000 0Kindle 8 (PW3)触摸驱动是zforce2不是 mtk‑tpd触摸设备节点/dev/input/event0。 zforce2 是多点触摸 MT protocol B使用ABS_MT_POSITION_X/ABS_MT_POSITION_Y。坐标说明zforce2 PW3屏幕分辨率 600 × 800ABS_MT_POSITION_X0 ~ 600ABS_MT_POSITION_Y0 ~ 800和 FBInk 绘图坐标完全兼容可以直接传给 fbink 的-x-y参数。⚠️zforce2 的关键特性没有 BTN_TOUCH 事件依靠ABS_MT_TRACKING_ID判断按下抬起tracking_id ! -1→ 手指按下tracking_id -1→ 手指抬起设备节点固定/dev/input/event0来自你/proc/bus/input/devices的Handlersevent0。程序打开 event0 后系统原生触摸会失效事件抢占程序退出后恢复。必须 root 权限打开/dev/input/event0。2、zforce2 触摸读取程序逻辑解析 Linux MT‑B 多点触摸协议读取手指按下、抬起、X/Y 坐标。#include stdio.h #include stdlib.h #include unistd.h #include fcntl.h #include errno.h #include linux/input.h #include sys/types.h #include sys/stat.h #define TOUCH_DEV /dev/input/event0 int main(void) { int fd; struct input_event ev; int x -1, y -1; int touch_active 0; fd open(TOUCH_DEV, O_RDONLY); if (fd 0) { perror(open /dev/input/event0 failed (need root!)); return EXIT_FAILURE; } printf(zforce2 touch reader. Tap screen, CtrlC exit.\n); for (;;) { ssize_t n read(fd, ev, sizeof(struct input_event)); if (n ! sizeof(struct input_event)) { perror(read event); continue; } switch (ev.type) { case EV_ABS: // MT多点触摸坐标 if (ev.code ABS_MT_POSITION_X) { x ev.value; } else if (ev.code ABS_MT_POSITION_Y) { y ev.value; } else if (ev.code ABS_MT_TRACKING_ID) { /* tracking_id !‑1:手指按下‑1:手指抬起 */ if(ev.value ! -1) { touch_active 1; printf(DOWN x%d y%d\n, x, y); } else { touch_active 0; printf(UP\n); } } break; case EV_SYN: // SYN_REPORT 一次上报结束 break; default: break; } } close(fd); return 0; }Linux 主机交叉编译arm-linux-gnueabi-gcc -marcharmv7-a -mtunecortex-a9 -msoft-float -mabiaapcs-linux touch-read.c -o touch-read上传程序scp ./touch-read root192.168.1.4:/mnt/us/gcc-testkindle端运行#cd /mnt/us/gcc-test #./touch-read DOWN x245 y330 UP DOWN x410 y520 UP

相关新闻

G-Helper技术架构深度解析:开源华硕笔记本硬件控制终极方案

G-Helper技术架构深度解析:开源华硕笔记本硬件控制终极方案

G-Helper技术架构深度解析:开源华硕笔记本硬件控制终极方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…

2026/9/26 4:15:29 阅读更多 →
MoE架构与本地部署实践:从MiMo-V2-Pro看大模型技术演进与应用

MoE架构与本地部署实践:从MiMo-V2-Pro看大模型技术演进与应用

1. 项目概述:天才少女与她的“出圈”大模型最近,一个名字在AI圈内被反复提及:罗福莉。伴随这个名字一起“出圈”的,是她主导或参与开发的“MiMo-V2-Pro”模型。一时间,关于“天才少女”、“震动AI圈”、“MiMo-V2-Pro性…

2026/9/25 12:51:47 阅读更多 →
如何3分钟掌握暗黑3自动化助手:从手忙脚乱到轻松刷图的终极指南

如何3分钟掌握暗黑3自动化助手:从手忙脚乱到轻松刷图的终极指南

如何3分钟掌握暗黑3自动化助手:从手忙脚乱到轻松刷图的终极指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否在暗黑破坏神3的高…

2026/9/21 0:12:31 阅读更多 →

最新新闻

代码阅读工作流实战:用 TaoToken 统一 Key 打通文件搜索、符号跳转与提问策略

代码阅读工作流实战:用 TaoToken 统一 Key 打通文件搜索、符号跳转与提问策略

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

2026/9/26 16:40:44 阅读更多 →
5分钟读懂OpenManus配置:TaoToken统一Key接入Multi Agent实战

5分钟读懂OpenManus配置:TaoToken统一Key接入Multi Agent实战

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

2026/9/26 16:40:44 阅读更多 →
多酒店预订系统实战:数据隔离、房态同步与三端接入

多酒店预订系统实战:数据隔离、房态同步与三端接入

简介:这是一套面向酒店行业开发者与中小连锁酒店经营者的多酒店预订管理系统源码,覆盖APP、H5与小程序三端,可解决分店扩张、房态同步、会员营销与内部协同等实际业务问题。资源包共2582个文件,约80.13MB,以1428个PHP业…

2026/9/26 16:40:44 阅读更多 →
手势识别打地鼠实战:MediaPipe+OpenCV从摄像头到锤子的完整链路

手势识别打地鼠实战:MediaPipe+OpenCV从摄像头到锤子的完整链路

简介:这是一份面向人机交互课程学习者与OpenCV入门开发者的完整项目资料,围绕手势识别控制的打地鼠游戏展开,可用于课程设计、实验复现与交互方式对比研究。资源包共27个文件,约60.1MB,包含6个Python源码文件、4个XML配…

2026/9/26 16:40:44 阅读更多 →
AiPy 为 openclaw 穿上安全铠甲:skill 随便用也不翻车的 TrustTools 配置骨架

AiPy 为 openclaw 穿上安全铠甲:skill 随便用也不翻车的 TrustTools 配置骨架

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

2026/9/26 16:40:44 阅读更多 →
20家公司AI面试官吐血总结:3个月速成AI Agent开发,TaoToken统一Key接入Cline与CC Switch配置实战

20家公司AI面试官吐血总结:3个月速成AI Agent开发,TaoToken统一Key接入Cline与CC Switch配置实战

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

2026/9/26 16:39:44 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →