`
mmdev
  • 浏览: 12941756 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

基于qvfb的应用小程序开发

 
阅读更多

这篇文章其实也不算是原创,看了前辈们的资料加上自己的一些理解。在文章末尾,我提供几篇好的资料。

如果有必要那么我们可以使用qvfb开发自己的GUI图形引擎,qvfb是一个模拟/dev/fb0的framebuffer显示方式的应用程序,使用共享内存,外部程序比如minigui传递数据到qvfb建立的共享内存,之后qvfb将数据刷新到qvfb软件界面上,需要注意的是,qvfb并不是严格意义上的framebuffer,当minigui将数据发送到qvfb的共享内存之后,qvfb并不会立即将修改的数据反应到qvfb的软件界面上,

而是需要外部程序,比如minigui,首先设置qvfb创建的共享空间结构体下面的update矩形失效范围,即(left,top)和(right,bottom),
然后设置qvfb创建的共享空间结构体下面的dirty控制字为1,
这样qvfb检测到drity标志为1后,将取出update中待刷新矩形描述区间,然后将update指定
区间中的数据刷新到qvfb界面上,之后qvfb将共享空间的drity标志置0,同时将update设为无效的(0,0)和(-1,-1)


qvfb的原理很简单,它建立了一个system V共享内存,用户只需将需要显示的图像按像素格式要求放到共享内存里qvfb就可以显示了。
System V共享内存连接的步骤是:

1.通过ftok拿到key
2.使用shmget拿到shmid
3.使用shmat连接到共享内存

这里需要注意的是,key的生成需要向ftok传入一个双方约定好的文件名,对于qvfb屏幕设备,这个文件是/tmp/.qtvfb_mouse-0。

qvfb创建的共享内存包含一个私有的数据头,用于指示像素格式、宽高等信息。这个头结构定义如下:


开发的过程中,我觉得几点比较重要。

1、程序规范

这里的规范不仅仅是风格上面的规范,更重要的为合法性校验,内存泄露问题。

如下代码,我们必须对程序的返回结果进行校验,这样的代码比较健壮。

在main()函数结束之前,我们必须还close打开的设备文件。

2、我的main函数里面有一个while(1)函数,在内部不断从鼠标文件中读取鼠标信息,然后显示到qvfb的屏幕设备上。

在做GUI的开发,往往都有这样的一个流程:

a.往数据地址写数据;

b.更新“framebuffer”
如果像不断显示鼠标信息这样的一个应用,则每次写数据之前都要先clear那块区域

这方面的资料相对比较少,在这里连接上一些好资料的原文地址

1、浅析qvfb图像显示原理和鼠标键盘信息获取方法
2、使用qvfb在X11下开发framebuffer应用程序

3、QVFB

4、Linux下framebuffer及qvfb编程示例
5、Framebuffer Driver

在这里附上程序源代码下载链接:http://download.csdn.net/detail/fzu_dianzi/3718774

以上纯属个人学习笔记,如果哪里错了,希望提出。愿和大家一起共同学习,一起进步。我的邮箱地址是:xzy@yingzhi8.com



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics