sipu
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2005-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1218回复:4

求教:如何从应用中访问驱动程序中已经定义的接口?

楼主#
更多 发布于:2002-05-15 10:43
现在编一win2k的视频采集WDM驱动程序,要求可以控制芯片的通用输入输出(GPIO)接口,在原来的例子程序中已经为这个控制做了一个接口(interface),现在问,如何在应用程序中找到这个接口并对它进行控制呢?

我用的芯片是Conexant的Fusion878A,欢迎任何有帮助的信息。

在此先谢谢了。
wangqins
驱动小牛
驱动小牛
  • 注册日期2002-04-28
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-15 11:04
WDM模式下基本上使用CreatFile、WriteFile与ReadFile和DeviceIoControl三个例程访问驱动程序,给你个例子。
GetDeviceViaInterface是打开设备,里面调用了CreatFile.使用GUID打开设备文件。
#include <windows.h>
#include <setupapi.h>
#include <initguid.h>

// {713295A5-F5A0-11d4-ADCC-0000E86E12A2}
DEFINE_GUID(USRDEF_GUID, \\
0x2ae8be89, \\
0x6651, \\
0x4a0f, \\
0x87, \\
0xa5, \\
0x85, \\
0xe9, \\
0x2f, \\
0x38, \\
0xed, \\
0x4d);

//open the device and get a device handle
HANDLE
GetDeviceViaInterface(DWORD instance)
{
HDEVINFO info=SetupDiGetClassDevs((LPGUID)&USRDEF_GUID,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
return NULL;

SP_DEVICE_INTERFACE_DATA ifdata;
ifdata.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);
if(!SetupDiEnumDeviceInterfaces(info,NULL,(LPGUID)&NS001_GUID,instance,&ifdata))
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

DWORD ReqLen;
SetupDiGetDeviceInterfaceDetail(info,&ifdata,NULL,0,&ReqLen,NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail=(PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]);
if(ifDetail==NULL)
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

ifDetail->cbSize=sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if(!SetupDiGetDeviceInterfaceDetail(info,&ifdata,ifDetail,ReqLen,NULL,NULL))
{
SetupDiDestroyDeviceInfoList(info);
delete ifDetail;
return NULL;
}

HANDLE rv=CreateFile(ifDetail->DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(rv==INVALID_HANDLE_VALUE) rv=NULL;

delete ifDetail;
SetupDiDestroyDeviceInfoList(info);
return rv;
}

之后使用WriteFile和DeviceIoControl就可以了。
sipu
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2005-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-15 11:50
这一步,我已经做到了。

我的问题是我在这个驱动程序中还有另外的接口,我如何去访问到它并对它进行操作。

谢谢上面的回帖。 :cool:
wangqins
驱动小牛
驱动小牛
  • 注册日期2002-04-28
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-15 12:09
你的驱动程序还有那些接口,可以详细的告诉我吗?
sipu
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2005-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-15 17:20
另有两个接口,一个是I2C的接口,一个是GPIO接口。

这两个接口主要起控制作用,驱动的主要功能是采集视频数据,这由minidriver实现。

游客

返回顶部