3967|3

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

看看有没有高手指点 ezusb->cyusb [复制链接]

bool ReadData(int count,unsigned char *buf)
{

    bool                                    Success ;
    BULK_TRANSFER_CONTROL                   BR;
    VENDOR_OR_CLASS_REQUEST_CONTROL         VR;
    unsigned long                           nBytes;
        int                        bc,bout;
        unsigned char* inbuf=buf;

    if (hUsbDevice != INVALID_HANDLE_VALUE )
    {
      VR.direction = 0;   // (0=host to device, 1=device to host)
      VR.requestType = 2;
      VR.recepient = 0;
      VR.request = VX_GPIFREAD;
      VR.requestTypeReservedBits = 0;
      VR.value = *((unsigned short*)(&count));
      VR.index = *(((unsigned short*)(&count))+1);        //SETUPDAT[5:4]

       Success = DeviceIoControl (hUsbDevice,
                    IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
                    &VR,
                    sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
                    NULL,
                    0,
                    &nBytes,
                    NULL);

      BR.pipeNum = 1;
                bout=count*2;
                while (bout){
                        if(bout>0x8000)bc=0x8000;
                        else bc=bout;

                          Success = DeviceIoControl (hUsbDevice,
                                         IOCTL_EZUSB_BULK_READ,
                                         &BR,
                                         sizeof(BULK_TRANSFER_CONTROL),
                                         inbuf,
                                                bc,
                                         &nBytes,
                                         NULL);
                          if(bc>nBytes)bc=nBytes;
                          bout-=bc;
                          inbuf+=bc;
                }

    }

    return Success;
}

上边是以前的程序,由于要用cyusb,我把它改成了下边的样子:
bool ReadData(int count,unsigned char *buf)
{
        bool    Success ;
        //BULK_TRANSFER_CONTROL                   BR;
        //VENDOR_OR_CLASS_REQUEST_CONTROL         VR;

        long bc;
        int bout;
        unsigned char* inbuf=buf;
//      PUCHAR outbuf = new UCHAR[count];
//      ZeroMemory(outbuf,count);

        //PUCHAR inbuf = new UCHAR[count];
        //ZeroMemory(inbuf,count);
        //inbuf = buf;

        OVERLAPPED inOvLap;//,outOvLap;
        //outOvLap.hEvent = CreateEvent(NULL,false,false,"CYUSB_OUT");
        inOvLap.hEvent = CreateEvent(NULL,false,false,"CYUSB_IN");

        if (hUsbDevice != INVALID_HANDLE_VALUE )
        {
//                VR.direction = 0;   // (0=host to device, 1=device to host)
//                VR.requestType = 2;
//                VR.recepient = 0;
//                VR.request = VX_GPIFREAD;
//                VR.requestTypeReservedBits = 0;
//                VR.value = *((unsigned short*)(&count));
                /*
                Success = DeviceIoControl (hUsbDevice,
                                        IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
                                        &VR,
                                        sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
                                        NULL,
                                        0,
                                        &nBytes,
                                        NULL);
                */
//                BR.pipeNum = 1;

                ept->Direction = DIR_TO_DEVICE;
                ept->ReqType = REQ_VENDOR;
                    ept->Target = TGT_DEVICE;
                ept->ReqCode = VX_GPIFREAD;
                ept->Value = *((unsigned short*)(&count));
                ept->Index = *(((unsigned short*)(&count))+1); //SETUPDAT[5:4]

                //PUCHAR readbuf = new char[2];
                //Success = ept->Read(readbuf,2);
                Success = ept->Write(NULL,0);
                ept->Address = 0x01;

                bout=count*2;
                while (bout)
                {
                        if(bout>0x8000) bc=0x8000;
                        else bc=bout;
                        /*
                        Success = DeviceIoControl (hUsbDevice,
                                        IOCTL_EZUSB_BULK_READ,
                                        &BR,
                                        sizeof(BULK_TRANSFER_CONTROL),
                                        inbuf,
                                        bc,
                                        &nBytes,
                                        NULL);
                        */
                  UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inbuf,bc,&inOvLap);
                  //UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(outbuf,bc,&outOvLap);

                  //USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);
                  USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);

                  //Success = USBDevice->BulkOutEndPt->FinishDataXfer(outbuf,bc,&outOvLap,outContext);
                  Success = USBDevice->BulkInEndPt->FinishDataXfer(inbuf,bc,&inOvLap,inContext);

                  //if(bc>nBytes)bc=nBytes;
                  bout-=bc;
                  inbuf+=bc;
                }
                //CloseHandle(outOvLap.hEvent);
                CloseHandle(inOvLap.hEvent);
        }
        return Success;
}

可就是卡死在这里,请指教。

最新回复

这从usb设备中读不到数据,老返回false,是为什么呢?  详情 回复 发表于 2010-1-26 10:06
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

仍在研究中。。。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

这从usb设备中读不到数据,老返回false,是为什么呢?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表