(码) Linux直接控制显示:内存缓冲驱动显示 framebuffer(帧缓冲) 0.6a

请微信扫码打赏,留言中输入文章编号. 附费后将自动刷新出完整内容.

framebuffer 内存缓冲驱动显示,这源自于使用fbterm后,可以直接通过/dev/fbx来控制屏幕显示。

单纯的把framebuffer看作一块内存,这部分内存包含了将要scan out显示的数据。
等价于framebuffer driver。通常作为LCD控制器或者其他显示设备的驱动,FrameBuffer驱动是一个字符设备,设备节点是/dev/fbX,主设备号为29,次设备号递增,用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。Framebuffer设备为上层应用程序提供系统调用,也为下一层的特定硬件驱动提供接口;

这即解决了在我的眼镜显示器中字体过小的问题,也解决了显示汉字的问题。
这样,我可以通过ssh ease@192.168.1.53 “/home/ease/tools/eyeDisplay -text 中国” 这种方式来“远程控制显示内容”
或者与之前修改的Croc结合,跨平台跨内外网发送消息到眼镜上。
croc –quiet –code 123123 –text “CCTV发来贺电”

这个基本与fbterm无关,通过此技术可以直接控制显示


版本:

0.6a

功能:

  1. 屏幕上显示文字,允许多行
  2. 屏幕上叠加图片,允许网络图片和本地图片
  3. 网页截图并显示
  4. 通过脚本及croc,实现跨平台跨内外网发送信息到屏幕
  5. API调用,显示调用文本

示例:

清除显示:gDisplay -c
显示字符:gDisplay -t CCTV12
指定位置显示:gDisplay -t CCTV12 -x 10 -y 10
显示字符需清除背景:gDisplay -t CCTV12 -c
指定颜色:gDisplay -t CCTV12 -c -r 200 -g 0 -b 0 -a 100
显示全图,自动缩放:gDisplay -p 1.jpg -pr
网络图片: gDisplay -p https://i.scwy.net/other/pay_good.jpg -px 300 -c
API调用:gDisplay -i https://push.scwy.net/counter?host=https://i.scwy.net -t "" -c
API调用,指定格式:gDisplay -i https://push.scwy.net/counter?host=https://i.scwy.net -c -ic “今日: {{today}}\n总计: {{views}}” -t ""
多行文本: gDisplay -t “CCTV12发来贺电ABC\n哈哈哈” -c
另外,借助croc实现显示:croc send –code 123123 –text “-t CCTV发来贺电 -c”

说明:

程序在Linux的终端下使用(Debian使用中,其它未测试)


循环接收,用在显示端

#!/bin/bash
# croc不断获取文本
while true; do
   ret=`croc --yes --quiet 123123`
   if [ $ret ]; then
      gDisplay $ret
   fi
   sleep 5s
done

可以升级的地方:

  1. 文字自动折行
  2. 图片显示
  3. 富文本支持
  4. 滚动显示
package main

import (
        "flag"
        "image"
        "image/color"
        "image/draw"
        "io/ioutil"
        "os"
        "path/filepath"
        "strings"
        "fmt"

        "github.com/golang/freetype"
        "github.com/gonutz/framebuffer"
        "golang.org/x/image/font"
)

var (
        FontFile        = ""                 // 字体文件名
        FontSize        = 80                 // 字体大小
        FontLocationX   = 150                // 位置
        FontLocationY   = 150                //
        FontColorR      = 250                // 颜色RGBA
        FontColorG      = 250                // 颜色RGBA
        FontColorB      = 250                // 颜色RGBA
        FontColorA      = 250                // 颜色RGBA
        ClearBackground = true               // 清除背景
        ShowText        = "腾图工作室 i.SCWY.net" // 显示内容
        Help            = false
)

// 遍历获取字体文件
func walkFunc(path string, info os.FileInfo, err error) error {
        if strings.HasSuffix(path, ".ttf") {
                FontFile = path
        }
        return nil
}

func main() {
        filepath.Walk(".", walkFunc) // 遍历获取字体文件

        flag.StringVar(&ShowText, "text", …
请微信扫码打赏,留言中输入文章编号. 附费后将自动刷新出完整内容.

相关文章