IOIO Protocol Error and severe reliability issue

59 views
Skip to first unread message

Et Dev

unread,
Oct 30, 2017, 2:43:41 PM10/30/17
to ioio-users
Hello Ytai,

I am using IOIO bluetooth interface connected to my app running on Samsung Note 4 device (other devices Note3/2 and S3 all have same issues too). Inspite of devices being in close proximity and no other possible interference (signal-free facility), I do see sporadic IOIO library notifying of disconnects. On closer inspection, it seems a protocol error which somehow manifests into a disconnect. There are times when there is no such disconnect for more than 20 minutes and there are times when the disconnect happens within a minute. Moreover, once the disconnect happens, it keeps on disconnecting frequently - usually within a minute. Here is a summary trace of the logcat dump of the failure (- see complete trace at end of this mail).

10-28 19:46:12.519 13132 13882 E IOIOProtocol: Protocol error: 
10-28 19:46:12.519 13132 13882 E IOIOProtocol: ioio.lib.impl.IOIOProtocol$ProtocolError: Received unexpected command: 0xff
10-28 19:46:12.519 13132 13882 E IOIOProtocol:  at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:928)
10-28 19:46:12.529 13132 13882 D IOIOImpl: Physical disconnect.
10-28 19:46:12.529 13132 13882 V BluetoothIOIOConnection: Client initiated disconnect

Hardware Configuration:
Project uses IOIO [Hardware ID: SPRK0020 Bootloader ID: IOIO0401 Firmware ID: IOIO0506] in following configuration:
     15 digital output pins  [Open-Drain]: 3, 6, 7, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24
       6 analog input pins: 41,42, 43, 44, 45, 46
      3 TWI sets  [100KHz]: 1, 2, 4, 5, 25, 26

Application processing:
  • [Re]Connect-setup: MyService extends IOIOService. In createIOIOLooper(String connectionType, Object extra), it checks if connection-type is bluetooth and creates an IOIOLooper. Setup in this looper instantiates DigitalOutput, AnalogInput and TwiMaster. Henceforth, loop() does Thread.sleep(500). All the digital outputs are also set to false state. The IOIO board and these controls are saved by the service for future use. If this is a reconnect, old IOIO board and controls are discarded and new board and controls take their place.
  • Monitor-input: Once application is ready, application starts three threads - each monitoring a two AnalogInput in a loop with a sleep of 10secs in loop and 1 sec between the two inputs. These threads may be started either as part of IOIOLooper.setup processing (if app is ready) or later by application UI thread (if app gets ready later on). The TWI devices may be used in lieu of the Analog-inputs here but I have disabled them for now.
  • Operate-outputs: A thread-pool performs application processing and based on application business logic, worker pool threads operate the DigitalOutputs.
  • Disconnect-cleanup: On disconnect, MyService discards the IOIO board and the DigitalOutput, AnalogInput and TwiMaster(100KHz).
Additional Observations:
  • Disabling the Operate-outputs does not have any effect - IOIO still disconnects.
  • Disabling the Monitor-input and Operate-outputs seems to eliminate disconnects. The IOIO board is essentially left unused for extended period.
  • Once the protocol error happens, the application keeps getting frequent disconnects (within a minute).
  • Completely stopping the application and restarting the application can sometimes prolong the disconnect - however, this is not always true.
  • I have disabled the TWI sets for now as they seem to make debugging harder and more unpredictable. 
Request: 
  • Please help me identify what may cause these protocol errors and recommend a way to debug these diisconnects.
  • Do you recommend changes in my application structure that can improve the reliability - stopping/restarting some threads, consolidating some threads etc.
  • Is there a way to resume operation reliably after a disconnect?
