usb通信

public class USBConnectionManager {
   private UsbManager manager;
   private UsbDevice mUsbDevice;
   private UsbInterface mInterface;
   private UsbEndpoint usbEpOut;

   private UsbEndpoint usbEpIn;
   private UsbDeviceConnection mDeviceConnection;
   private final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
   private OnUSBInitListener mOnUSBInitListener;

   public USBConnectionManager(Context context, int vID, int pID, OnUSBInitListener onUSBInitListener) {
      this.mOnUSBInitListener = onUSBInitListener;
      manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
      HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
      Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
      while (deviceIterator.hasNext()) {
         UsbDevice device = deviceIterator.next();
         if (device.getVendorId() == vID && device.getProductId() == pID) {
            mUsbDevice = device;
            break;
         }
      }
      if (mUsbDevice != null) {
         mInterface = mUsbDevice.getInterface(0);
         if (mInterface != null) {
            if (mInterface.getEndpoint(0) != null) {
               usbEpIn = mInterface.getEndpoint(0);
            }
            if (mInterface.getEndpoint(1) != null) {
               usbEpOut = mInterface.getEndpoint(1);
            }

            if (manager.hasPermission(mUsbDevice)) {
               getConnection();
            } else {
               IntentFilter filter = new IntentFilter();
               filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
               filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
               filter.addAction(ACTION_USB_PERMISSION);
               context.registerReceiver(receiver, filter);
               PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0,
                     new Intent(ACTION_USB_PERMISSION), 0);

               manager.requestPermission(mUsbDevice, mPermissionIntent);
            }
         } else {
            onUSBInitListener.error(OnUSBInitListener.NOT_FOUND_USBINTERFACE);
         }
      } else {
         onUSBInitListener.error(OnUSBInitListener.NOT_FOUND_DEVICE);
      }
   }

   private void getConnection() {
      mDeviceConnection = manager.openDevice(mUsbDevice);
      if (mDeviceConnection == null) {
         mOnUSBInitListener.error(OnUSBInitListener.OPEN_DEVICE_FAILURE);
      } else {
         mOnUSBInitListener.success();
      }
   }

   public int read(byte[] data) {
      return mDeviceConnection.bulkTransfer(usbEpIn, data, data.length, 3000);
   }

   public void write(byte[] data) {
      mDeviceConnection.bulkTransfer(usbEpOut, data, data.length, 3000);
   }

   public void close() {
      if (mDeviceConnection != null && mInterface != null) {
         mDeviceConnection.releaseInterface(mInterface);
         mDeviceConnection.close();
      }
   }


   private BroadcastReceiver receiver = new BroadcastReceiver() {

      @Override
      public void onReceive(Context context, Intent intent) {
         if (intent.getAction().equals(ACTION_USB_PERMISSION)) {
            boolean granted = intent.getExtras().getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED);
            if (granted)
               getConnection();
            else
               mOnUSBInitListener.error(OnUSBInitListener.NO_PERMISSION);
            context.unregisterReceiver(receiver);
         }
      }
   };

   public interface OnUSBInitListener {
      final int NOT_FOUND_DEVICE = -1;
      final int OPEN_DEVICE_FAILURE = -2;
      final int NOT_FOUND_USBINTERFACE = -3;
      final int NO_PERMISSION = -4;

      void success();
      void error(int code);
   }

使用方法

1.初始化

USBConnectionManager manager=new USBConnectionManager(getApplicationContext(), 1234, 5678, new OnUSBInitListener() {

            @Override
            public void success() {

            }

            @Override
            public void error(int code) {

            }
});

初始化参数中需要传context和usb设备的vid和pid,注意这里是10进制的,如果不知道硬件id的,可以吧硬件插入电脑上,在设备管理器里查看。

2.读写数据

写数据直接调用manager.write(byre[] data)方法,参数为要写的数据,返回值为写入数据长度代表写入成功,为负数则失败。

读数据调用manager.read(byte[] data)方法,参数代表要接受的数据,返回值代表读取的数据长度。

3.关闭

manager.close();

 

