阅读:1624回复:10
在驱动中打开应用程序界面
各位高人,能不能在驱动中打开和他通讯的应用程序,使USB设备在接到主机是,应用程序也自动启动。如果能,那么在驱动中怎么把应用程序的打开连接进去的呢?
大家讨论。 |
|
|
沙发#
发布于:2004-05-09 09:02
驱动中是不能打开应用程序的,除非你用钩子或者开线程。
|
|
板凳#
发布于:2004-05-09 10:29
高人,多谢,怎么用钩子法?怎样开线程,简单说说,或指个参考的资料。
|
|
|
地板#
发布于:2004-05-09 16:17
我想问一下arthurcao usb驱动程序和应用程序是通过CreatFile(),write(),readFile(),DeviceIoCTL()进行通信的吧?
您能不能给我一个关于这几个函数的例子程序? |
|
地下室#
发布于: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); } |
|
5楼#
发布于:2004-05-09 19:03
你有没有关于pc端 应用程序源代码吗?我能不能参考一下
,我的usb驱动程序是基于DDK的usb例子程序开发的。 请指教!!! |
|
6楼#
发布于:2004-05-09 19:52
我想问一下arthurcao usb驱动程序和应用程序是通过CreatFile(),write(),readFile(),DeviceIoCTL()进行通信的吧? 如果你用CYPRESS的片子,那EZ USB来说,它用CreatFile()打开设备的句柄,然后应用程序以句柄为对象,用DeviceIoCTL()来作为应用程序和驱动的通讯。 它的开发包的GPD说明文档有详细的介绍。 |
|
|
7楼#
发布于:2004-05-09 19:53
是DeviceIOControl()。上贴打错了。
|
|
|
8楼#
发布于:2004-05-09 22:03
那要得到设备句柄是不是还得要知道设备路径呢?
您能不能给我一个关于这方面的例子呢? 我无从下手!谢谢! |
|
9楼#
发布于:2004-05-10 10:02
不需要,只要你驱动程序配合就成了,如果你驱动用符号连接名作为应用程序和驱动程序的接口的话,你就只需要知道这个符号连接名,在CREATFILE()里把它作为一个参数就可以了。
CYPRESS的开发包有应用程序的例子。 如果你不用CYPRESS的GDP,那么你就要看它的驱动了,找到它和应用程序的接口方法,在做应用程序。 |
|
|
10楼#
发布于:2004-05-10 12:34
我用的是D12的。
您能否将CYPRESS的应用程序传上来,我参考一下,谢谢! |
|