grandone
驱动牛犊
驱动牛犊
  • 注册日期2007-04-13
  • 最后登录2008-06-12
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1400回复:3

请教D12用VC编程不能读写的问题

楼主#
更多 发布于:2007-11-16 15:46

自己编写了D12驱动,用USB调试工具使用端点2能够进行数据读写,说明驱动没有问题。

但在VC6下编程进行读写,却总是不行。Creatfile能返回设备的句柄,接着就不行了。不管是用writefile还是DeviceIoControl 都不对。用DeviceIoControl ,bResult总是返回FALSE。用writefile,调试状态单步执行总停在writefile这句,不再向下执行。

代码如下:

int main(int argc, char* argv[])
{
    BOOL b= write_usbport("PIPE2");
    return 0;
}

write_usbport(char *filename)
{
    BOOLEAN bResult = FALSE;
    ULONG nBytes = 0;
    UINT uiLength=1;
    HANDLE h=INVALID_HANDLE_VALUE;
    unsigned char * IOBuffer;
    unsigned char outValue=0;
    unsigned char inValue=0;
    IOBuffer = (unsigned char *)malloc (64);
    IOBuffer[0]=32;
    outValue=32;

    h = open_file(filename);   //子函数中有createfile,能成功返回句柄
    if ( h != INVALID_HANDLE_VALUE )
    {
    
//         bResult = DeviceIoControl (h,
//             IOCTL_D12_BULK_WRITE,
//             &inValue,
//             1,
//             &outValue,
//             1,
//             &nBytes,
//             NULL);

//         bResult = WriteFile(h,
//             IOBuffer,
//             uiLength,
//             &nBytes,
//             NULL);
        
        if (bResult)
            return TRUE;
        else
            return FALSE;
    }
    return FALSE;
}
grandone
驱动牛犊
驱动牛犊
  • 注册日期2007-04-13
  • 最后登录2008-06-12
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-16 15:49
自己顶
grandone
驱动牛犊
驱动牛犊
  • 注册日期2007-04-13
  • 最后登录2008-06-12
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-16 15:52
是不是因为没有打开端点造成的?
Createfile的代码如下:

if ( !GetUsbDeviceFileName(
        (LPGUID) &GUID_CLASS_D12_BULK,
        completeDeviceName) )
    {
        return  INVALID_HANDLE_VALUE;
    }

    strcat (completeDeviceName,
            "\\"
            );            

    strcat (completeDeviceName,
            filename
            );                    

    h = CreateFile(completeDeviceName,
        GENERIC_WRITE | GENERIC_READ,
        FILE_SHARE_WRITE | FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
//        FILE_FLAG_OVERLAPPED,
        0,
        NULL);
chengfangquan
驱动牛犊
驱动牛犊
  • 注册日期2007-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望361点
  • 贡献值1点
  • 好评度42点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-18 18:20
就那些代码,编译能通过么?
游客

返回顶部