2.6 Configuring a Simulator to use WindML
在没有目标机的情况下,你可以利用Simulator for NT(或者for Solaris)来开发和测试WINDML应用程序。Simulator支持WINDML的2D操作。
当WINDML和Simulator结合使用的时,在主机上显示一个窗口,在配置窗口可以对显示窗口的大小和颜色进行设置。例如一个640*480 256色的窗口会和在GRAPHICS设备中设置的一样来显示。
为了使VXWORKS Simulator能够和 WINDML一起工作,下面介绍的几步配置是必须要做的。
2.6.1 Configuring SimNT
PC模拟器VxWorks.exe可以通过Tornado工程工具或者命令行进行编译。WindML必须通过配置工具或者命令行编辑uglInit.h进行编译。
要想在模拟器中运行WINDML,ugl_winLib.o必须包含在VxWorks的映象文件中。这个文件在静态连接WindML或者WindML组件在工程文件的编译选项中被选中时自动包含在里面。
当从命令行来进行编译,并且WindML应用程序被动态加载的时候,ugl_winLib.o必须明确的包含在BSP中,这可以通过使用MACH_EXTRA来实现:
1.在simpc BSP路径下:target/config/simpc编辑MAKEFILE加入下面这句:
MACH_EXTRA= %WIND_BASE%\target\lib\objSIMNTgnuvx\ugl_winLib.o
2.编译这个模拟器映象MAKE
查阅SimNT描述文档,在附录A标准驱动中描述了兼容的驱动和支持的操作模式。
2.6.2 Configuring SimSolaris
2.7高级配置
WindML的配置文件是被那些不支持的、完全的或者部分的硬件所描述。有两种不同的高级配置:
l 不支持的设备
l WindML提供的设备,具有不同访问机制。
其他的高级配置选项是用来添加用户内存管理或者用户定义的字体
2.7.1自定义驱动访问方法
接下来讨论修改访问方法。这里所说的修改并不是一个简单的访问方法的修改,他需要了解设备的体系结构。要想知道设备的体系机构,参照第8章:图形设备驱动。
一个设备驱动的访问方法是由:访问ISA I/O空间、中断向量(interrupt vectors)、中断级别(interrupt levels)组成。访问机制的修改是通过uglInit.h文件中定义的宏(MACRO)来控制的。下表定义了宏,怎么使用以及默认值。
在uglInit.h文件中要加入正确的宏,位置在语句:#include
#define MSE_INT_LVL 0x1
#define MSE_INT_VEC 0x11
#define KBD_INT_LVL 0x2
#define KBD_INT_VEC 0x12
#include
#endif /* __INCuglinith */
这些定制的访问方法可以在配置方法、配置工具和命令行中使用。
2.7.2添加一个自定义驱动
自定义的图形和输入设备驱动可以挂接在WINDML中,并可以利用命令行进行配置。8.2节编写一个图形驱动描述了WINDML设备驱动的体系结构。
按照以下的步骤来添加一个自定义设备驱动到配置过程中。
1. 在路径target/h/ugl/config下复制uglTemplateCustom.h到相同路径下并重命名为uglCustom.h(或者其他的名字)。
2. 对uglCustom.h作一些必要的修改,使uglCustom.h能够表明是自定义的驱动。
3. 在uglInit.h文件中定义正确的INCLUDE_CUSTOM_*来表明自定义的设备驱动
/* Specify the graphics device to use (Select 1) */
#undef INCLUDE_BIOS_GRAPHICS
#undef INCLUDE_CHIPS_GRAPHICS
#define INCLUDE_CUSTOM_GRAPHICS /* User defined graphics device */
#undef INCLUDE_IGS_GRAPHICS
#undef INCLUDE_MEDIAGX_GRAPHICS
#undef INCLUDE_SA11XX_GRAPHICS
#undef INCLUDE_SIMULATOR_GRAPHICS
#undef INCLUDE_Q2SD_GRAPHICS
#undef INCLUDE_M821_GRAPHICS
#undef INCLUDE_VGA_GRAPHICS
4. 在uglInit.h文件中定义UGL_CUSTOM_DRIVER_DEFS来定义配置文件和头文件的路径。
5.用make来编译WindML
Custom Graphics Driver
一个自定义设备驱动(图形,键盘,或者触摸屏)即使不在windml的目录结构中也可以被配置。一个图形设备驱动要求定义以下的项:
下面的程序说明了在uglCustom.h中怎样向WINDML中添加一个新的图形设备。
/*
*
* Set up for the custom graphics device
*
*/
#if defined(INCLUDE_CUSTOM_GRAPHICS)
#define UGL_GRAPHICS_NAME "Custom graphics device"
#define UGL_GRAPHICS_INSTANCE 0 /* Device location */
#define UGL_GRAPHICS_IRQ 0 /* Device IRQ */
#define UGL_GRAPHICS_VECTOR 0 /* Device vector */
/* Initialization function */
extern UGL_UGI_DRIVER * uglCustom8BitDevCreate
(UGL_ORD instance, UGL_UINT32 irq, UGL_UINT32 vector);
#define UGL_GRAPHICS_CREATE uglCustom8BitDevCreate
/* Display mode */
#define UGL_COLOR_DEPTH 8
#define UGL_MODE_FLAGS UGL_MODE_INDEXED_COLOR
#endif /* INCLUDE_CUSTOM_GRAPHICS */
在这个例子中,自定义的图形设备驱动由函数uglCustom8BitDevCreate( )和设备驱动操作初始化为一个8位颜色索引的驱动。
Custom Keyboard Driver
要增加一个自定义的键盘,下面的参数必须被定义:
下面的程序说明了在uglCustom.h中怎样向WINDML中添加一个新的键盘设备。
/* Custom keyboard */
#ifdef INCLUDE_CUSTOM_KEYBOARD
#define INCLUDE_UGL_INPUT
#define SYS_KEYBOARD_NAME "/customKbd/0"
/* Name of the function to create the keyboard device */
extern STATUS customKbdDevCreate(char *name);
#define SYS_KEYBOARD_CREATE customKbdDevCreate
/* Name of the function to initialize the keyboard device */
extern UGL_INPUT_DEVICE_ID uglCustomKbdInit
(char * name, UGL_EVENT_SERVICE_ID eventServiceId);
#define UGL_KEYBOARD_INIT uglCustomKbdInit
#endif /* INCLUDE_CUSTOM_KEYBOARD */
WINDML对键盘驱动分两个阶段的初始化,第一个阶段是创建设备,第二个阶段是来初始化设备。
如果设备已经存在,就不需要设备创建过程。在上面的例子中键盘设备创建过程是customKbdDevCreate( )函数uglCustomKbdInit( )是用来负责初始化设备,使之能在WINDML使用。本例中创建和初始化的设备的名字是:/customKbd/0
Custom Pointer Driver
要增加一个自定义的触摸屏设备,下面的参数必须被定义:
下面的程序说明了在uglCustom.h中怎样向WINDML中添加一个新的触摸屏设备设备。
/* Custom pointer */
#ifdef INCLUDE_CUSTOM_POINTER
#ifndef INCLUDE_UGL_INPUT
#define INCLUDE_UGL_INPUT
#endif /* INCLUDE_UGL_INPUT */
#define SYS_POINTER_NAME "/customPtr/0"
/* Name of the function to create the pointer device */
extern STATUS customPtrDevCreate(char *name);
#define SYS_POINTER_CREATE customPtrDevCreate
/* Name of the function to initialize the pointer device */
extern UGL_INPUT_DEVICE_ID uglCustomPtrInit
(char * name, UGL_EVENT_SERVICE_ID eventServiceId);
#define UGL_POINTER_INIT uglCustomPtrInit
#endif /* INCLUDE_CUSTOM_POINTER */
和键盘驱动一样,WINDML对键盘驱动分两个阶段的初始化,第一个阶段是创建设备,第二个阶段是来初始化设备。如果设备已经存在,就不需要设备创建过程。在上面的例子中键盘设备创建过程是customPtrDevCreate( )函数uglCustomPtrInit( )是用来负责初始化设备,使之能在WINDML使用。本例中创建和初始化的设备的名字是:/customPtr/0
Custom Audio Driver
要增加一个自定义的音频设备,下面的参数必须被定义:
下面的程序说明了在uglCustom.h中怎样向WINDML中添加一个新的音频设备设备
/*
*
* Set up for the custom audio device
*
*/
#if defined(INCLUDE_CUSTOM_AUDIO)
#define SND_DEVICE_INSTANCE 220 /* instance of device */
#define SND_DEVICE_INT_LEVEL 5 /* interrupt level */
#define SND_DEVICE_INT_VECTOR 5 /* interrupt vector */
#define SND_DEVICE_DMA8 1 /* 8 bit DMA controller */
#define SND_DEVICE_DMA16 5 /* 16 bit DMA controller */
/* Creation function *
extern STATUS customSndDevCreate (char *devName, int channel, int instance,
int intLevel, int intVector, int dma8, int dma16);
#define SOUND_DEV_CREATE customSndDevCreate
#endif /* INCLUDE_CUSTOM_AUDIO */
在这个例子中,音频设备创建函数是customSndDevCreate( ),它的访问位置是220,它的中断级别和中断向量都是5。DMA传输方式,使用2口作8位传输,5口作16位传输。
2.7.3 Using a Custom Memory Manager
WINDML允许使用一个自定义的内存管理器。必须具有的功能包括:
l 创建内存管理池
l 销毁内存管理池
l 分配一个内存块(malloc和calloc函数)
l 重新分配一个以前分配过的内存块
l 释放一个以前分配过的内存块。
在uglInit.h文件中这些过程必须在语句:#include
下面是一个自定义内存管理器的定义:
#define UGL_MEM_POOL_CREATE_RTN myMemPoolCreate
#define UGL_MEM_POOL_DESTROY_RTN myMemPoolDestroy
#define UGL_MEM_ALLOC_RTN myMemAlloc
#define UGL_MEM_CALLOC_RTN myMemCalloc
#define UGL_MEM_REALLOC_RTN myMemRealloc
#define UGL_MEM_FREE_RTN myMemFree
#include
#endif /* __INCuglinith */
这些自定义的内存管理过程在配置方法-配置工具和命令行中都可以被使用。
2.7.4 Adding New Bitmap Fonts
其他的字体可以添加到位图字体集中。target/src/ugl/fonts/bmf目录下提供了所有的位图字体映象。在这个目录下的任何字体在配置过程中都是可用的。当以命令行方式来编译WINDML时,字体可能被uglBmfCfg.c文件引用。这些字体在配置工具中同样也是可用的。这些位图字体的描述文件的格式是WindMl格式,可以用有效的的程序将BDF字体转换为WindML格式。
2.8 Project Facility
Tornado工程工具允许在VxWorks中添加或者删除WindML的功能。要了解Tornado工程工具的更多的信息请查阅Tornado Getting Started Guide和Tornado User’s Guide: Projects,这个手册的重点是那些与WindML相关的工程工具。
当WindML安装完成后,在Tornado工程工具中一个WindML components的文件夹被创建,如下图所示:
这个目录下有两个子目录,2D graphics 和Audio components。应该注意的是一个用checkbox图标表示的目录选项是包含和不包含其中的一个。
利用工程工具来将WindML组件包含近来的,按以下步骤来做:
1.选中一个组件
2. 点击鼠标右键,弹出一个级连菜单
3. 选择include项
如果组件已经包含进来了,可以通过相同的方式移除他们。点击右键,弹出级连菜单,选择Exclude选项。
2.8.1 Linking the 2D Library
2D library可以通过两种方法和VxWorks image相连。
1.将全部的2D层连接到VxWorks image中。(complete 2D library)
它允许WindML应用程序在目标机启动后并发的下载。这种模式在Vxworks/WindML包含了全部的WindML 2Dg功能后,允许任何的WindML应用程序动态的下载
1. 只连接必需的2D功能
这种模式需要将WindML编译进VxWorks,除WindML应用程序之外。这个结果在一个小的Vxworks/WindML image中。
注意:如果已经连接了一个更高一层的图形产品如:Zinc或者PersonalJWorks,就应该选择necessary 2D
library而不是complete 2D library.
2.8.2 Adding WAVE File Support
在VxWorks image中音频功能支持WAVE一类的音频文件。一个WindML应用程序下载后可以播放音频文件。
(未完待续)