dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1285回复:4

flyhye请进:应用程序向USB发送数据的问题(非斜体)

楼主#
更多 发布于:2004-06-09 16:52
我的应用程序是这样的:
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用法不对,还请仔细说说,谢谢了。
worldwar
驱动牛犊
驱动牛犊
  • 注册日期2003-08-04
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 17:05
我觉得有误的地方
具体见斜体的帖子
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-09 19:43
ezusb的例子应该跟你的有不同吧,在inbuffer里面放的是HostCommand,不知道跟这个有没关系。

另外,请参考ddk的例子bulkusb


从deviceiocontrol的定义来看,你这样子解释是对的,但我如果按你说的来改,程序根本无法向下写,甚至连“succeeding in writing"的对话框都弹不出来。
而且看ezusb的例子,它的应用程序也是用我采用的这种方式的。但我就不知道为什么我用就不对了?
真是困惑了!
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
dingdang
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-09 18:54
从deviceiocontrol的定义来看,你这样子解释是对的,但我如果按你说的来改,程序根本无法向下写,甚至连“succeeding in writing"的对话框都弹不出来。
而且看ezusb的例子,它的应用程序也是用我采用的这种方式的。但我就不知道为什么我用就不对了?
真是困惑了!
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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;

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用法不对,还请仔细说说,谢谢了。
 
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
游客

返回顶部