USB上位机通信:CyAPI
至今的工作中,有USB接口通信的需求,记录一下。
建立一个USB设备对象
CCyUSBDevice *USBDevice = new CCyUSBDev(Handle);
打开USB设备
一个USB设备
USBDevice->open(0) //
若干个
if (USBDevice->DeviceCount()) //保证至少有一个USB设备连接
{
for (i = 0; i < USBDevice->DeviceCount(); i++) //枚举所有USB设备
{
USBDevice->Open(i); //
m_DeviceListComBox.AddString(USBDevice->DeviceName); //所选择的当前设备名
}
}
端点设置
int epts = USBDevice->EndPointCount();//获取端点
CCyUSBEndPoint *endpt;//定义端点指针
for (i=1; i<epts; i++)
{
endpt = USBDevice->EndPoints[i]; //EndPoints-端点列表,最大16.EndPoints[0]指向控制端点( CCyControlEndPoint)
//未使用的端点设置为NULL
if (endpt->Attributes == 2)
{
sprintf(s, "0x%02X", endpt->Address);
if (endpt->Address & 0x80) //Address--判断传输方向in or out 0x8_-in;0x0_-out
{
m_InEndptComBox.AddString(s); //最高位为8,in端点,添加到in组合框
m_InEndptComBox.SetItemData(m_InEndptComBox.GetCount()-1,i);
}
else
{
m_OutEndptComBox.AddString(s); //否则,最高位为0,out端点,添加到out组合框
m_OutEndptComBox.SetItemData(m_OutEndptComBox.GetCount()-1,i);
}
}
}
CCyUSBDevice *USBDevice =new CCyUSBDevice(m_hWnd); //USB设备
USBDevice->Open(0); //打开0号设备,
CCyUSBEndPoint *endpt = USBDevice->EndPointOf(0X82); //使用端点2,in传输
传输
- out控制传输发送vendor命令
- in控制传输发送vendor命令
- 简易命令:Write(out传输)和Read(in传输)
- bulk传输:
调用三个函数BeginDataXfer,WaitForXfer,FinishDataXfer。BeginDataXfer发起异步传输,BeginDataXfer并不等待,而是直接开始下一次传输;
由FinishDataXfer来写内存,将读到的数写到缓冲区indata中。
if (USBDevice->IsOpen()) {
bLooping = true; //线程循环标志
XferThread = AfxBeginThread(XferLoop, this); //启动线程
}
bool success;
dlg->InEndpt->TimeOut = 120; for (;dlg->bLooping;) { //线程循环,
LONG inlen ;
inlen = 512;
UCHAR *inContext = dlg->InEndpt>BeginDataXfer(inData,inlen,&inOvLap); dlg->InEndpt->WaitForXfer(&inOvLap,TimeOut);
success = dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext);
if (!success) {
dlg->bLooping = false;
}
}
注意要释放对象
CloseHandle(inOvLap.hEvent);
delete [] inData;
USB上位机通信:CyAPI的更多相关文章
- UR机器人通信--上位机通信(python)
一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...
- STM32与匿名上位机通信——使用串口DMA实现
背景:匿名上位机功能强大,这里想要采用匿名上位机输出一些调试信息,以波形的形式显示,方便观察和调试. 平台: 硬件:STM32F405RGT6 通信:2.4G zigbee无线串口收发模块 CC253 ...
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- 上位机开发之三菱FX3U以太网通信实践
上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...
- 上位机开发之西门子PLC-S7通信实践
写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...
- C# 实现自定义的USB设备与上位机进行通信(上位机部分)
因为以前没用过USB,对USB也不了解,于是上网查了很多资料,不过网上的资料都是零零散散,不清不楚的,于是我自己总结了一下,下面几个链接是网上这么多零散资料里,我觉得比较有参考意义的. USB设备连接 ...
- 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现
说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...
- 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...
- C# 上位机的USB设备拔插检测
我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C ...
随机推荐
- [bug] CM / CDH 主机运行状态不良情况
参考 https://blog.csdn.net/fhfkv8644/article/details/82383196 无法发出查询:Host Monitor 未运行 https://blog.csd ...
- 007.Ansible变量Fact,魔法变量和lookup生成变量
一 fact变量 1.1 fact简介 ansible有一个模块叫setup,用于获取远程主机的相关信息,并可以将这些信息作为变量在playbook里进行调用.而setup模块获取这些信息的方法就是 ...
- 配置yum仓库的三种方法光盘镜像、nginx、sftp
方法一: 1.安装ftp服务 [root@oldboy ~]# yum -y install vsftpd 2.查看vsftpd相关的配置文件和目录 rpm -ql vsftpd # 查看vsftpd ...
- Centos7 LVM管理的逻辑卷根目录扩容和/var目录扩容
Centos7 LVM管理的逻辑卷根目录扩容 fdisk /dev/sdb #对新加磁盘进行分区操作pvcreate /dev/sdb1 #创建一个物理卷vgs #查看现有的卷组vgextend ce ...
- Element-ui Popconfirm气泡确认框的确认及取消事件不生效
Element-ui 官方文档对 Popconfirm气泡确认框的一些属性及事件的描述不够详细,导致第一次使用时会遇到各种各样的问题 对确定事件及取消事件描述如下: 但是如果给组件绑定@confirm ...
- 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql
阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...
- Selenium3自动化测试【18】XPath定位元素(2)
层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...
- 让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法
public class BlockingSubmitExecutor { private ExecutorService executor = new ThreadPoolExecutor(2, 2 ...
- camera中LENS和SENSOR的CRA是如何搭配的?
camera中LENS和SENSOR的CRA是如何搭配的? camera中,lens和sensor的搭配是非常关键的问题.但这两者是如何搭配的呢? 一般在Sensor data sheet中会附有全视 ...
- APA自动泊车系统
APA自动泊车系统 1. 半自动泊车 自动泊车又称为自动泊车入位,它对于新手来说是一项相当便捷的配置,对于老手来说也省了些不少力气.那么自动泊车的原理是什么呢?能想怎么停就怎么停,想停哪儿就停哪儿吗? ...