转载于:https://my.oschina.net/u/2542649/blog/1579254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LabVIEW是一种用于数据采集、实时控制和仪器控制等应用的编程语言和开发环境。USB通信是一种常见且广泛应用的数据传输方式,可以在计算机和外部设备之间实现高速、可靠的数据传输。 在LabVIEW中,使用USB通信需要以下步骤: 1. 配置硬件设备:首先,需要将USB设备与计算机连接,并确保设备驱动程序正确安装。LabVIEW支持多种USB设备,包括DAQ(数据采集)卡、仪器和其他外设等。 2. 编写LabVIEW程序:接下来,在LabVIEW中编写程序来实现USB通信。LabVIEW提供了针对不同USB设备的API(应用程序接口),方便开发者进行数据传输和设备控制。通过这些API,可以配置设备参数、发送和接收数据、控制设备状态等。 3. USB通信设置:在LabVIEW中,可以使用VISA(Virtual Instrument Software Architecture)来配置USB通信。VISA是一种为各种通信接口和设备提供统一编程接口的协议。通过VISA,可以选择合适的通信协议、设置通信接口参数,提高数据传输的性能和可靠性。 4. 数据传输和处理:使用LabVIEW的数据流图编程模型,可以方便地进行数据传输和处理。在程序中,可以使用VISA函数和LabVIEW的数据处理工具箱来实现数据的发送和接收、数据的解析和分析等。 总之,LabVIEW提供了便捷的开发环境和强大的功能,可以帮助开发者实现USB通信。通过LabVIEW,可以轻松配置USB设备、编写程序、进行数据传输和处理,从而满足各种实时控制和数据采集的需求。 ### 回答2: LabVIEW是一种图形化编程环境,可用于创建应用程序和系统控制,并支持与各种硬件设备的通信。在USB通信方面,LabVIEW提供了一套通用的函数库和工具,使用户能够轻松实现与USB设备的数据交互。 首先,我们需要确保计算机上已安装适当的USB驱动程序。然后,通过在LabVIEW中创建一个新的VI(虚拟仪器)文件,我们可以开始编写我们的USB通信程序。 在LabVIEW中,我们可以使用VISA(Virtual Instrument Software Architecture)函数来实现与USB设备的通信。通过使用VISA函数库提供的函数,我们可以打开USB设备、配置通信参数、发送和接收数据等。 在LabVIEW的Block Diagram中,我们可以选择适当的VISA函数来实现USB通信功能。例如,使用VISA Open函数可以打开与指定USB设备的通信会话,并获得一个唯一的资源标识符。然后,我们可以使用VISA Write函数发送数据给USB设备,并使用VISA Read函数接收来自USB设备的响应数据。 此外,LabVIEW还提供了一些可视化控件,用于定制USB设备的界面。我们可以使用控件,如按钮、滑块和文本框等,来构建用户与USB设备进行交互的界面。这些控件可以与VISA函数库的函数进行绑定,以实现与USB设备的数据交换和控制。 总结起来,通过LabVIEW的图形化编程环境,我们可以轻松地实现USB设备的通信。通过使用VISA函数库提供的函数和可视化控件,我们能够方便地进行USB设备的数据交互和控制,使得USB通信变得简单和高效。 ### 回答3: LabVIEW是一款用于图形化编程的软件开发环境,可以用于各种不同的应用领域,包括USB通信。LabVIEW中有一些内置的工具和函数,可以很方便地实现USB通信。 在LabVIEW中进行USB通信,首先需要添加适当的驱动程序和硬件支持包,以确保计算机可以正确识别和与USB设备进行通信。然后,可以在LabVIEW中创建一个新的项目,并添加一个USB通信模块来控制和监测USB设备。 在LabVIEW的界面编辑器中,可以创建一个用户界面,用于控制和监测USB设备。通过使用LabVIEW提供的控件和工具,可以方便地创建自定义的界面,包括按钮、文本框、图表等。这些控件可以与USB设备的不同功能进行交互,例如发送命令、接收数据等。 LabVIEW还提供了一些内置的函数和工具箱,用于实现USB通信。这些函数可以用于打开和关闭USB端口、发送和接收数据、设置通信参数等。开发者可以根据具体的应用需求,选择合适的函数和方法来实现USB通信功能。 通过LabVIEW的强大功能和易于使用的图形化编程环境,可以快速开发出功能强大的USB通信应用程序。无论是简单的数据传输,还是复杂的控制和监测系统,LabVIEW都能提供灵活和高效的解决方案。因此,LabVIEW成为了许多科研机构、工程师和制造商首选的工具,用于开发和测试USB通信应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值