android - Android:在 eink 设备上使用 fb0 绘图
问题描述
我一直在四处寻找,并找不到太多清晰的东西。背景是我有一个支持手写笔的电子墨水平板电脑,我在上面编程是为了好玩,我很想使用原生库来读取笔事件,并直接在帧缓冲区上绘图。供应商提供了一个秘密(一个 .so JNI 库,您可以只使用大小参数调用它)。
我想这是为了激活对帧缓冲区的直接绘制,最终进行刷新。但我无法理解它应该如何与 SurfaceFlinger 和 Android 组合......
任何人都有通过 IOCTL 从 JNI 显示的通用 eink 技巧的经验,这可以解释为什么我看不到像素发生变化,除非我在 java 中绘制自己(我可以更改更新模式并快速绘制,但是......我想要最快的) ?
如何验证 FB 上的写入?android 应用程序可以被直接写入帧缓冲区的像素“覆盖”吗?
解决方案
我最终想通了。使用 strace 通过 ioctl + lsof + 官方绘图应用程序的远程调试来捕获对 fb0 的调用表明我错了。
与非凡的不同,这个特定平板电脑的供应商软件不会通过魔术 ioctl 命令直接使用帧缓冲区。它所做的只是将屏幕区域注册为 Android 正常显示原语不可刷新。这使他们不必将层次结构中的每个视图都配置为直接更新 eink 模式,同时使用具有尽可能少的自定义代码的 android 框架。
我可以看到命令以这种方式传递:
[pid 3997] openat(AT_FDCWD, "/dev/graphics/fb0", O_RDWR|O_LARGEFILE) = 30
[pid 3997] ioctl(30, _IOC(0, 0x6d, 0x25, 0x00), 0x1) = 0
[pid 3997] close(30)
这只是将屏幕锁定并停止所有 android 刷新。
这意味着他们可以更快。
推荐阅读
- python - 控制台关闭后保持 Python 程序运行
- delphi - Fastreport : 详细数据:限制记录数
- javascript - fs.WriteFile() 返回 NULL 并且不写入 JSON 文件
- google-analytics - Google Analytics(分析)在细分中显示令人困惑的数据
- azure - 从 AzureDevOps Replace Tokens 在 appsettings 中设置 JSON 键
- arrays - 关于 C 数组语法的问题
- python - 从组件类访问复合类字段
- oracle - Oracle APEX 5.1 在选项卡容器中选择特定选项卡
- c# - CsvHelper 和 IEnumerable