package com.brige.usb; import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.usb.UsbConstants; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbEndpoint; import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbManager; import android.os.Handler; import java.util.HashMap; import java.util.Iterator; public class Usb_Device //usb�豸�� { UsbManager usb_manager; //usb���������� UsbDevice stm32_device; //stm32�豸���� UsbInterface usb_interface; //usb�ӿڶ��� UsbDeviceConnection connection; //usb�豸���Ӷ��� UsbEndpoint ep_out,ep_in; //���롢��� �˵� ���� Usb_Thread usb_thread; //usb��̨��Ϣ�߳� Handler usb_handle; //usb��Ϣhandler public boolean usb_state; //usb������״̬ public boolean usb_permisson; //����Ȩ�� public void Usb_GetPermisson(Activity activity) //��ȡusbȨ�� { //ע��㲥 final PendingIntent mPermissionIntent = PendingIntent.getBroadcast(activity, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); activity.registerReceiver(mUsbReceiver, filter); usb_manager = (UsbManager)activity.getSystemService(Context.USB_SERVICE); //��ȡUSB���� if (usb_manager == null) { usb_permisson=false; return ; } //�������е�usb�豸 HashMap<String,UsbDevice> deviceList = usb_manager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); while (deviceIterator.hasNext()) { UsbDevice device = deviceIterator.next(); stm32_device = device; } if(stm32_device==null) { usb_permisson=false; return ;//�Ҳ����豸 } if(!usb_manager.hasPermission(stm32_device))//�ж��Ƿ���Ȩ�� ʹ��usb�豸 { //û��Ȩ����ѯ���û��Ƿ�����Ȩ�� usb_manager.requestPermission(stm32_device, mPermissionIntent); //�ô���ִ�к�ϵͳ����һ���Ի��� //ѯ���û��Ƿ�����������USB�豸��Ȩ�� } else { usb_permisson=true; return; } } public boolean Usb_Connect( )// ����USB���� { connection = usb_manager.openDevice(stm32_device);//��stm32�������� if(connection==null) return false;//����ʧ�� if (stm32_device.getInterfaceCount() != 1) return false; usb_interface=stm32_device.getInterface(0); //��ȡ�ӿ� connection.claimInterface(usb_interface, true);//��ռ�ӿ� int cnt = usb_interface.getEndpointCount(); //��ȡ���ö˵����Ŀ if(cnt<1) return false; for (int index = 0; index < cnt; index++) //�����˵� �ҵ�����˵������˵� { UsbEndpoint ep = usb_interface.getEndpoint(index); //��ȡindex��ŵĶ˵� if ((ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) && (ep.getDirection() == UsbConstants.USB_DIR_OUT)) ep_out = ep; //�������ݶ˵� if ((ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) && (ep.getDirection() == UsbConstants.USB_DIR_IN)) ep_in = ep; //�������ݶ˵� } usb_thread = new Usb_Thread(connection,ep_in,usb_handle); //���� usb���ݽ����߳� usb_thread.start(); usb_state= true; return true; //���ӳɹ� } boolean Usb_Disconnect() //usb�Ͽ����� { if (usb_state) { connection.releaseInterface(usb_interface); //�ͷŽӿ� usb_thread.interrupt(); //���� �߳� return true; } else return false; } public boolean Usb_Transfer(byte buffer[],int length) //�������� ʹ��ʱ���ں�̨�߳� { int cnt=connection.bulkTransfer(ep_out, buffer, length, 5000); //����˵� ������ ���峤�� ʱ�� if(cnt>=0) return true; else return false; } boolean Usb_State()//��ȡUSB��״̬ { return usb_state; } //�㲥��Ȩ private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { //usb �豸���� ��Ȩ public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if(device != null) { stm32_device = device; usb_permisson=true; } else { usb_permisson=false; return; } } } } } }; }