① 类驱动(class driver)。类驱动程序用来为应用程序提供接口。这部分程序与设备无关,主要功能包括维护设备数据缓冲区,向上提供API接口供应用层程序调用,并协调应用程序对外设操作的同步和阻塞;向下提供适配层与迷你驱动层相连,实现API接口函数到迷你驱动层程序的映射。类驱动程序与硬件无关,只要外设驱动模型选定了,类驱动程序就定下来了,不需要做多少修改。
② 迷你驱动(mini driver)。迷你驱动程序与设备相关,所以设计迷你驱动程序是外设驱动开发中的重点。迷你驱动程序与类驱动层的接口格式是统一的,但迷你驱动程序对底层硬件的操作是根据硬件平台的不同而变化的。迷你驱动接收类驱动层发出的IOM_Packet命令包,决定对底层硬件进行什么样的操作。
① mdBindDev()函数。在应用程序建立设备接口(如FVID_create()函数)时被调用以实施设备邦定,完成对外部设备的初始化。而与其对应的是mdUBindDev()函数,使用mdUBindDev()函数会使设备处于无效状态,不能再使用。
② mdCreateChan()函数。使用此函数为应用程序和驱动程序建立通信通道,同时为每个通道申请缓冲区。在TI公司发布的FVID模型中,为每个通道都分配了3个缓冲区,轮流与外部设备交换数据,每个缓冲区对应1帧视频数据。与mdCreateChan()对应的是md_DeleteChan()函数,用于删除设备通道,释放缓冲区资源。
③ mdSubmitChan()函数。负责管理缓冲区,分别接受应用程序发出的FVID_ALLOC()、FVID_EXCHANGE()、FVID_FREE()三个命令并进行处理。其中FVID_ALLOC命令获取驱动程序中的缓存区,应用程序从三个缓冲区中取出最新的一帧视频数据,对其中的数据做处理,而只剩下的缓冲区用来接受外部设备输入的数据。FVID_EXCHANGE()将使用完的缓存区与驱动程序的最新数据缓存区交换,应用程序处理完1帧数据,将这1帧数据返回驱动程序,再读入新的1帧数据进行处理。FVID_FREE()将使用完的缓存区重新返回给驱动程序,应用程序将处理完的数据帧返回驱动程序,而不再向驱动程序申请新的数据帧。
String name /* handle to an instance of the device */
Int mode /* pointer to buffer allocated by driver */
Int *status /* pointer to size of buffer pointed to by */
Ptr optArgs /* */
FVID_Attrs *attrs /* */
/* Initialize the attributes */
FVID_ATTRS dispAttrs = FVID_ATTRS;
/* Create an instance to a video display device */ chan-
Handle = FVID_create(“/display0”, IOM_INPUT, NULL, NULL,&dispAttrs);
FVID_control()作用是:发送一个控制命令给下层的mini_driver
语法: status = FVID_control (fvidChan, cmd, args);
参数定义:
FVID_Handle fvidChan /* handle to an instance of the device */
Int cmd /* control command */
Ptr args /* pointer to control command arguments */
Return Value Int status /* returns IOM_COMPLETED if successful */