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();
}
Android Studio의 Android 모니터는 무엇인가요? 어떤 Android 버전을 사용하십니까? 좀 더 많은 정보가 도움이 될 것입니다. – andred
USB 케이블을 분리하고 CP2102를 연결해야하기 때문에 안드로이드 모니터가 무엇인지 알 수 없습니다. 6.0.1을 사용합니다. Android vesrion – Nikson
장치와 개발 컴퓨터가 동일한 네트워크에있는 한 네트워크를 통해 adb를 연결할 수 있습니다. 이 내용은 http://stackoverflow.com/q/2604727/589216에 설명되어 있습니다. – andred