arthurcao
驱动小牛
驱动小牛
  • 注册日期2003-10-12
  • 最后登录2012-07-08
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望20点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1624回复:10

在驱动中打开应用程序界面

楼主#
更多 发布于:2004-05-09 08:52
各位高人,能不能在驱动中打开和他通讯的应用程序,使USB设备在接到主机是,应用程序也自动启动。如果能,那么在驱动中怎么把应用程序的打开连接进去的呢?
大家讨论。
arthurcao喜欢开源。
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-09 09:02
驱动中是不能打开应用程序的,除非你用钩子或者开线程。
arthurcao
驱动小牛
驱动小牛
  • 注册日期2003-10-12
  • 最后登录2012-07-08
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望20点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-09 10:29
高人,多谢,怎么用钩子法?怎样开线程,简单说说,或指个参考的资料。
arthurcao喜欢开源。
hlbok
驱动牛犊
驱动牛犊
  • 注册日期2004-04-06
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-09 16:17
 我想问一下arthurcao usb驱动程序和应用程序是通过CreatFile(),write(),readFile(),DeviceIoCTL()进行通信的吧?
 您能不能给我一个关于这几个函数的例子程序?

cqs103
驱动牛犊
驱动牛犊
  • 注册日期2004-04-08
  • 最后登录2004-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-09 16:33
如果你用ez-usb GPD的ezusb.sys作驱动,只需调用createFile()
得到句柄,然后调用DeviceIOControl()就可以窜送数据:
例如:void CI2CReadWriteDoc::OnMenuitemOpenDriver()
{
// TODO: Add your command handler code here
   CString deviceName = \"\\\\\\\\.\\\\EZUSB-0\";
  
   BOOL status;

   status = bOpenDrive(deviceName);

   if(status == FALSE)
  MessageBox(NULL,\"EZUSB设备打开错误,可能EZUSB FX2开发板没有加电!\",\"错误\",MB_OK);
}

//打开USB设备
BOOL CI2CReadWriteDoc::bOpenDrive(CString deviceName)
{

   //见《EZ-USB General Purpose Drive Specification》 4.1 Symbolic Link
   phDeviceHandle = CreateFile((LPCTSTR)deviceName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
  
   if (phDeviceHandle == INVALID_HANDLE_VALUE)
      return (FALSE);
   else
      return (TRUE);
}

//直接用ISO方式读数据
BOOL CI2CReadWriteDoc::ReadISOData(ULONG pipeNumber, unsigned char *buffer, ULONG packetCount)
{
ISO_TRANSFER_CONTROL IsoControl;
ULONG bytesToRead, nBytes;
BOOL status;
CString str;

IsoControl.PipeNum = pipeNumber; //管道号
IsoControl.PacketSize = 400; //包的大小
    IsoControl.PacketCount = packetCount;  //包的个数
    IsoControl.FramesPerBuffer = 8; //缓冲区中的帧数
    IsoControl.BufferCount = 2; //缓冲区的个数

    bytesToRead = IsoControl.PacketCount * (IsoControl.PacketSize + 12);

status = DeviceIoControl (phDeviceHandle,
                        IOCTL_EZUSB_ISO_READ,
                        &IsoControl,
                        sizeof(ISO_TRANSFER_CONTROL),
                        buffer,
                        bytesToRead,
                        &nBytes,
                        NULL);

    if (status == FALSE)
{
POSITION pos = GetFirstViewPosition();
CView *pView = GetNextView(pos);
CDC* pDC = pView->GetDC();

str=\"从ISO流读数据时出错!\";
pDC->TextOut(10, 15*2, str, str.GetLength());
pView->ReleaseDC(pDC);
return(status);
}

return(status);

}



hlbok
驱动牛犊
驱动牛犊
  • 注册日期2004-04-06
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-09 19:03
 你有没有关于pc端 应用程序源代码吗?我能不能参考一下
,我的usb驱动程序是基于DDK的usb例子程序开发的。
  请指教!!!
arthurcao
驱动小牛
驱动小牛
  • 注册日期2003-10-12
  • 最后登录2012-07-08
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望20点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-09 19:52
我想问一下arthurcao usb驱动程序和应用程序是通过CreatFile(),write(),readFile(),DeviceIoCTL()进行通信的吧?
 您能不能给我一个关于这几个函数的例子程序?

 

如果你用CYPRESS的片子,那EZ USB来说,它用CreatFile()打开设备的句柄,然后应用程序以句柄为对象,用DeviceIoCTL()来作为应用程序和驱动的通讯。
它的开发包的GPD说明文档有详细的介绍。
arthurcao喜欢开源。
arthurcao
驱动小牛
驱动小牛
  • 注册日期2003-10-12
  • 最后登录2012-07-08
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望20点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-09 19:53
是DeviceIOControl()。上贴打错了。
arthurcao喜欢开源。
hlbok
驱动牛犊
驱动牛犊
  • 注册日期2004-04-06
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-09 22:03
  那要得到设备句柄是不是还得要知道设备路径呢?
您能不能给我一个关于这方面的例子呢?
  我无从下手!谢谢!
arthurcao
驱动小牛
驱动小牛
  • 注册日期2003-10-12
  • 最后登录2012-07-08
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望20点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-10 10:02
不需要,只要你驱动程序配合就成了,如果你驱动用符号连接名作为应用程序和驱动程序的接口的话,你就只需要知道这个符号连接名,在CREATFILE()里把它作为一个参数就可以了。
CYPRESS的开发包有应用程序的例子。
如果你不用CYPRESS的GDP,那么你就要看它的驱动了,找到它和应用程序的接口方法,在做应用程序。
arthurcao喜欢开源。
hlbok
驱动牛犊
驱动牛犊
  • 注册日期2004-04-06
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-10 12:34
  我用的是D12的。
  您能否将CYPRESS的应用程序传上来,我参考一下,谢谢!
游客

返回顶部