阅读:1218回复:4
求教:如何从应用中访问驱动程序中已经定义的接口?
现在编一win2k的视频采集WDM驱动程序,要求可以控制芯片的通用输入输出(GPIO)接口,在原来的例子程序中已经为这个控制做了一个接口(interface),现在问,如何在应用程序中找到这个接口并对它进行控制呢?
我用的芯片是Conexant的Fusion878A,欢迎任何有帮助的信息。 在此先谢谢了。 |
|
沙发#
发布于: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就可以了。 |
|
板凳#
发布于:2002-05-15 11:50
这一步,我已经做到了。
我的问题是我在这个驱动程序中还有另外的接口,我如何去访问到它并对它进行操作。 谢谢上面的回帖。 :cool: |
|
地板#
发布于:2002-05-15 12:09
你的驱动程序还有那些接口,可以详细的告诉我吗?
|
|
地下室#
发布于:2002-05-15 17:20
另有两个接口,一个是I2C的接口,一个是GPIO接口。
这两个接口主要起控制作用,驱动的主要功能是采集视频数据,这由minidriver实现。 |
|