CN104156310A - 一种在移动终端中模拟lcd显示的模拟器及实现方法 - Google Patents
一种在移动终端中模拟lcd显示的模拟器及实现方法 Download PDFInfo
- Publication number
- CN104156310A CN104156310A CN201410371537.9A CN201410371537A CN104156310A CN 104156310 A CN104156310 A CN 104156310A CN 201410371537 A CN201410371537 A CN 201410371537A CN 104156310 A CN104156310 A CN 104156310A
- Authority
- CN
- China
- Prior art keywords
- lcd
- simulation
- analog
- simulator
- driven
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Liquid Crystal Display Device Control (AREA)
- Control Of Indicators Other Than Cathode Ray Tubes (AREA)
Abstract
本发明公开一种在移动终端中模拟LCD显示的模拟器及实现方法,其中,包括模拟驱动及模拟LCD的模拟UI,所述模拟驱动用于提供给应用程序及模拟UI接口,所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写,由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。通过本发明,应用程序就能忽略运行在模拟器与真实硬件上的差别,使应用程序能够独立于硬件进行开发,而又不需要在后期修改,所以大大提高了软件开发效率。
Description
技术领域
本发明涉及模拟软件领域,尤其涉及一种在移动终端中模拟LCD显示的模拟器及实现方法。
背景技术
在移动终端的初期开发阶段,由于移动终端的硬件还没有完全准备好,软件特别是上层应用程序就无法进行开发和调试,这导致软件开发效率降低,影响了整个项目的开发进度。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种在移动终端中模拟LCD显示的模拟器及实现方法,旨在解决现有的移动终端软件无法在前期进行测试导致开发效率低的问题。
本发明的技术方案如下:
一种在移动终端中模拟LCD显示的模拟器,其中,包括模拟驱动及模拟LCD的模拟UI,所述模拟驱动用于提供给应用程序及模拟UI接口,所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写,由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
所述在移动终端中模拟硬件设备的模拟器,其中,所述模拟驱动提供的接口包括用于打开LCD、关闭LCD、将LCD内存空间映射到用户态及控制LCD显示信息的接口。
所述在移动终端中模拟硬件设备的模拟器,其中,所述控制LCD显示信息的接口定义了用于表示LCD显示信息的数据结构。
所述在移动终端中模拟硬件设备的模拟器,其中,所述数据结构包括LCD的固定信息以及可变参数信息。
所述在移动终端中模拟硬件设备的模拟器,其中,所述固定信息包括LCD的行长、存储区域的大小以及LCD的framebuffer的类型。
所述在移动终端中模拟硬件设备的模拟器,其中,所述可变参数信息包括可见区域的长和宽、每点所占用的字节数以及三基色的属性。
一种如上所述模拟器的实现方法,其中,包括步骤:
设置一模拟器包括模拟驱动及模拟UI,所述模拟驱动提供给应用程序及模拟UI接口,所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写,由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
所述的模拟器的实现方法,其中,实现mmap方法之前,模拟驱动向内核申请一组设备内存,设备内存的数组里存放每个页面的起始地址。
所述的模拟器的实现方法,其中,应用程序在调用mmap方法时,模拟驱动为内核提供函数调用,用来对设备内存进行操作。
所述的模拟器的实现方法,其中,模拟UI通过mmap方法直接将设备内存映射到用户进程的地址空间中,并每隔预定时间将内存数据显示到模拟器的界面上。
有益效果:本发明通过提供一个模拟器,来模拟LCD显示的功能,这样与LCD显示相关的软件就能在该模拟器上进行开发测试,而模拟器最终会由真实硬件替代,但是模拟器提供给应用程序的接口与在真实硬件上的是一样的,所以应用程序就能忽略运行在模拟器与真实硬件上的差别,使应用程序能够独立于硬件进行开发,而又不需要在后期修改,所以大大提高了软件开发效率。
附图说明
图1为本发明一种在移动终端中模拟LCD显示的模拟器较佳实施例的结构框图。
图2为本发明一种在移动终端中模拟LCD显示的模拟器实现方法较佳实施例的流程图。
具体实施方式
本发明提供一种在移动终端中模拟LCD显示的模拟器及实现方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,图1为本发明一种在移动终端中模拟LCD显示的模拟器较佳实施例的结构框图,如图所示,该模拟器100包括模拟驱动120及模拟LCD的模拟UI 110,所述模拟驱动120用于提供给应用程序200及模拟UI 110接口,所述应用程序200及模拟UI 110通过mmap方法直接访问设备内存来对模拟驱动120进行读写,由应用程序200将动作指令通过接口写入到模拟驱动中,所述模拟UI 110用于通过该接口从所述模拟驱动120中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
在本发明实施例中,模拟驱动120与实际驱动的区别就是模拟驱动120不需要直接控制实际的硬件,只需让模拟UI 110定时来取LCD显示内容数据就可以显示出来。
但模拟驱动120提供给应用程序的接口需要与实际驱动提供的接口一致,以便应用程序200在后续实际硬件中能正常运行。
该模拟驱动120是标准的Linux framebuffer (内核当中一种驱动程序接口)驱动,Linux抽象出framebuffer这个设备来供用户态进程实现直接写屏,可将framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以读写,而写操作可立即反映在屏幕上。由于LCD在更新显示画面的时候会涉及大块的数据,所以为了让应用程序能够快速并且简单地访问LCD的内存,模拟驱动120提供了mmap方法,mmap方法允许直接将设备内存映射到用户进程的地址空间中,提供给用户进程直接访问设备内存的能力,这意味着,通过mmap方法,应用程序只要在分配的地址范围内进行读写,实际上就是对LCD设备的访问。
为了实现mmap的方法,模拟驱动120首先根据LCD的大小和深度向内核申请一组Memory page(设备内存),即数组:
VideoMemPageTab[VIDEO_MEM_PAGE_NUMBER],在该设备内存的数组里存放的是每个page(存储页)的起始地址(内核逻辑地址),相关的定义如下:
#define WIDTH 480
#define HEIGHT 720
#define BPP 16 // bits per pixel
#define LINE_LEN ((((WIDTH * BPP + 7)/ 8) + 31) / 32 * 32) // length of a line in bytes
#define VIDEO_MEM_SIZE (HEIGHT * LINE_LEN)
#define VIDEO_MEM_PAGE_NUMBER ( ((VIDEO_MEM_SIZE - 1) >> PAGE_SHIFT) + 1)
static unsigned long VideoMemPageTab[VIDEO_MEM_PAGE_NUMBER];
申请的设备内存是在装载模拟驱动、初始化模块的时候申请的,模拟驱动共申请了64页的空间,即VIDEO_MEM_PAGE_NUMBER的值最终为64,相关的代码如下:
int init_module(void)
{
… …
for (i = 0; i < VIDEO_MEM_PAGE_NUMBER; i++) {
VideoMemPageTab[i] = __get_free_page(GFP_KERNEL);
… …
}
… …
}
应用程序调用mmap方法时,模拟驱动为内核提供了以下vm_operations_struct结构中的函数调用,用来对设备内存进行操作,并使用nopage的方法为用户态程序建立需要的页表:
struct vm_operations_struct lcd_vm_ops = {
open: lcd_vma_open,
close: lcd_vma_close,
nopage: lcd_vma_nopage, // 当用户进程访问当前不在内存中的VMA页面时,调用此方法
};
在本发明实施例中,所述模拟驱动提供的接口包括用于打开LCD、关闭LCD、将LCD内存空间映射到用户态及控制LCD显示信息的接口。
其中打开LCD的接口,其控制方式是open(),打开的设备名为/dev/fb0;关闭LCD的接口,其控制方式是close(),关闭的设备名为/dev/fb0;将LCD内存空间映射到用户态,其控制方式即mmap(),映射后直接对映射后的用户态空间进行操作相当于直接对内核的LCD framebuffer进行操作,因此在LCD打开的状态下,相当于直接对LCD进行操作;
控制LCD显示信息的接口,其控制方式为ioctl(),其中该接口定义了用于表示LCD显示信息的数据结构。其中,ioctl命令中,FBIOGET_FSCREENINFO 表示获取framebuffer的固定信息,固定信息存放在struct fb_fix_screeninfo的数据结构中,ioctl的第三个参数是此数据结构的指针;FBIOGET_VSCREENINFO 表示获取framebuffer的可变参数信息,可变参数信息存放在struct fb_var_screeninfo的数据结构中,ioctl的第3个参数是此数据结构的指针。
LCD的固定信息的数据结构的具体定义如下:
struct fb_fix_screeninfo {
char id[16]; /* identification string eg "onetouch" */
unsigned long smem_start; /* Start of frame buffer mem (physical address) */
__u32 smem_len; /* Length of frame buffer mem */
__u32 type; /* see FB_TYPE_* */
__u32 visual; /* see FB_VISUAL_* */
__u32 line_length; /* length of a line in bytes */
unsigned long mmio_start; /* Start of Memory Mapped I/O (physical address) */
__u32 mmio_len; /* Length of Memory Mapped I/O */
};
固定信息包括:line_length为LCD的行长,即存储一行显示数据所需要的字节数;smem_len为framebuffer存储区域的大小;type为framebuffer的类型(目前固定为FB_TYPE_PACKED_PIXELS);visual为framebuffer的显示类型(目前固定为FB_VISUAL_TRUECOLOR,即高彩色)。
可变参数信息的数据结构定义如下:
struct fb_var_screeninfo {
__u32 xres; /* visible resolution */
__u32 yres;
*/
__u32 bits_per_pixel; /* 16bit */
struct fb_bitfield red; /* bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue;
}
可变参数信息包括:xres为可见区域的长;yres为可见区域的宽;bits_per_pixel为每点所占用的bit数;red/green/blue为红/绿/蓝三基色的属性(包括在数据中的起始bit,bit数等)。
模拟UI实现的主要相关文件是lcd.h和lcd.cpp。
模拟UI通过mmap直接将设备内存映射到用户进程的地址空间中,然后设定一定时器,每隔预定时间(例如0.1s)将设备内存中的数据显示到模拟器的界面上。
在lcd.h申明了以下几个重要的成员函数:刷新LCD函数、打开LCD设备函数、刷新LCD界面函数、关闭LCD设备函数,具体相关代码如下:
class TUniLCD : public QObject{
… …
protected:
virtual void timerEvent(QTimerEvent *e); // 处理定时器超时,调用刷新LCD函数
private:
int openFB(); // 打开LCD设备,并将设备内存映射到用户进程的地址空间
void refreshLCD(); // 刷新LCD界面
closeFB(); // 关闭LCD设备
… …
}
基于上述模拟器,本发明还提供一种所述模拟器的实现方法,如图2所示,其包括步骤:
S101、设置一模拟器包括模拟驱动及模拟UI,所述模拟驱动提供给应用程序及模拟UI接口;
S102、所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写;
S103、由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
进一步,实现mmap方法之前,模拟驱动向内核申请一组设备内存,设备内存的数组里存放每个页面的起始地址。
进一步,应用程序在调用mmap方法时,模拟驱动为内核提供函数调用,用来对设备内存进行操作。
进一步,模拟UI通过mmap方法直接将设备内存映射到用户进程的地址空间中,并每隔预定时间将内存数据显示到模拟器的界面上。
关于上述方法的具体技术细节在前面的模拟器中已有详述,故不再赘述。
综上所述,本发明通过提供一个模拟器,来模拟LCD显示的功能,这样与LCD显示相关的软件就能在该模拟器上进行开发测试,而模拟器最终会由真实硬件替代,但是模拟器提供给应用程序的接口与在真实硬件上的是一样的,所以应用程序就能忽略运行在模拟器与真实硬件上的差别,使应用程序能够独立于硬件进行开发,而又不需要在后期修改,所以大大提高了软件开发效率。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种在移动终端中模拟LCD显示的模拟器,其特征在于,包括模拟驱动及模拟LCD的模拟UI,所述模拟驱动用于提供给应用程序及模拟UI接口,所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写,由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
2.根据权利要求1所述在移动终端中模拟硬件设备的模拟器,其特征在于,所述模拟驱动提供的接口包括用于打开LCD、关闭LCD、将LCD内存空间映射到用户态及控制LCD显示信息的接口。
3.根据权利要求2所述在移动终端中模拟硬件设备的模拟器,其特征在于,所述控制LCD显示信息的接口定义了用于表示LCD显示信息的数据结构。
4.根据权利要求3所述在移动终端中模拟硬件设备的模拟器,其特征在于,所述数据结构包括LCD的固定信息以及可变参数信息。
5.根据权利要求4所述在移动终端中模拟硬件设备的模拟器,其特征在于,所述固定信息包括LCD的行长、存储区域的大小以及LCD的framebuffer的类型。
6.根据权利要求4所述在移动终端中模拟硬件设备的模拟器,其特征在于,所述可变参数信息包括可见区域的长和宽、每点所占用的字节数以及三基色的属性。
7.一种如权利要求1至6任一项所述模拟器的实现方法,其特征在于,包括步骤:
设置一模拟器包括模拟驱动及模拟UI,所述模拟驱动提供给应用程序及模拟UI接口,所述应用程序及模拟UI通过mmap方法直接访问设备内存来对模拟驱动进行读写,由应用程序将动作指令通过接口写入到模拟驱动中,所述模拟UI用于通过该接口从所述模拟驱动中读取到动作指令,并对所述动作指令进行模拟,实现模拟LCD的功能。
8.根据权利要求7所述的模拟器的实现方法,其特征在于,实现mmap方法之前,模拟驱动向内核申请一组设备内存,设备内存的数组里存放每个页面的起始地址。
9.根据权利要求7所述的模拟器的实现方法,其特征在于,应用程序在调用mmap方法时,模拟驱动为内核提供函数调用,用来对设备内存进行操作。
10.根据权利要求7所述的模拟器的实现方法,其特征在于,模拟UI通过mmap方法直接将设备内存映射到用户进程的地址空间中,并每隔预定时间将内存数据显示到模拟器的界面上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410371537.9A CN104156310A (zh) | 2014-07-31 | 2014-07-31 | 一种在移动终端中模拟lcd显示的模拟器及实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410371537.9A CN104156310A (zh) | 2014-07-31 | 2014-07-31 | 一种在移动终端中模拟lcd显示的模拟器及实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104156310A true CN104156310A (zh) | 2014-11-19 |
Family
ID=51881815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410371537.9A Pending CN104156310A (zh) | 2014-07-31 | 2014-07-31 | 一种在移动终端中模拟lcd显示的模拟器及实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104156310A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107995334A (zh) * | 2017-12-05 | 2018-05-04 | 上海云相聚智能科技有限公司 | 具有副屏的手机及副屏控制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100100767A1 (en) * | 2008-10-22 | 2010-04-22 | Huan Liu | Automatically connecting remote network equipment through a graphical user interface |
CN102819450A (zh) * | 2012-08-21 | 2012-12-12 | 惠州Tcl移动通信有限公司 | 一种在移动终端中模拟硬件设备的模拟器及其实现方法 |
CN102929688A (zh) * | 2012-10-30 | 2013-02-13 | Tcl通讯(宁波)有限公司 | 一种模拟触摸屏的模拟器实现方法及该模拟器 |
CN103268225A (zh) * | 2013-05-14 | 2013-08-28 | Tcl通讯(宁波)有限公司 | 用于模拟移动终端中led指示灯的模拟器及其实现方法 |
-
2014
- 2014-07-31 CN CN201410371537.9A patent/CN104156310A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100100767A1 (en) * | 2008-10-22 | 2010-04-22 | Huan Liu | Automatically connecting remote network equipment through a graphical user interface |
CN102819450A (zh) * | 2012-08-21 | 2012-12-12 | 惠州Tcl移动通信有限公司 | 一种在移动终端中模拟硬件设备的模拟器及其实现方法 |
CN102929688A (zh) * | 2012-10-30 | 2013-02-13 | Tcl通讯(宁波)有限公司 | 一种模拟触摸屏的模拟器实现方法及该模拟器 |
CN103268225A (zh) * | 2013-05-14 | 2013-08-28 | Tcl通讯(宁波)有限公司 | 用于模拟移动终端中led指示灯的模拟器及其实现方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107995334A (zh) * | 2017-12-05 | 2018-05-04 | 上海云相聚智能科技有限公司 | 具有副屏的手机及副屏控制方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7701435B2 (en) | Electrophoretic display, method for driving electrophoretic display, and storage display | |
US9280955B2 (en) | Automatic waveform linking in an electrophoretic display controller | |
CN101908318B (zh) | 提供pip和指针支持的电泳显示控制器 | |
CN107450897B (zh) | 图形引擎的跨平台移植方法和装置 | |
CN107145354A (zh) | 软件框架及其构建方法、电子终端及可读存储介质 | |
CN101739289B (zh) | 一种在Linux虚拟机中设置显示模式的方法及装置 | |
JPS63234367A (ja) | 図形表示装置 | |
CN109741774B (zh) | 一种基于fpga片上ram模拟实现ddr3突发的控制器以及方法 | |
CN112199087A (zh) | 一种应用开发环境的配置方法、装置、设备及存储介质 | |
CN103295551A (zh) | 一种lcd显示控制系统及其控制方法 | |
US8922475B2 (en) | Control device, display device, and method of controlling display device | |
CN116185743B (zh) | OpenGL接口的双显卡对比调试方法、装置及介质 | |
CN102214445A (zh) | 电泳显示装置的驱动方法、电泳显示装置以及电子设备 | |
Fink et al. | Teaching a modern graphics pipeline using a shader-based software renderer | |
CN114201627A (zh) | 一种用于电子墨水屏的显示方法、装置、设备及存储介质 | |
CN102819450A (zh) | 一种在移动终端中模拟硬件设备的模拟器及其实现方法 | |
CN102866897A (zh) | 计算机及确定显示内容的方法 | |
CN104156310A (zh) | 一种在移动终端中模拟lcd显示的模拟器及实现方法 | |
CN102663989A (zh) | 一种用于移动终端显示的缓存处理方法及装置 | |
US10789913B2 (en) | Arbitrary block rendering and display frame reconstruction | |
CN102301414A (zh) | 状态显示装置以及状态显示装置的显示方法 | |
KR20130043322A (ko) | 디스플레이 컨트롤러 및 이를 포함하는 디스플레이 장치 | |
CN102385839A (zh) | 控制装置、显示装置及显示装置的控制方法 | |
CN111324323A (zh) | 多屏显示控制方法及装置、嵌入式处理系统和视频控制器 | |
Sajaniemi et al. | Animation metaphors for object-oriented concepts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20141119 |