原创 windML输入设备的头文件

2007-1-14 00:27 4426 6 4 分类: MCU/ 嵌入式

输入设备的头文件
驱动的头文件包括典型的设备,但是头文件必须包含windML的哪一部分连入驱动的信息和驱动怎么包含配置信息。
设备控制结构
必须定义输入设备控制结构体(作为UGL_INPUT_DEV的第一个元素)如果输入设备不需要其他的数据就如下定义
typedef struct ugl_pc_kbd_device
{
UGL_INPUT_DEV inputDevice; /* Inherits input device structure */
UGL_BOOL extendedKey; /* Extended key receipt */
UGL_BOOL ledControl; /* App/WindML controls LEDs */
UGL_UINT32 ledValue; /* Current LED state */
} UGL_PC_KBD_DEVICE;
这个例子中键盘驱动需要LED中的信息和是否外部的键在执行;因此要包含下面的几项。
配置控制
一个输入驱动可能需要包含来自初始化程序的配置信息。同样配置程序可能需要关于已有驱动的信息。因此,头文件必须包含以下信息
/* Get the Device Driver Configuration Definitions */
#ifndef INCLUDE_PC_AT_KEYBOARD
#define INCLUDE_PC_AT_KEYBOARD
#define BUILD_DRIVER
#include <uglInit.h>
#endif /* INCLUDE_PC_AT_KEYBOARD */
这种情况下,包含uglInit,h提供需要的配置信息
注意:BUILD_DRIVER必须在uglInit,h之前定义。
INCLUDE_PC_AT_KEYBOARD定义了特殊的设备驱动。当写一个新的驱动必须重新定义一个特殊的设备驱动宏。
除此外设备驱动在头文件里包含设备驱动配置参数设备驱动必须包含以下的参数
SYS_KEYBOARD_DRIVER提供输入驱动的数据结构来辨别键盘输入设备的入口指针
SYS_POINTER_DRIVER
以下程序提供初始化程序指针
extern UGL_INPUT_DRV uglPs2PtrDriver;
#define SYS_POINTER_DRIVER &uglPs2PtrDriver
相关数据结构在uglPs2PtrDriver例子中。
一般资源文件格式
执行以下三种操作
open打开一个低级驱动,设置设备驱动的可能模式,初始化设备控制结构
close关闭一个低级驱动释放开的资源
control一般驱动控制操作包括conhdiji驱动里读数据和设置键盘LED的值
Input Driver Structure
UGL_INPUT_DRV uglPcKbdDriver =
{
(UGL_INPUT_DEV_OPEN)uglPcKbdOpen, /* Open driver API */
(UGL_INPUT_DEV_CLOSE)uglPcKbdClose, /* Close driver API */
(UGL_INPUT_DEV_CONTROL)uglPcKbdControl /* Control driver API */
};
头文件必须包含UGL_INPUT_DRV,可以运行这些程序
执行驱动打开程序
当程序运行uglInitializ的时候初始化windML。在uglInitializ中,调用uglInputDevOpen( )打开输入驱动程序。
当输入驱动成功打开的以后,驱动打开程序返回UGL_INPUT_DEV数据结构的指针。如果驱动初始化设备失败,就返回NULL。
驱动打开程序包括以下输入参数:
第一个参数是低级驱动的名字,驱动接收原始数据
第二个参数是输入驱动结构UGL_INPUT_DRV的指针
需要驱动打开的程序
驱动打开的程序需要分为下面几步:
1 分配驱动控制结构
UGL_LOCAL UGL_INPUT_DEV * uglPcKbdOpen
(
char * pDevName, /* name of the device */
UGL_INPUT_DRV * pDriver /* input driver */
)
{
UGL_PC_KBD_DEVICE * pDevice;
/* allocate the device descriptor */
pDevice = (UGL_PC_KBD_DEVICE *) UGL_CALLOC (1,
sizeof (UGL_PC_KBD_DEVICE));
if (pDevice == UGL_NULL)
return (UGL_NULL);
驱动控制结构用UGL_CALLOC程序分配,确保能从WindML内存池中分配到所需的内存。
2 打开低级驱动
/* open the device */
pDevice->inputDevice.fd = open (pDevName, 0, 0);
if (pDevice->inputDevice.fd < 0)
{
UGL_FREE (pDevice);
return (UGL_NULL);
}
打开文件的文件描述符存储在输入设备结构中。如果打开失败,分配的内存被释放,返回NULL指针。
3 初始化驱动控制结构
包括两部分初始化:UGL_INPUT_DEV和在开发下特殊的数据,UGL_INPUT_DEV必须初始化以下数据域:
文件描述符fd在第二步被设置
设备类型
UGL_DEVICE_KEYBOARD
A keyboard.
UGL_DEVICE_POINTER_ABSOLUTE
A pointer device that generates an absolute location on the display
screen. A touchscreen is an example of an absolute pointing device.
UGL_DEVICE_POINTER_RELATIVE
A pointer device that generates a relative location from the previous
reported location, such as a mouse.
驱动程序结构
驱动程序结构是UGL_INPUT_DRV数据结构的一个指针(由第二那个参数传入)。
/* Initialize required device data */
pDevice->inputDevice.deviceType = UGL_DEVICE_KEYBOARD;
pDevice->inputDevice.pDriver = pDriver;
/* Initialize driver specific data for keyboard */
pDevice->ledValue = 0;
pDevice->extendedKey = FALSE;
pDevice->ledControl = TRUE;


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条