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/8/9 4:31:10 阅读更多 →
MoE架构与本地部署实践:从MiMo-V2-Pro看大模型技术演进与应用

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

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

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

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

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

2026/8/8 13:14:54 阅读更多 →

最新新闻

企业为何需要实搜网站建设来赢得市场信任与长期收益

企业为何需要实搜网站建设来赢得市场信任与长期收益

在这个互联网流量红利逐渐见顶、获客成本日益高昂的时代,很多中小企业主和创业者常常会有这样一个困惑:为什么我投了那么多钱在竞价排名上,效果却越来越差?为什么我的产品在行业内明明不错,却在搜索结果里排不到前排?为什么我的网站打开速度慢得像蜗牛,导致刚进店的客户…

2026/8/10 0:22:12 阅读更多 →
React 性能优化实战:从 memo 渲染对照到 useCallback 函数缓存

React 性能优化实战:从 memo 渲染对照到 useCallback 函数缓存

React 性能优化实战:从 memo 渲染对照到 useCallback 函数缓存前言1. 先理解问题:父组件更新为何会牵动子组件1.1 React 的渲染是一次重新计算1.2 memo 的判断依据是属性是否保持一致2. 建立普通渲染与记忆化渲染的对照组2.1 两个子组件为什么要这样写2.…

2026/8/10 0:21:11 阅读更多 →
VR-Reversal终极指南:3分钟将VR视频转为普通设备可看的2D格式

VR-Reversal终极指南:3分钟将VR视频转为普通设备可看的2D格式

VR-Reversal终极指南:3分钟将VR视频转为普通设备可看的2D格式 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.co…

2026/8/10 0:21:11 阅读更多 →
AI数据分析平台有哪些?2026年值得关注的6个产品

AI数据分析平台有哪些?2026年值得关注的6个产品

企业数据量持续膨胀,但真正能从中提取决策信号的团队并不多。传统BI工具解决了"看数据"的问题,却没能解决"问数据"和"用数据"的效率瓶颈。2026年,大模型技术的落地让AI数据分析平台走入生产环境,自…

2026/8/10 0:20:11 阅读更多 →
上海交通大学LaTeX幻灯片模板终极指南:告别排版烦恼,5分钟创建专业演示

上海交通大学LaTeX幻灯片模板终极指南:告别排版烦恼,5分钟创建专业演示

上海交通大学LaTeX幻灯片模板终极指南:告别排版烦恼,5分钟创建专业演示 【免费下载链接】SJTUBeamermin 上海交通大学 LaTeX Beamer 幻灯片模板 - VI 最小工作集 项目地址: https://gitcode.com/gh_mirrors/sj/SJTUBeamermin 还在为学术演示文稿的…

2026/8/10 0:18:11 阅读更多 →
GridPlayer终极指南:如何实现多视频同步播放的专业解决方案

GridPlayer终极指南:如何实现多视频同步播放的专业解决方案

GridPlayer终极指南:如何实现多视频同步播放的专业解决方案 【免费下载链接】gridplayer Play videos side-by-side 项目地址: https://gitcode.com/gh_mirrors/gr/gridplayer 你是否曾经需要在同一个屏幕上同时观看多个视频,但被繁琐的窗口切换搞…

2026/8/10 0:18:11 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →