MiniGUI
2 MiniGUI
2.1 MiniGUI说明.
目前Tina中移植了MiniGUI3.2的核心库以及其组件,下表列出MiniGUI相关包说明:
表2-1: MiniGUI相关包说明
包名 | 说明 |
---|---|
cell-phone-ux-demo | MiniGUI手机界面应用 |
libminigui-gpl | MiniGUI核心库 |
minigui-res-be | MiniGUI资源库 |
mg-samples | MiniGUI示例应用 |
libmdolphin | MiniGUI浏览器核心库 |
mdolphin-release-home | MiniGUI浏览器应用 |
mdolphin-release-tv | MiniGUI浏览器应用 |
mdolphin-samples | MiniGUI浏览器应用 |
libmg3d | MiniGUI提供3D接口组件 |
libmgeff | MiniGUI动画框架 |
libmgi | MiniGUI输入法组件 |
libmgncs | MiniGUI新控件集 |
libmgp | MiniGUI提供打印功能组件 |
libmgplus | 对MiniGUI图形绘制接口的增强 |
libmgutils | MiniGUI提供对话框模板 |
表2-2:基于MiniGUI开发的应用
包名 | 说明 |
---|---|
multimedia-test | 多媒体测试Demo,包含摄像头预览、拍照、录像、播放音、视频、浏览图片功能 |
r11-board | 智能洗衣机Demo,包含一些界面滑动效果,选择控件等常用功能实现 |
smart-music-player | 智能音乐播放器Demo,包含滑动列表实现,在R328和R329上适配 |
下面是multimedia-test应用截图:
点击SD卡和U盘图标,可以对SD卡和U盘格式化,在拍照与录制的时候需要正确的格式,不然不能录制。蓝色的SD卡与U盘表示SD卡与U盘正确挂载,灰色的表示没有正确挂载。SD卡与U盘同时挂载的时候,默认使用SD卡,点击相应图标进入相应功能界面。
下面是r11-board应用截图:
主页三个页面可以左右滑动切换下一个页面,点击不同的洗衣图片进入具体的洗衣功能界面。
点击底部的洗涤、漂洗和脱水可以弹出滑动列表选择不同的参数,点击功能+按钮有旋转动画。
下面是smart-music-player应用截图:
2.2 MiniGUI配置.
Gui --->
Minigui --->
<*> libminigui-gpl --->
[*] Enabel truetype font support (支持TTF矢量字体)
[*] Enabel tslib support for MiniGUI (支持触摸屏)
[ ] Enabel g2d support for MiniGUI (支持G2D硬件加速,需要用sunxifb显示引擎,目前只在R528/D1上支持)
[ ] Enabel g2drotate support for MiniGUI (支持G2D旋转,需要用sunxifb显示引擎,目前只在R528/D1上支持)
[ ] Enabel sunxifb support for MiniGUI (显示引擎,类似fbcon,framebuffer长度大于 3时,切换成循环buffer)
[ ] Enabel sunxifbion support for MiniGUI (显示引擎,通过libuapi申请显示buffer)
[ ] Enabel coortrans cw support for MiniGUI(UI旋转 90 度)
[ ] Enabel reduce size for MiniGUI (裁剪一些不需要的模块)
-*- minigui-res-be
<*> mg-samples
MiniGUI有些示例程序需要将MiniGUI的核心库变编译为多进程模式,因此需要进行如下的配 置:
几点差异化说明:
- 目前Tina中集成的是MiniGUI3.2版本,在 64 位与 32 位的机器上都可以正常运行。
- 如果使用的不是触摸屏,需要配置鼠标,为了正常的显示鼠标光标,需要修改如下Makefile:
把–enable-cursor=no改成yes,表示使用鼠标。
V853平台MiniGUI配置选项
CONFIG_PACKAGE_eyesee-minigui:
eyesee-minigui is a GUILib for eyesee project.
Symbol: PACKAGE_eyesee-minigui [=y]
Type : tristate
Prompt: eyesee-minigui............................. eyesee-minigui for Tina Linux
代码路径为:external/minigui/
2.3 MiniGUI使用.
成功烧写固件后,在小机端使用MiniGUI,需要进行如下几步:
- 使用的是触摸屏,需要进行触摸屏校准。
- 配置MiniGUI.cfg文件。
2.3.1 触摸屏校准.
电容屏不需要校准,如果电容屏触摸不准确,需要把/etc/pointercal文件删除。
电阻屏首先要确保触摸驱动正常工作,有触摸节点生成,比如说是/dev/input/event1,可以执行 下面的命令,再触摸屏幕看串口有无打印。
在小机端设置如下变量:
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
// TSLIB_TSDEVICE根据触摸屏生成的设备节点来配置
export TSLIB_TSDEVICE=/dev/input/event
ts_calibrate
注意TSLIB_TSDEVICE需要是生成的触摸节点,按照屏幕上的提示点击完成校准,校准完成后/etc/pointerca文件生成,保存这个校准文件,就不用每台产品都校准。
2.3.2 MiniGUI.cfg配置
小机端/usr/local/etc/MiniGUI.cfg文件:
配置MiniGUI的ial和gal引擎,其配置文件的使用如下:
[system]
// GAL engine and default options
gal_engine=fbcon
// defaultmode设置显示的大小
defaultmode=800x480-32bpp
[fbcon]
// defaultmode设置显示的大小
defaultmode=800x480-32bpp
[sunxifb]
defaultmode=800x480-32bpp
// flipbuffer=1代替原来的export MG_DOUBLEBUFFER=1
flipbuffer=1
// cacheflag=1使能fb的cache,使buffer拷贝更快,在R328/R329上fb没有cache功能,需要置为0
cacheflag=1
// rotate是控制旋转的角度,使能G2D旋转后有效,当旋转角度为0与180度时,defaultmode不用改变
// 旋转角度为90与270度时,system和sunxifb的defaultmode要改成480x800-32bpp
rotate=0
使用触摸屏,注意mdev需配置成生成的触摸节点,输入引擎配置如下:
使用鼠标,输入引擎配置如下:
2.4 MiniGUI优化.
2.4.1 Double Buffer
双缓冲的目的主要是防止画面撕裂或者闪烁
- 修改内核开启双buffer。
修改文件tina/lichee/linux-3.4/drivers/video/sunxi/disp2/disp/dev_disp.c
注:V853平台代码路径为:lichee/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/dev_disp.c
- 在MiniGUI程序执行前导入环境变量。
注意只在使用fbcon引擎的时候需要导入这个环境变量,sunxifb引擎由flipbuffer字段指定。
执行完 1 、 2 步,MiniGUI内部就会使用双缓冲,解决界面切换时闪烁的问题。
- 还提供了一个函数,可以在应用层控制是否使用双buffer,比如在打开界面前打开双缓冲,打开界面之后停止使用双缓冲。
开机 framebuffer 是不带 cache 的,运行 minigui 程序的时候,如果执行了 export MG_DOUBLEBUFFER=1或者flipbuffer=1并且cacheflag=1,framebuffer会切换成带cache的,默认换页的时候会刷cache。
表2-3: DoubleBufferEnable函数说明
函数 | 说明 |
---|---|
DoubleBufferEnable(FALSE) | framebuffer会切换成不带cache的,因此不用刷cache |
DoubleBufferEnable(TRUE) | framebuffer会切换成带cache的,默认换页的时候会刷cache |
DoubleBufferEnable需要在执行export MG_DOUBLEBUFFER=1或者flipbuffer=1之后才能调用,DoubleBufferEnable返回 0 表示调用成功,如果返回-1表示调用失败,可能是关闭cache失败,也可能是mmap framebuffer失败,需要应用层再次调用该接口,不然显示异常或出错。
2.4.2 其他
- 键盘换肤,可以参考《MiniGUI更换键盘皮肤》文档。
- 输入法更新词库,可以参考《MiniGUI输入法更新词库》文档。
- 文字旋转,可以参考《MiniGUI TTF旋转字库制作并竖直显示文字》文档。
- Ubuntu移植MiniGUI,可以参考《Ubuntu 64位移植Minigui3.2》文档。
- 视频小窗,可以参考《minigui_per_view视频小视窗播放》文档。