Advertisement
Guest User

Untitled

a guest
Jun 16th, 2016
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.77 KB | None | 0 0
  1. package ru.exponenta.mubotcontroller;
  2.  
  3. import android.app.PendingIntent;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.hardware.usb.UsbDevice;
  9. import android.hardware.usb.UsbDeviceConnection;
  10. import android.hardware.usb.UsbManager;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.view.View;
  15. import android.widget.Button;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18.  
  19. import com.felhr.usbserial.UsbSerialDevice;
  20. import com.felhr.usbserial.UsbSerialInterface;
  21.  
  22. import java.nio.ByteBuffer;
  23. import java.util.HashMap;
  24. import java.util.Map;
  25.  
  26. public class FullscreenActivity extends AppCompatActivity{
  27.  
  28.     //devices PID, VID
  29.     private final int[][] devicesFilter = {{1659, 8963}};
  30.     private final String TAG = "MuBot";
  31.     private static final String ACTION_USB_PERMISSION = "ru.exponenta.mubotcontroller.USB_PERMISSION";
  32.     //
  33.     private int InBufferSize = 192;
  34.     private ByteBuffer inBuffer;
  35.  
  36.     private int BoundRate = 9600;
  37.  
  38.     private Button connect_Button;
  39.     private Button disconnect_Button;
  40.  
  41.     private PendingIntent mPermissionIntent;
  42.     private TextView input_Text;
  43.     private UsbManager usbManager;
  44.     private UsbDevice device;
  45.     private UsbDeviceConnection connection = null;
  46.     private UsbSerialDevice serialPort;
  47.     private HashMap<String, UsbDevice> usbDevices;
  48.  
  49.     private UsbSerialInterface.UsbReadCallback mCallback;
  50.  
  51.     @Override
  52.     protected void onCreate(Bundle savedInstanceState) {
  53.         super.onCreate(savedInstanceState);
  54.         setContentView(R.layout.activity_fullscreen);
  55.  
  56.         connect_Button = (Button) findViewById(R.id.ConnectButton);
  57.         disconnect_Button = (Button) findViewById(R.id.DisconnectButton);
  58.         input_Text = (TextView) findViewById(R.id.InputText);
  59.  
  60.         inBuffer = ByteBuffer.allocate(InBufferSize);
  61.  
  62.         usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
  63.         mCallback = new UsbSerialInterface.UsbReadCallback()
  64.         {
  65.             @Override
  66.             public void onReceivedData(byte[] arg0)
  67.             {
  68.                 inBuffer.put(arg0);
  69.                 input_Text.append(new String(arg0));
  70.             }
  71.         };
  72.  
  73.  
  74.         BroadcastReceiver receiver = new BroadcastReceiver() {
  75.             @Override
  76.             public void onReceive(Context context, Intent intent) {
  77.                 String action = intent.getAction();
  78.  
  79.                 if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
  80.                     synchronized (this) {
  81.                         UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
  82.                         if (device != null) {
  83.                             onDisconnectClick(null);
  84.                             Log.i(TAG, "Broadcast. Disconnected " + device.getDeviceName());
  85.                         }
  86.                     }
  87.                 } else if(UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
  88.  
  89.                     synchronized (this) {
  90.                         UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
  91.  
  92.                         if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
  93.                             if (device != null) {
  94.  
  95.                                 onDeviceConnected(device);
  96.                                 Log.i(TAG, "Broadcast. Connected " + device.getDeviceName());
  97.                             }
  98.                         }
  99.                         else {
  100.                             Log.d(TAG, "permission denied for device " + device);
  101.                         }
  102.  
  103.                     }
  104.                 } else if(ACTION_USB_PERMISSION.equals(action)){
  105.                     synchronized (this){
  106.                         UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
  107.  
  108.                         if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
  109.                             if(device != null){
  110.                                 onDeviceConnected(device);
  111.                             }
  112.                         }
  113.                         else {
  114.                             Log.d(TAG, "permission denied for device " + device);
  115.                         }
  116.  
  117.                     }
  118.                 }
  119.             }
  120.         };
  121.  
  122.         IntentFilter filter = new IntentFilter();
  123.         filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
  124.         filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
  125.         filter.addAction(ACTION_USB_PERMISSION);
  126.         registerReceiver(receiver, filter);
  127.  
  128.         mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
  129.                 ACTION_USB_PERMISSION), 0);
  130.         //IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
  131.         registerReceiver(receiver, filter);
  132.     }
  133.  
  134.     @Override
  135.     protected void onPostCreate(Bundle savedInstanceState) {
  136.         super.onPostCreate(savedInstanceState);
  137.     }
  138.  
  139.     public  void onDisconnectClick(View v) {
  140.  
  141.         if(serialPort != null) {
  142.             serialPort.close();
  143.  
  144.             if (connection != null) {
  145.                 connection.close();
  146.                 connection = null;
  147.                 device = null;
  148.             }
  149.  
  150.             connect_Button.setEnabled(true);
  151.             disconnect_Button.setEnabled(false);
  152.             Toast.makeText(this, "Disconnected!", Toast.LENGTH_SHORT).show();
  153.         }
  154.     }
  155.  
  156.     private boolean isContains(int vid, int pid){
  157.         for (int[] s: devicesFilter) {
  158.             if(s[0] ==  vid && s[1] == pid)
  159.                 return true;
  160.         }
  161.         return false;
  162.     }
  163.  
  164.     public void onConnectClick(View v){
  165.         usbDevices = usbManager.getDeviceList();
  166.         if(!usbDevices.isEmpty())
  167.         {
  168.             for(Map.Entry<String, UsbDevice> entry : usbDevices.entrySet())
  169.             {
  170.                 usbManager.requestPermission(device, mPermissionIntent);
  171.                 //device = entry.getValue();
  172.                 //onDeviceConnected(device);
  173.             }
  174.         }
  175.     }
  176.  
  177.     private void onDeviceConnected(UsbDevice device){
  178.  
  179.         int deviceVID = device.getVendorId();
  180.         int devicePID = device.getProductId();
  181.  
  182.         if(isContains(deviceVID, devicePID) && openSerialPort(device)) {
  183.  
  184.             Toast.makeText(this,"Connected" + device.getDeviceName(), Toast.LENGTH_SHORT).show();
  185.  
  186.             disconnect_Button.setEnabled(true);
  187.             connect_Button.setEnabled(false);
  188.  
  189.             Log.i(TAG, "Connected " + device.getDeviceName());
  190.  
  191.         }else{
  192.             connection = null;
  193.             device = null;
  194.         }
  195.     }
  196.  
  197.     private boolean openSerialPort(UsbDevice device) {
  198.  
  199.         connection = usbManager.openDevice(device);
  200.         serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection);
  201.  
  202.         if(serialPort != null)
  203.         {
  204.             if(serialPort.open())
  205.             {
  206.                 serialPort.setBaudRate(BoundRate);
  207.                 serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);
  208.                 serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1);
  209.                 serialPort.setParity(UsbSerialInterface.PARITY_NONE);
  210.                 serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF);
  211.                 serialPort.read(mCallback);
  212.  
  213.                 return true;
  214.             }else {
  215.                 Log.i(TAG,"Serial port open error!");
  216.                 return false;
  217.             }
  218.         }else{
  219.  
  220.             Log.i(TAG,"Serial port open error!");
  221.             return false;
  222.         }
  223.     }
  224.  
  225.     @Override
  226.     protected void onResume() {
  227.         super.onResume();
  228.  
  229.     }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement