阅读:1285回复:4
flyhye请进:应用程序向USB发送数据的问题(非斜体)
我的应用程序是这样的:
USHORT outBuffer[512]; for(int i=0;i<512;i++) outBuffer=i; HANDLE handle=NULL; BOOLEAN success; ULONG nBytes=0; SET_INTERFACE_IN interfaceIn; BULK_TRANSFER_CONTROL bulkControl; WORD outPacketSize,inPacketSize; handle=CreateFile("\\\\.\\ezusb-0", GENERIC_WRITE, OPEN_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if(handle==INVALID_HANDLE_VALUE) {return;} interfaceIn.interfaceNum=0; interfaceIn.alternateSetting=1; success=DeviceIoControl(handle, IOCTL_Ezusb_SETINGERFACE, &interfaceIn, sizeof(SET_INTERFACE_IN), NULL, 0, &nBytes, NULL); bulkControl.pipeNum=0;////管道0为输出端口 outPacketSize=256; success=DeviceIoControl(handle, IOCTL_EZUSB_BULK_WRITE, &bulkControl, sizeof(BULK_TRANSFER_CONTROL), outBuffer, outPacketSize*2; &nBytes, NULL); if(success) { AfxMessageBox("succeeding in writing",MB_OK); } else { CloseHandle(handle); return; } 程序运行后,能弹出对话框“succeeding in writing",但是用逻辑分析仪测试发出去的数据时,发现数据全为0,而不是实际outBbuffer中的从0到511的整数。 刚才flyhye说我的deviceiocontrol用法不对,还请仔细说说,谢谢了。 |
|
沙发#
发布于:2004-06-10 17:05
我觉得有误的地方
具体见斜体的帖子 |
|
板凳#
发布于:2004-06-09 19:43
ezusb的例子应该跟你的有不同吧,在inbuffer里面放的是HostCommand,不知道跟这个有没关系。
另外,请参考ddk的例子bulkusb 从deviceiocontrol的定义来看,你这样子解释是对的,但我如果按你说的来改,程序根本无法向下写,甚至连“succeeding in writing"的对话框都弹不出来。 |
|
|
地板#
发布于:2004-06-09 18:54
从deviceiocontrol的定义来看,你这样子解释是对的,但我如果按你说的来改,程序根本无法向下写,甚至连“succeeding in writing"的对话框都弹不出来。
而且看ezusb的例子,它的应用程序也是用我采用的这种方式的。但我就不知道为什么我用就不对了? 真是困惑了! |
|
地下室#
发布于:2004-06-09 17:07
看:
BOOL DeviceIoControl( HANDLE hDevice, // handle to device DWORD dwIoControlCode, // operation control code LPVOID lpInBuffer, // input data buffer DWORD nInBufferSize, // size of input data buffer LPVOID lpOutBuffer, // output data buffer DWORD nOutBufferSize, // size of output data buffer LPDWORD lpBytesReturned, // byte count LPOVERLAPPED lpOverlapped // overlapped information ); 你要发的数据应该放在lpInBuffer里面 ULONG nBytes=0; |
|
|