您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术嵌入式Linux下基于MiniGUI的信息终端软件开发 正文
嵌入式Linux下基于MiniGUI的信息终端软件开发

嵌入式Linux下基于MiniGUI的信息终端软件开发

点击数:7513 次   录入时间:03-04 11:49:30   整理:http://www.55dianzi.com   嵌入式系统-技术

程序实现时,开始是包含的头文件。

MiniGUI图形包的头文件有:common.h(MiniGUI常用的宏及数据类型的定义)、minigui.h(全局的和通用的接口函数及杂项函数的定义)、window.h(定义了和窗口有关的宏、数据类型、数据结构和窗口函数)。使用GDI函数和控件还需包括gdi.h、control.h两个头文件。

编程实现时,MiniGUI的程序入口点是MiniGUIMain函数,系统初始化后就会自动找到该函数。在该函数中先设置主窗口一些基本属性,建立每个客户程序唯一的一个消息队列。当程序结束时,调用MainWindow ThreadCleanup函数,清除主窗口所使用的消息队列系统资源,退回服务器程序中。

其,各个功能子函数是在MiniGUI程序的另一主体部分——主界面窗口的过程函数中调用打开的。在主窗口建立时,其中有一项属性MainWindowProc,即是注明了对应该窗口的过程函数。各个功能模块的消息也都是通过主窗口中的消息循环进行触发的。

窗口过程函数主体上都是switch和case结构的选择语句,针对不同的消息产生不同的响应。一般MSG_CREATE消息在窗口生成时被发送,因而控件往往在这里调用CreateWindow函数生成。MSG_PAINT则是在移动窗口或调用UpdateWindow重绘时发生,可根据需要定义相应的操作。MSG_CLOSE即是关闭窗口时的动作,一般调用DestroyMainWindow销毁主窗口,调用PostQuitMessage退出消息循环。

此外,在窗口过程函数MiniGUI提供的GDI,即图形设备接口(graphics device interface),可以方便地将BMP、GIF、JPEG等图片用LoadBitmap函数输出到界面,并通过设备上下文(DC)的逻辑字体(logfont)实现多字体和多字符集支持。

广告进程的制作也类似,不再说明。

(2)信息终端软件服务器程序

因为服务器和客户程序需要交换数据,所以我们使用了经MiniGUI包装过的Socket通信机制。

在服务器中,建立一个监听套接字:

#define LISTEN_SOCKET "/var/tmp/socket1"

static int listen_fd;

BOOL listen_socket(HWND hwnd)

{ if((listen_fd=serv_listen(LISTEN_SOCKET))<0)

return FALSH;

return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);

}

服务器监听该套接字listen_fd。当客户有连接请求时,服务器的过程函数中就会收到MSG_FDEVENT消息,服务器就可以接受该请求以进行相应处理:

static int MainFunProc(HWND hWnd,

{ switch(message)

{case MSG_FDEVENT:

if(LOWORD(wParam)= =listen_fd){

……

conn_fd=serv_accept(listen_fd,&uid);

if(conn_fd>0){

sock_read(conn_fd,buff[20],40);

……

sock_write(conn_fd,buff[20],40);

}}

break;

}}

在主界面进程中,需要连接到服务器时,可以通过cli_conn(LISTEN_SOCKET,'b')来提出请求。

这样,服务器和客户程序之间即可相互交流数据了。

广告进程实现时,需要在服务器中设置事件钩子函数SetServerEventHook(my_event_hook)。因为广告屏保是在没有键盘鼠标输入的一段时间后自动打开的,有任意键时又自动关闭,所以只有始终运行在后台的服务器才能判断广告是否要打开关闭。

可以在消息循环时进行判断:

while(GetMessage(&Msg,HWND_DESKTOP))

{if (pid_scrnsaver= =0&&GetTickCount()>

old_tick_count+1000){

ShowCursor(FLASE);

pid_scrnsaver=exec_app("./scrnsaver","crnsaver");

}

DispatchMessage(&Msg);

}

dld_tick_count是前一次消息的时间。当从GetTickCount()得到的当前时间大于设定值时,还没有任何消息的话,广告屏保scrnsaver程序就启动,同时隐蔽鼠标光标。

当系统又接收到事件时,会自动执行前面注册过的事件钩子函数。在该函数中,使用kill(pid_scrnsaver,SIGINT)命令关闭广告程序,并显示鼠标即可。

软件系统的示意如图2所示。

将完成的C语言程序文件用交叉编译工具编译,并链接MiniGUI库文件,即可生成所需的可执行文件。

结语

将嵌入式Linux应用至信息家电类产品中,并开发出优秀的人机交互界面,是嵌入式发展的趋势,拥有广阔的市场前景。本系统开发的嵌入式信息终端也已初见成效,相信这种方案必将得到越来越多的应用。



上一页  [1] [2] 


本文关键字:嵌入式  信息  软件开发  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术