在网上与USB直接通信中LibUSB和CyUSB这两个是使用的人最多的,我用的是Cypress的Fx3的板子来进行通,网上基本没有unity这方面的资料,也算是第一个研究和分享给大家的
1.第一步我使用了Cypress封装的CyUSB的dll,他官网有C#的案例可以参考,但是在Unity又不一样,网上都是用C#窗口程序开发的,我也建了一个窗口程序测试,可以连接获取设备信息,也可以收发消息很开心,就去unity中测试,结果不行,只能获取设备信息不能通信
2.然后就继续在网上看资料,试一下LibUSB这个,这个也可以获取到设备的信息,但是在发消息时返回的是MonoApi这个类型,不知道是不是在unity中使用有什么问题,而且使用Libusb安装驱动没有数字签名,我在弄驱动的过的中把电脑的所有驱动都移除了,最后没有办法重装了系统,libUSB我也在窗口程序中测试通信没有问题,但是在unity中返回类型就有问题,网上也有很多人有这个问题
3.实在没有办法就继续研究了Cypress的,毕竟是官方的,然后发现国外的帖子中有人也有这个问题,Cypress官方给了一个1.2.3.0的sdk包,我才发现,在官网下载最新的是3.4.2的,官方给的回答的使用的架构不一样,然后我赶紧试一下,可以了,通信收发信息都没问题,但是还有一个一直以来CyUSB都有的问题,不知道是不是封装的给窗口程序使用,在unity中回报无法注册窗户这个问题,这个问题是打开unity工程第一次没有第二次就有了,我反编译了他的dll,发现他封装的dll有调用创建窗口
这个是因为windows窗口程序的问题,解决方法就是建立一个线程去监听,当创建这个窗口是就立马关闭它我贴一下解决这个问题的两个链接,大家可以看一下
https://ask.csdn.net/questions/770914
https://blog.csdn.net/weixin_42612319/article/details/104713254
private USBDeviceList m_usbList; //获取设备列表
public CyUSBDevice m_myDevice; //当前设备
//建立连接
public void ConnseFx3DeviceMethod()
{
m_usbList = new USBDeviceList(CyConst.DEVICES_CYUSB);
m_myDevice = m_usbList[1204, 241] as CyUSBDevice; //根据 pid 和vid在列表中找到自己的设备
if (m_myDevice != null)
{
CtrlEndPt = m_myDevice.ControlEndPt;//获取控制端点
CtrlEndPt.Target = CyConst.TGT_DEVICE;
CtrlEndPt.ReqType = CyConst.REQ_VENDOR;
CtrlEndPt.Direction = CyConst.DIR_TO_DEVICE;
CtrlEndPt.ReqCode = (byte)0xB1;
CtrlEndPt.Value = 0;//0
CtrlEndPt.Index = 1;
m_text.text = "连接成功";
}
}
我把工程贴出来吧有需要的可以下载一下,我研究这个下载了很多别人的工程资料把我几年攒的积分都用完了
发送和接受数据在我的工程中,大家支持一下只要五个积分哈
https://download.csdn.net/download/baozaodedianxiaoer/12721754