I have a cordova 6 app for android, where I want to communicate with an Arduino, that is connected with USB. For this I use the cordovaarduino-Plugin, which uses usb-serial-for-android
Unfortunately I have a problem with my setup. Requesting permission works, but as soon as I try to actually open the serial connection, I see a Java-exception in the adb logcat
: java.io.IOException: Error queueing request
This means after I call serial.open
neither the success, not the error-callback is called.
My android device: - Android 5.1.1 - Allwinner A33 Chipset
My serial devices: - Arduino Uno or Arduino Nano - Connected with usb to the Android
My Javascript-Code:
myApp.serial = {
initialize: function(){
// Arduino Nano China 1a86:7523
// Arduino Uno original 2a03:0043
var serial_device = {vid: '2a03',
pid: '0043',
//driver: 'CdcAcmSerialDriver'
//driver: 'Ch34xSerialDriver'
//driver: 'Cp21xxSerialDriver'
//driver: 'FtdiSerialDriver'
//driver: 'ProlificSerialDriver'
};
serial.requestPermission( serial_device, this.initialize_success, this.initialize_error);
},
initialize_success: function(){
toLog("Serial initialized", 4);
var opts = { baudRate: 9600 };
serial.open(opts, this.open_success, this.open_error);
},
initialize_error: function(){
toLog("Error initializing serial!", 1);
},
open_success: function(){
toLog("Serial connectino opened", 4);
serial.registerReadCallback(this.on_serial_read, this.on_serial_read_error);
},
open_error: function(){
toLog("Error opening serial connection!", 1);
}
}
adb logcat
D/Serial ( 3010): Action: requestPermission
D/UsbBroadcastReceiver( 3010): Permission to connect to the device was accepted!
I/chromium( 3010): [INFO:CONSOLE(3)] "Serial initialized", source: file:///android_asset/www/assets/javascripts/myapp.min.js (3)
D/Serial ( 3010): Action: openSerial
D/CdcAcmSerialDriver( 3010): claiming interfaces, count=2
D/CdcAcmSerialDriver( 3010): Control iface=UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=2,mSubclass=2,mProtocol=1,mEndpoints=[
D/CdcAcmSerialDriver( 3010): UsbEndpoint[mAddress=130,mAttributes=3,mMaxPacketSize=8,mInterval=255]]
D/CdcAcmSerialDriver( 3010): Control endpoint direction: 128
D/CdcAcmSerialDriver( 3010): Claiming data interface.
D/CdcAcmSerialDriver( 3010): data iface=UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=10,mSubclass=0,mProtocol=0,mEndpoints=[
D/CdcAcmSerialDriver( 3010): UsbEndpoint[mAddress=4,mAttributes=2,mMaxPacketSize=64,mInterval=1]
D/CdcAcmSerialDriver( 3010): UsbEndpoint[mAddress=131,mAttributes=2,mMaxPacketSize=64,mInterval=1]]
D/CdcAcmSerialDriver( 3010): Read endpoint direction: 128
D/CdcAcmSerialDriver( 3010): Write endpoint direction: 0
D/CdcAcmSerialDriver( 3010): Async reads enabled
D/UsbRequestJNI( 3010): close
D/UsbRequestJNI( 3010): init
D/UsbRequestJNI( 3010): close
D/Serial ( 3010): Serial port opened!
I/Serial ( 3010): Stopping io manager.
I/SerialInputOutputManager( 3010): Stop requested
I/Serial ( 3010): Starting io manager.
W/SerialInputOutputManager( 3010): Run ending due to exception: Error queueing request.
W/SerialInputOutputManager( 3010): java.io.IOException: Error queueing request.
W/SerialInputOutputManager( 3010): at com.hoho.android.usbserial.driver.CdcAcmSerialDriver$CdcAcmSerialPort.read(CdcAcmSerialDriver.java:168)
W/SerialInputOutputManager( 3010): at com.hoho.android.usbserial.util.SerialInputOutputManager.step(SerialInputOutputManager.java:159)
W/SerialInputOutputManager( 3010): at com.hoho.android.usbserial.util.SerialInputOutputManager.run(SerialInputOutputManager.java:141)
W/SerialInputOutputManager( 3010): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
W/SerialInputOutputManager( 3010): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/SerialInputOutputManager( 3010): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/SerialInputOutputManager( 3010): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/SerialInputOutputManager( 3010): at java.lang.Thread.run(Thread.java:818)
D/Serial ( 3010): Runner stopped.
I/SerialInputOutputManager( 3010): Stopped.
I/SerialInputOutputManager( 3010): Running ..
D/UsbRequestJNI( 3010): init
None of the drivers seems to work. The logcat-messages are slightly different though.
Does this mean, my android device is not supported, or is there something that I can try?