001、Cyapi使用心得

(1)USB连接

1.首先要建立一个USB设备对象,

      

 CCyUSBDevice *USBDevice = new   CCyUSBDev(Handle);

     Handle是USB所关联对象的句柄,一般在MFC中直接就是m_hwnd。

2.然后就该是打开USB设备了,可以用到两个函数open();isopen()

这两个都可以用来打开USB设备,isopen()还可以判断能否获得USB设备句柄

    一般来说,如果只有一个USB设备连接,可以这样打开:

             

  USBDevice->open(0)    //打开0号USB设备

如果要判断,可以:         

   if(! USBDevice->open(0)) //打开失败

               {messagebox("USB未连接");}

    如果连接有多个USB设备,那么可以枚举所有的USB,用到DeviceCount()函数;执行USBDevice->DeviceCount()后,返回所连接的USB设备个数:    

   if (USBDevice->DeviceCount())   //保证至少有一个USB设备连接

    {

        for (i = 0; i < USBDevice->DeviceCount(); i++)    //枚举所有USB设备

        {

           USBDevice->Open(i);                   //打开第i号USB设备

           m_DeviceListComBox.AddString(USBDevice->DeviceName);//所选择的当前设备名

        }

    }

(2)其他USB属性获取

获取USB其他属性,这里列出经常使用的几个,具体的可参考cyapi的文档,在CCyUSBDevice和CCyUSBEndPoint这两个类里可查询到。      

 USBDevice->DeviceCount()     //返回连接到电脑的USB设备个数,从0,1,2.。开始命名

       USBDevice->DeviceName()     //返回USB设备名称,也就是固件中StringDscr2: 字段字符串  

       USBDevice->VendorID           //返回USB设备VID

       USBDevice->ProductID           //返回USB设备PID

(3)bulk传输

线程中的处理,在这里上位机用异步接收,创建异步事件:    

 OVERLAPPED inOvLap;

     inOvLap.hEvent   = CreateEvent(NULL, false, false, "CYUSB_IN");

      LONG inlen ;

     inlen = 512;

      UCHAR *inContext = dlg->InEndpt->BeginDataXfer(inData,inlen,&inOvLap);

        dlg->InEndpt->WaitForXfer(&inOvLap,TimeOut);

        dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext);

主要是三步,调用三个函数BeginDataXfer,WaitForXfer,FinishDataXfer。按照手册上说的,BeginDataXfer发起异步传输,并且立即返回。也就是说,发起此次的inlen后,并不会等inlen传输完,而是立即开始下一次inlen字节传输;WaitForXfer,异步传输最大等待时间;FinishDataXfer,到这里才开始真正的写内存,将读到的数写到缓冲区indata中。

(BeginDataXfer是非阻塞式的传输,也就是调用以后马上返回。只到WaitForXfer得到传输完成信号后,FinishDataXfer才真正的开始写数据。非阻塞式的传输的好处是不用阻塞其他操作的运行,在这里BeginDataXfer(inbuf,bc,&inOvLap); 开始读取bc个数据到inbuf里,当调用FinishDataXfer(inbuf,bc,&inOvLap,inContext); 时,数据才真正被写到inbuf里,同样对于outbuf也是一样的)

最后,完了别忘记释放对象:    

 CloseHandle(inOvLap.hEvent);

     delete [] inData;

 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值