打印

求助68013 VC 写问题

[复制链接]
2013|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eqyq|  楼主 | 2011-1-20 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, AN, TE, pen, ge
USB_API HANDLE X_USBOpen()
{

        HANDLE handle = CreateFile(
                "\\\\.\\Ezusb-0",           
                GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
                NULL,                       
                OPEN_EXISTING,               
                FILE_FLAG_SEQUENTIAL_SCAN,                              
                NULL                        
                );


        if( handle == INVALID_HANDLE_VALUE)
        {
                AfxMessageBox("Open device error!");
                return NULL;
        }


        const int byte_per_each_time=512;
        const int valid_each_line=50;//valid number of char for each line
        const int valid_total_line=8500;

    unsigned char initial_buf[(valid_each_line*valid_total_line)/2];

       



        char FileName[MAX_PATH];
        GetModuleFileName(AfxGetInstanceHandle(), FileName, MAX_PATH);
        CString FilePath;
        FilePath = FileName;
        FilePath = FilePath.Left(FilePath.ReverseFind('\\'));
        FilePath += "\\data\\00000001.prb";

        CFile file;
    BOOL opened = file.Open(_T(FilePath),CFile::modeRead);

        if(!opened)
    {
      AfxMessageBox("No file found!");
      
    }

    DWORD FileLen = file.GetLength();

TCHAR *p = new TCHAR[FileLen] ;
memset(p, 0, sizeof p);

file.Read(p,FileLen);
file.Close();

                        int d=0;

                        while(*p&&p)
                        {
                                if(*p==' ')
                                {
                                        p++;
                                }

                                else

                                {
                     if(*p!='\r')
                                         {

                                       initial_buf[d++]=c2i(tolower(p[0]))*16 + c2i(tolower(p[1]));
       
                                         }

                                   p += 2;

                                }
                        }


  delete p;


//Download the initial_buf array

int t_address=0;
int m=0;

int test=0;

unsigned char download_buffer[byte_per_each_time];


        BULK_TRANSFER_CONTROL BulkControl;
        DWORD nBytes;
        BulkControl.pipeNum = 1;

  for(;m<d;){

    for(int v=0;v<byte_per_each_time;v++){
      download_buffer[v] = initial_buf[t_address];
          t_address++;
     

    }
   
        m=m+byte_per_each_time;


                        BOOL bResult = DeviceIoControl (
                                handle,
                                IOCTL_EZUSB_BULK_WRITE,
                                //&(BulkControl),
                                (LPVOID)&BulkControl,
                                sizeof (BULK_TRANSFER_CONTROL),
                                download_buffer,
                                byte_per_each_time,
                                &(nBytes),        
                                NULL
                                );

                        if(!bResult){
                                if (test==0){
                   display(::GetLastError());
                                   test++;
                                }
                        }


  }


        return handle;
}












1.现在的现象是,有时执行到DeviceIoControl时就卡住了,拔掉USB硬件的电源后GetLastError()返回值为1162(指出的元素不存在)但有时又能正常写入,不稳定,不知道哪里有问题?

2.另外,想请教下用一个CreateFile创建一个Handle,用DeviceIOContrl向设备写数据,写完后要从设备读取数据,是用CloseHandle先把这个Handle 关闭后再新建一个来读,还是不用关闭掉这个Handle直接用DeviceIOControl继续读?

相关帖子

沙发
dqyubsh| | 2011-1-23 21:00 | 只看该作者
不明白你为什么还在用IOCTL函数,这是10年前才不得不采用的API,如果不是有特殊需求,现在可以采用CYAPI编程,简单得多得多得多得多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

24

帖子

0

粉丝