Complete Logcat filtered for IOIO:
10-28 19:38:30.459 13132 13132 I IOIOBaseApplicationHelper: Using IOIOLib version: IOIO0507
10-28 19:38:30.459 13132 13132 D IOIOConnectionRegistry: Successfully added bootstrap class: ioio.lib.impl.SocketIOIOConnectionBootstrap
10-28 19:38:30.479 13132 13132 D IOIOConnectionRegistry: Successfully added bootstrap class: ioio.lib.android.accessory.AccessoryConnectionBootstrap
10-28 19:38:30.529 13132 13132 D IOIOConnectionRegistry: Successfully added bootstrap class: ioio.lib.android.bluetooth.BluetoothIOIOConnectionBootstrap
10-28 19:38:30.549 13132 13132 D IOIOConnectionRegistry: Successfully added bootstrap class: ioio.lib.android.device.DeviceConnectionBootstrap
10-28 19:38:31.219 13132 13791 D IOIOImpl: Waiting for IOIO connection
10-28 19:38:31.229 13132 13791 V IOIOImpl: Waiting for underlying connection
10-28 19:38:31.279 13132 13791 V BluetoothIOIOConnection: Attempting to connect to Bluetooth device: IOIO (8A:22)
10-28 19:38:32.859 13132 13791 V BluetoothIOIOConnection: Established connection to device IOIO (8A:22) address: 00:1B:DC:06:8A:22
10-28 19:38:32.869 13132 13791 V IOIOImpl: Waiting for handshake
10-28 19:38:32.869 13132 13882 I IncomingState: IOIO Connection established. Hardware ID: SPRK0020 Bootloader ID: IOIO0401 Firmware ID: IOIO0506
10-28 19:38:32.889 13132 13791 V IOIOImpl: Querying for required interface ID
10-28 19:38:32.919 13132 13791 V IOIOImpl: Required interface ID is supported
10-28 19:38:32.919 13132 13791 I IOIOImpl: IOIO connection established
10-28 19:38:32.929 13132 13791 D MyApp: Starting IOIO Manager
10-28 19:38:33.119 13132 13791 I MyApp: Started IOIO Managers
10-28 19:46:12.519 13132 13882 E IOIOProtocol: Protocol error: 
10-28 19:46:12.519 13132 13882 E IOIOProtocol: ioio.lib.impl.IOIOProtocol$ProtocolError: Received unexpected command: 0xff
10-28 19:46:12.519 13132 13882 E IOIOProtocol: at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:928)
10-28 19:46:12.529 13132 13882 D IOIOImpl: Physical disconnect.
10-28 19:46:12.529 13132 13882 V BluetoothIOIOConnection: Client initiated disconnect
10-28 19:46:50.119 13132 13791 D MyApp: Stopping IOIO Manager, disconnected=true
10-28 19:46:50.119 13132 13791 I MyApp: Stopped IOIO Manager, disconnected=true
10-28 19:46:50.119 13132 13791 D IOIOImpl: Waiting for IOIO connection
10-28 19:46:50.119 13132 13791 V IOIOImpl: Waiting for underlying connection
10-28 19:46:50.129 13132 13791 V BluetoothIOIOConnection: Attempting to connect to Bluetooth device: IOIO (8A:22)
10-28 19:46:50.789 13132 13791 V BluetoothIOIOConnection: Established connection to device IOIO (8A:22) address: 00:1B:DC:06:8A:22
10-28 19:46:50.789 13132 13791 V IOIOImpl: Waiting for handshake
10-28 19:46:50.789 13132  6282 I IncomingState: IOIO Connection established. Hardware ID: SPRK0020 Bootloader ID: IOIO0401 Firmware ID: IOIO0506
10-28 19:46:50.799 13132 13791 V IOIOImpl: Querying for required interface ID
10-28 19:46:50.829 13132 13791 V IOIOImpl: Required interface ID is supported
10-28 19:46:50.829 13132 13791 I IOIOImpl: IOIO connection established
10-28 19:46:50.829 13132 13791 D MyApp: Starting IOIO Manager
10-28 19:46:51.109 13132 13791 I MyApp: Started IOIO Managers
10-28 19:47:12.509 13132  6282 E IOIOProtocol: Protocol error: 
10-28 19:47:12.509 13132  6282 E IOIOProtocol: ioio.lib.impl.IOIOProtocol$ProtocolError: Received unexpected command: 0xff
10-28 19:47:12.509 13132  6282 E IOIOProtocol: at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:928)
10-28 19:47:12.509 13132  6282 D IOIOImpl: Physical disconnect.
10-28 19:47:12.509 13132  6282 V BluetoothIOIOConnection: Client initiated disconnect
10-28 19:49:12.029 13132 13791 D MyApp: Stopping IOIO Manager, disconnected=true
10-28 19:49:12.029 13132 13791 I MyApp: Stopped IOIO Manager, disconnected=true
10-28 19:49:12.039 13132 13791 D IOIOImpl: Waiting for IOIO connection
10-28 19:49:12.039 13132 13791 V IOIOImpl: Waiting for underlying connection
10-28 19:49:12.049 13132 13791 V BluetoothIOIOConnection: Attempting to connect to Bluetooth device: IOIO (8A:22)
10-28 19:49:12.799 13132 13791 V BluetoothIOIOConnection: Established connection to device IOIO (8A:22) address: 00:1B:DC:06:8A:22
10-28 19:49:12.799 13132 13791 V IOIOImpl: Waiting for handshake
10-28 19:49:12.809 13132 11268 I IncomingState: IOIO Connection established. Hardware ID: SPRK0020 Bootloader ID: IOIO0401 Firmware ID: IOIO0506
10-28 19:49:12.809 13132 13791 V IOIOImpl: Querying for required interface ID
10-28 19:49:12.819 13132 13791 V IOIOImpl: Required interface ID is supported
10-28 19:49:12.819 13132 13791 I IOIOImpl: IOIO connection established
10-28 19:49:12.819 13132 13791 D MyApp: Starting IOIO Manager
10-28 19:49:13.099 13132 13791 I MyApp: Started IOIO Managers
10-28 19:49:42.419 13132 11268 E IOIOProtocol: Protocol error: 
10-28 19:49:42.419 13132 11268 E IOIOProtocol: ioio.lib.impl.IOIOProtocol$ProtocolError: Received unexpected command: 0x8f
10-28 19:49:42.419 13132 11268 E IOIOProtocol: at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:928)
10-28 19:49:42.419 13132 11268 D IOIOImpl: Physical disconnect.
10-28 19:49:42.419 13132 11268 V BluetoothIOIOConnection: Client initiated disconnect
10-28 19:49:46.989 13132 13791 D MyApp: Stopping IOIO Manager, disconnected=true
10-28 19:49:46.989 13132 13791 I MyApp: Stopped IOIO Manager, disconnected=true
10-28 19:49:46.999 13132 13791 D IOIOImpl: Waiting for IOIO connection
10-28 19:49:46.999 13132 13791 V IOIOImpl: Waiting for underlying connection
10-28 19:49:47.009 13132 13791 V BluetoothIOIOConnection: Attempting to connect to Bluetooth device: IOIO (8A:22)
10-28 19:49:47.239 13132 13791 V BluetoothIOIOConnection: Established connection to device IOIO (8A:22) address: 00:1B:DC:06:8A:22
10-28 19:49:47.239 13132 13791 V IOIOImpl: Waiting for handshake     

Ytai Ben-Tsvi

unread,
Nov 3, 2017, 8:31:17 PM11/3/17
to ioio-...@googlegroups.com
From experience, this behavior sometimes occurs as result of saturating the BT bandwidth with some dongles. Each analog input you open generates an additional ~1.25kB/s of data.
Your options are either:

--
You received this message because you are subscribed to the Google Groups "ioio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ioio-users+unsubscribe@googlegroups.com.
To post to this group, send email to ioio-...@googlegroups.com.
Visit this group at https://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages