IOIO Connection problems

101 views
Skip to first unread message

Iovine Francesco

unread,
Aug 28, 2015, 3:40:37 AM8/28/15
to ioio-users
Hi Ytai,
wonderful environment that of IOIO. Congrats!

For my purposes I bought two boards from sparkfun and this is the configuration I use.

IOIOLib: IOIO0505
Application firmware: IOIO0500
Bootloader firmware: IOIO0401
Hardware: SPRK0020

I have already written an app interfacing to a board developed by me using an USB->serial converter (FDDI chip) that needs OTG.
As I need to power my tablet from USB, I decided to use IOIO like a USB->UART interface to my board that additionally powers the tablet in HOST mode.

As an introductory exercise, I developed a simple app called TerminalIOIO ( https://github.com/fjovine/TerminalIOIO ) that works fine, at least during the normal
compile, install cycle. I was using the Blutooth and, as I wanted to study your code, I compiled the IOIO classes directly in my AndroidStudio project.

Then I started integrating your code in my App and it worked fine in the normal AndroidStudio compile, install cycle and direct USB connection.

But when I try to use it directly on the tablet (no compilation before) I have the following problem. I switch the power on: this powers both my board and IOIO.
The tablet notifies the presence of an accessory USB and launches my app that sometimes is able to configure the IOIO and successfully performs the handshake with my board but very frequently it hangs.
I used a different type of tablet having the same problems.
Then I used my smart phone (alcatel onetouch) and again sometimes the handshake works, sometimes not.

I thought that I had some compilation problems, so I downloaded the pre-compiled HelloIOIO-debug-unaligned.apk from App-IOIO0505.zip and I launched it in all the possible configurations (two tablets and phone), experimenting always the same random behavior:
I always get the notification (AccessoryUSB) but very frequently no connection happens.

I decided to instrument a bit your code with some logging comments, the most significant of which is inside the run method in the IOIOProtocol class.
Here is the code: LocalLogger.i is a static method that doubles messages both on Android Logger and queue them up to be shown through http (I have a small http server running for remote manipulations)
The message in Italian means "character received".

...
@Override
public void run() {
 
super.run();
  setPriority
(MAX_PRIORITY);
 
int arg1;
 
int arg2;
 
int numPins;
 
int size;
 
byte[] data = new byte[256];
 
try {
   
while (true) {
                arg1
= readByte();
               
LocalLogger.i(TAG, "Ricevuto carattere "+Integer.toHexString(arg1));   //<-----------------------------
     
switch (arg1) {
     
case ESTABLISH_CONNECTION:
       
if (readByte() != 'I' || readByte() != 'O' || readByte() != 'I'
           
|| readByte() != 'O') {
         
throw new IOException("Bad establish connection magic");
       
}
       
byte[] hardwareId = new byte[8];
       
byte[] bootloaderId = new byte[8];
       
byte[] firmwareId = new byte[8];
        readBytes
(8, hardwareId);
        readBytes
(8, bootloaderId);
        readBytes
(8, firmwareId);
...
 
 Attached you will find two logs (in OpenOffice spreasheet format) that show what happens.
 Focusing the bytes received from IOIO, this is the sequence I have when the connection works
 
  1.  0x0 - ESTABLISH_CONNECTION
  2.  0x2 - CHECK_INTERFACE
  3.  0xD - UART_CONFIG
  4.  0xF - PIN_UART
 
 And this makes perfectly sense with what I need.
 
  This is the sequence when the connection is not established
 
  1.  0x0 - ESTABLISH_CONNECTION
  2.  0x1 - SOFT_RESET
  3.  0x0 - ESTABLISH_CONNECTION
  4.  0x1 - SOFT_RESET
 
 Sometimes something different happens
  •  0x1 - SOFT_RESET
  •  0x0 - HARD_RESET
  •  0x1 - SOFT_RESET
  •  0x1 - SOFT_RESET
  •  0x1 - SOFT_RESET
 
Whenever ESTABLISH_CONNECTION is received, the firmware versions from IOIO are correctly decoded.
But the reception of the SOFT_RESET keeps the connection hanged.
 
If the first received command is SOFT_RESET, I see the exception
 
 Protocol error:
[ioio.lib.impl.IOIOProtocol$ProtocolError: java.lang.NullPointerException
at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:944)
Caused by: java.lang.NullPointerException
at ioio.lib.impl.IncomingState.handleSoftReset(IncomingState.java:243)
at ioio.lib.impl.IOIOProtocol$IncomingThread.run(IOIOProtocol.java:733) ]

that I have found in other messages on this forum: this depends on the fact that when 0x1 (soft_reset) is received the protocol tries to access some objects that have still not been instantiated.

I made at least a whole week of experimentation with different conditions, using both the IOIO boards I own, but the result is more or less this one: when I cannot connect the SOFT_RESET is there.

As additional info, I have never had this problem after switching off the ADB USB interface, as needed while developing (Android Studio connected)

So I am blocked. Can you please help me?
Thanks in advance.


Additional info

Tablet 1: Low cost tablet running Android 4.2.2
Tablet 2: Low cost tablet running Android 4.4.2
Phone: Alcatel One touch running Android 4.1.1

NOK_ACCENSIONE_02.ods
NOK_ACCENSIONE_03.ods
OK_ACCENSIONE_03.ods

Ytai Ben-Tsvi

unread,
Aug 29, 2015, 12:36:06 PM8/29/15
to ioio-...@googlegroups.com

Can you check if this is happening to you when using v5.04 software? v5.05 has not yet been rigorously tested. You can use the precompiled binaries initially.

--
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+...@googlegroups.com.
To post to this group, send email to ioio-...@googlegroups.com.
Visit this group at http://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.

Iovine Francesco

unread,
Aug 29, 2015, 12:56:36 PM8/29/15
to ioio-users
I will ASAP.
Thanks a lot.

Iovine Francesco

unread,
Aug 30, 2015, 8:38:29 AM8/30/15
to ioio-users
I downloaded library 5.4, tested it in my android code but the problems continued.
I installed the precompiled HalloIOIO.apk app version 5.4 but nothing changed.

I tried one more thing: removed all the accessory aware apps and tried to power off/power on the IOIO: the protocol works perfectly and *always* I get the popup from Android showing the "https://github.com/ytai/ioio/wiki/ADK" url so at least the accessory handshake works correctly, although the problems I documented are later on the protocol sequence.

Quick question: is there a firmware version in DEBUG_MODE available? It would be useful, otherwise I have to set all the PIC compilation environment up. Following the sequence of debugging messages on a serial line would be very useful.

Thanks in advance.

Ytai Ben-Tsvi

unread,
Aug 30, 2015, 12:28:09 PM8/30/15
to ioio-...@googlegroups.com
I tested both 5.04 and 5.05 in accessory mode yesterday and everything works OK on my setup. Is this possibly a power supply problem, either having a poor supply or having the trim-pot on the IOIO not fully clockwise?
I can imagine how transients on the power line might cause protocol corruption.

And no, I don't currently have a debug build available. It's a good idea!

Iovine Francesco

unread,
Sep 2, 2015, 4:51:19 PM9/2/15
to ioio-users
Last update. I managed to recompile the firmware using MPLAB X and XC16, to download it and... everything works perfectly. I guess sparkfun uses some weird firmware image.
Anyway my problems seem over: I switch my instrument on, and this powers on both my board and the IOIO  together, and the tablet always handshakes correctly.

Thanks for your help
Cheers.

Ytai Ben-Tsvi

unread,
Sep 2, 2015, 5:02:03 PM9/2/15
to ioio-...@googlegroups.com
That's super weird, but as long as things work now, I cannot argue... Sorry for your trouble, at least you've hopefully learned something new in the process :)
Reply all
Reply to author
Forward
0 new messages