【问题标题】:Android: draw using fb0 on eink deviceAndroid:在 eink 设备上使用 fb0 绘图
【发布时间】:2020-08-28 16:15:15
【问题描述】:

我一直在寻找很多东西,但找不到太多清晰的东西。背景是我有一个支持手写笔的电子墨水平板电脑,我在上面编程是为了好玩,我很想使用原生库来读取笔事件,并直接在帧缓冲区上绘图。供应商提供了一个秘密(一个 .so JNI 库,您可以使用大小参数调用它)。

我想这是为了激活对帧缓冲区的直接绘制,最终进行刷新。但我无法理解它应该如何与 SurfaceFlinger 和 Android 组合......

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

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

【问题讨论】:

    标签: android framebuffer e-ink


    【解决方案1】:

    最后我想通了。使用 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 刷新。

    这意味着它们可以更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多