2016-09-06 5 views
0

Приложение принимает данные на USB-порт через CP2102 UART на USB-конвертер на нажатой кнопке. Я могу открыть USB-устройство, прочитать PID, но когда я вставляю фрагмент кода, где открыт последовательный порт, сбой приложений. Кто-нибудь знает, в чем проблема? (CP2102 library used)CP2102 Сбой приложений для Android

public class MainActivity extends AppCompatActivity { 

private ToggleButton toggle; 
private TextView textView; 
private Toolbar toolbar; 
private UsbSerialDevice serialPort; 
private UsbManager usbManager; 
private UsbDevice device; 
private UsbDeviceConnection connection; 


private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() 
{ 
    @Override 
    public void onReceivedData(byte[] arg0) 
    { 
     // Code here 

    } 
}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    textView =(TextView) findViewById(R.id.textView); 
    toggle = (ToggleButton) findViewById(R.id.toggleButton); 
    setSupportActionBar(toolbar); 


    usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    device = null; 
    connection = null; 
    HashMap<String, UsbDevice> usbDevices = usbManager.getDeviceList(); 

    if(!usbDevices.isEmpty()) 
    { 
     boolean keep = true; 
     for(Map.Entry<String, UsbDevice> entry : usbDevices.entrySet()) 
     { 
      device = entry.getValue(); 
      int deviceVID = 0; 
      deviceVID = device.getVendorId(); 
      int devicePID = device.getProductId(); 
      if(deviceVID != 0x1d6b || (devicePID != 0x0001 || devicePID != 0x0002 || devicePID != 0x0003)) 
      { 
       // We are supposing here there is only one device connected and it is our serial device 
       connection = usbManager.openDevice(device); 
       textView.append("\nConnected USB Device ID:"); 
       textView.append(Integer.toString(deviceVID)); 

       serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection); 

       keep = false; 
      }else 
      { 
       connection = null; 
       device = null; 
      } 

      if(!keep) 
       break; 
     } 
    } 






    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      if (isChecked) { 
       textView.append("\nLogging Started!\n"); 

       if(serialPort != null) 
       { 
        if(serialPort.open()) 
        { 
         // Devices are opened with default values, Usually 9600,8,1,None,OFF 
         // CDC driver default values 115200,8,1,None,OFF 

         textView.setText("Serial port opened"); 
         serialPort.setBaudRate(115200); 
         serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8); 
         serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1); 
         serialPort.setParity(UsbSerialInterface.PARITY_NONE); 
         serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF); 
         serialPort.read(mCallback); 
        }else 
        { 
         // Serial port could not be opened, maybe an I/O error or it CDC driver was chosen it does not really fit 
         textView.setText("Could not open port"); 
        } 
       }else 
       { 
        // No driver for given device, even generic CDC driver could not be loaded 
        textView.setText("No driver"); 
       } 

      } else { 

       textView.append("Logging Stopped!"); 
      } 
     } 
    }); 

} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

} 
+0

Что делает Android-монитор в Android Studio? Какую версию Android вы используете? Дополнительная информация поможет. – andred

+0

Я не вижу, что делает Android Monitor, потому что я должен отключить USB-кабель и подключить CP2102. Я использую 6.0.1 Android vesrion – Nikson

+0

Насколько ваше устройство и ваша машина разработки находятся в одной сети, вы можете подключать adb через сеть. Это описано здесь http://stackoverflow.com/q/2604727/589216 – andred

ответ

0

Проблема заключалась в не получении разрешения (Android 6.0), но это было немного вводит в заблуждение, потому что можно было читать продукта и поставщика идентификатор CP2102 без получения разрешения.

Смежные вопросы