Android:在eink设备上使用fb0绘制

问题描述 投票:0回答:1

我一直到处逛逛,找不到很多清晰的东西。上下文是我有一个启用手写笔的电子墨水平板电脑,我可以对此进行编程以娱乐,并且我很想使用本机库读取笔事件,并直接在帧缓冲区上绘制。供应商提供了一个秘密的文件(一个.so JNI库,您可以仅使用一个size参数对其进行调用)。

我想这旨在激活帧缓冲区上的直接绘制,并最终进行刷新。但我不知道它应该如何与SurfaceFlinger和Android组成...

任何人都有通过IOCTL从JNI显示的通用eink技巧的经验,这些技巧可以解释为什么我看不到像素发生变化,除非我用Java绘制自己(我可以更改更新模式并绘制得很快,但是...我想要最快的)?

我如何验证FB上的写入?可以将Android应用程序直接覆盖在帧缓冲区上的像素“覆盖”吗?

android framebuffer e-ink
1个回答
0
投票

我最终弄清楚了。使用strace通过ioctl + lsof +官方绘图应用程序的远程调试来捕获对fb0的调用,这表明我错了。

[这款特殊平板电脑的供应商软件与众不同,它不会直接通过魔术ioctl命令使用帧缓冲区。它所做的只是将屏幕区域注册为Android正常显示原语不可刷新的区域。这样一来,他们就可以将android框架中使用的定制代码尽可能少,而不必将层次结构中的每个视图都配置为处于Direct Update eink模式。

我可以看到以这种方式传递的命令:

[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刷新。

这意味着它们可能更快。

© www.soinside.com 2019 - 2024. All rights reserved.