XYBUS
驱动牛犊
驱动牛犊
  • 注册日期2001-05-06
  • 最后登录2002-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3277回复:12

求教:VC应用程序怎样和USB驱动程序进行通信?

楼主#
更多 发布于:2002-01-18 21:30

    现在,我用DriverWork开发了一个USB驱动程序,USB硬件是用
Philip的pdiusbd12接口芯片,应用程序是用VC++编写的.
目前的问题是:VC应用程序怎样和驱动程序进行通信?

希望高手们能指教一些!

非常感激!!!
                               徐

最新喜欢:

tmgui00000tmgui0...
huwang
驱动牛犊
驱动牛犊
  • 注册日期2001-12-07
  • 最后登录2002-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-01-18 22:47
hujming
acx
acx
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录2012-05-07
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望57点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-19 09:08
如果你是用向导做的话,DS也生成了一个测试程序,你还可以用下面着个函数打开
HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance)
{
// Get handle to relevant device information set
HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
{
printf(\"No HDEVINFO available for this GUID\\n\");
return NULL;
}

// Get interface data for the requested instance
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
{
printf(\"No SP_INTERFACE_DEVICE_DATA available for this GUID instance\\n\");
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get size of symbolic link name
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;
}

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

printf(\"Symbolic link is %s\\n\",ifDetail->DevicePath);
// Open file
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;
}
很想你,身不由己……
XYBUS
驱动牛犊
驱动牛犊
  • 注册日期2001-05-06
  • 最后登录2002-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-20 17:55
非常感激!
但是,我还是不太明白?acx能否再讲详细些和完整些,具体应该怎样做?
非常感激!                   徐
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-01-21 09:21
他已经说的很明白了,就是通过GUID/CreateFile打开device,用DeviceIoControl/ReadFile/WriteFile和device通讯,最后用CloseHandle关闭和device的连接。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
APing
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2003-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-01-21 09:41
各位:

  早好,我想说的是这段代码我也使用过,但它是检测HID设备的啊.
APing
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2003-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-01-21 09:52
各位:

   对不起,我收回我的发言.它可以检测到USB设备.
acx
acx
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录2012-05-07
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望57点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-01-21 09:54
所有用GUID注册过接口的驱动程序应该都可以用。
很想你,身不由己……
acx
acx
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录2012-05-07
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望57点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-01-21 09:57
如果你是不太明白我建议你读读Chris Cant 的《windows wdm》的第5章
很想你,身不由己……
APing
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2003-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-01-21 10:01
上面的同事:

 这本书在哪里可以卖到呢?
APing
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2003-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-01-22 08:36
各位大侠:

   请看看我这段代码,这段代码是用VC检测我的PALM机,GUID是我的PLAM机CLASSGUID(我从注册表中找到的),但程序运行不能通过,检测不到我的PALM机,请大家帮我分析原因,代码如下:
HDEVINFO INFO;
SP_INTERFACE_DEVICE_DATA INFODATA;
PSP_DEVICE_INTERFACE_DATA PINFODATA;
PSP_INTERFACE_DEVICE_DETAIL_DATA PINFODATADETAIL;
DWORD NeedLength=512;
HINSTANCE hInst=AfxGetApp()->m_hInstance;

GUID pGuid={0x4D36E978,0xE325,0x11CE,{0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18}};

INFO=SetupDiGetClassDevs(&pGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if(INFO==INVALID_HANDLE_VALUE)
{
plist->AddString(\"NO HDEVINFO available for this GUID\\n\");
return;
}

INFODATA.cbSize=sizeof(INFODATA);
if(!SetupDiEnumDeviceInterfaces(INFO,NULL,&pGuid,0,&INFODATA))
{
plist->AddString(\"NO SP_INTERFACE_DEVICE_DATA available for this GUID instance\\n\");
SetupDiDestroyDeviceInfoList(INFO);
return;
}
plist->AddString(\"Success\");

SetupDiGetDeviceInterfaceDetail(INFO,&INFODATA,NULL,0,&NeedLength,NULL);
PINFODATADETAIL=(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(NeedLength);
if(PINFODATADETAIL==NULL)
{
plist->AddString(\"NO PSP_INTERFACE_DEVICE_DETAIL_DATA\\n\");
SetupDiDestroyDeviceInfoList(INFO);
return;
}
INFODATA.cbSize=sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if(!SetupDiGetDeviceInterfaceDetail(INFO,&INFODATA,PINFODATADETAIL,NeedLength,NULL,NULL))

{
plist->AddString(\"Fail\");//程序运行到这里失败
SetupDiDestroyDeviceInfoList(INFO);
return;
}
plist->AddString(PINFODATADETAIL->DevicePath);

KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-01-23 10:23
如果是驱动主动发数据给应用程序怎么做?
我不写驱动好多年
lvxx
驱动牛犊
驱动牛犊
  • 注册日期2002-04-16
  • 最后登录2002-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-04-24 21:44
PALM HANDHELD PLEASE PHONE (0755)2388065 Mr.caojun
游客

返回顶部