至今的工作中,有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的更多相关文章

  1. UR机器人通信--上位机通信(python)

    一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...

  2. STM32与匿名上位机通信——使用串口DMA实现

    背景:匿名上位机功能强大,这里想要采用匿名上位机输出一些调试信息,以波形的形式显示,方便观察和调试. 平台: 硬件:STM32F405RGT6 通信:2.4G zigbee无线串口收发模块 CC253 ...

  3. 上位机开发之三菱Q系列PLC通信实践

    经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...

  4. 上位机开发之三菱FX3U以太网通信实践

    上次跟大家介绍了一下上位机与三菱Q系列PLC通信的案例,大家可以通过点击这篇文章:上位机开发之三菱Q系列PLC通信实践(←戳这里) 今天以三菱FX3U PLC为例,跟大家介绍一下,如何实现上位机与其之 ...

  5. 上位机开发之西门子PLC-S7通信实践

    写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...

  6. C# 实现自定义的USB设备与上位机进行通信(上位机部分)

    因为以前没用过USB,对USB也不了解,于是上网查了很多资料,不过网上的资料都是零零散散,不清不楚的,于是我自己总结了一下,下面几个链接是网上这么多零散资料里,我觉得比较有参考意义的. USB设备连接 ...

  7. 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现

    说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...

  8. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...

  9. C# 上位机的USB设备拔插检测

    我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C ...

随机推荐

  1. [DB] Hadoop免密登录原理及设置

    情景: 现有两台电脑bigdata111.bigdata112,bigdata111想免密码登录bigdata112 过程: 1.bigdata111生成公钥(用于加密,给别人)和私钥(用于解密,自己 ...

  2. [bug] Container killed on request. Exit code is 143

    原因 内存不足 参考 https://blog.csdn.net/hongxiao2016/article/details/88919606 https://blog.csdn.net/Zsigner ...

  3. Rsync忽略文件夹或目录

    使用Rsync同步的时候往往会要求对某个文件夹或者文件进行忽略,客户端可以使用--exclude参数来实现对,目录或者文件的忽略 rsync -rltvz --port=873 --exclude & ...

  4. Docker Swarm(十一)生产环境使用的一些建议

    一.Docker Swarm上的容器选择 并非所有服务都应该部署在Swarm集群内.数据库以及其他有状态服务就不适合部署在Swarm集群内. 理论上,你可以通过使用labels将容器部署到特定节点上, ...

  5. docker容器中日志文件过大处理方法

    背景 :在日常工作中一个基于centos镜像构建起来的python爬虫程序,日志文件在两个月内到了500G,日志存放在根目录下面,在不扩容的情况下把这个问题给解决掉.通过定时任务和脚本的方法,定期的清 ...

  6. MyBatis 开启 Log4j 日志调试信息开关

    Log4j 是什么 Log4j 是由 Apache 提供的开源日志框架,用于帮助用户处理日志信息. Log4j 能将日志信息分级打印和存储,而且提供了日志不同的存储方式,我们可以将日志发送到控制台,或 ...

  7. Boa Web Server 缺陷报告及其修正方法

    综述 Boa 作为一种轻巧实用的 WEB 服务器广泛应用于嵌入式设备上, 但 Boa 对实现动态网页的 CGI  的支持上仍存在一些缺陷, 本文描述了 Boa 对 CGI 的 Status/Locat ...

  8. Windows上能看朋友圈的微信来了 | 附下载地址

    昨天的时候,电脑端的微信提示更新就顺手更新了一下,更新完成后习惯性的点了下设置,纳尼,居然被灰到了测试版本? 带着好奇,赶快看了下更新了什么内容: 支持浏览朋友圈 "搜一搜"支持搜 ...

  9. macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载

    本站提供的 macOS Big Sur 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装. 请访问原文链接:https://sy ...

  10. MindSpore模型精度调优实践

    MindSpore模型精度调优实践 引论:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,为MindSpore量身定做了可视化调试调优组件:MindInsight. ...