I think I might have found something related to the problem while I was
updating my Firmware files. I saw that all calls with rx_queue in i2c.c
were commented, I don't remember why we did this, but it would explain why
the waitReady() and all calls waiting for an answer through TWI would
crash.
Do you think this would be a possible explanation?
I am continuing to update all my Firmware and Android IOIO libs. I should
be able to give some news about the progress during the week.
Le lundi 23 mars 2015 12:47:50 UTC+1, Vincent Nadon a écrit :
>
> So I tried with the waitReady() and it freezes as soon as I call it...
>
> See code:
>
>> public void onFinish() {
>> iWrite("Read ack? :" + read_ack_bool);
>>
>> try {
>> read_ack = twi.writeReadAsync(addressDSP1, false, stim_off,
>> stim_off.length, null, 0);
>>
>> read_ack_bool = read_ack.waitReady();
>>
>> iWrite("Read ack? :" + read_ack_bool);
>>
>> } catch (ConnectionLostException e) {
>> // TODO Auto-generated catch block
>> e.printStackTrace();
>> } catch (InterruptedException e) {
>> // TODO Auto-generated catch block
>> e.printStackTrace();
>> }
>> iWrite("Stim stopped");
>> }
>
>
> Le lundi 23 mars 2015 11:47:04 UTC+1, Vincent Nadon a écrit :
>>
>> 1. I am using IOIOlib version 3.30, is it considered too old? I am using
>> this version because it is compatible with my firmware in my PIC, according
>> to what you are saying I might have to upgrade everything (PIC firmware and
>> IOIOlib) which might be a bit difficult for me since I have to put back all
>> the modifications I did in the firmware until now. If I have to do it I
>> will do it, but of course I would like to avoid this trouble.
>>
>> 2. I will try that.
>>
>> 3. I need to read the DSP register every 100ms for 10 consecutive reads
>> (total 1 second). Then calculate the average of these register values and
>> show it to the user on the Android UI screen. After that I put the
>> stim_off, to stop the stimuli procedure. In the code I attached I removed
>> the averaging part since I had to give you the minimal code showing the
>> problem. I am open for suggestions to find a better way to do what I need
>> to do.
>>
>>
>> Thanks!
>>
>> Vincent
>>
>> Le lundi 23 mars 2015 06:01:34 UTC+1, Ytai a écrit :
>>>
>>>
>>> 1. Are you using a very old version of IOIOLib? Looks like you're
>>> hitting a bug that has been resolved long ago.
>>> 2. You're not using the result correctly. You should call
>>> waitReady() on it, as well as check the return value for success.
>>> 3. You seem to still be generating a lot of async requests writing
>>> to the same result buffer.
>>>
>>> What are you actually trying to achieve? You seem to be reading data and
>>> then not using it at all. There's probably a better and simpler way to do
>>> what you want.
>>>
>>> On Thu, Mar 19, 2015 at 11:47 AM, Vincent Nadon <[email protected]>
>>> wrote:
>>>
>>>> I printed the LogCat outpout related to the App crash, you can find it
>>>> attached to this post . I don't know exactly what you mean by stack trace,
>>>> I hope it is contained inside the LogCat messages... or did you mean
>>>> another Log file? I am not familiar with all the Logs...
>>>>
>>>> I tried to wait completion of Async() with the returned object as
>>>> follows, but it still crashes before I see message "Stim stopped" because
>>>> of the following twi call which doesn't work :
>>>>
>>>> public class dataRecCountDownTimer extends CountDownTimer {
>>>>> public dataRecCountDownTimer(long startTime, long interval) {
>>>>> super(startTime, interval);
>>>>> }
>>>>> @Override
>>>>> public void onTick(long millisUntilFinished) {
>>>>> try {
>>>>> read_ack = twi.writeReadAsync(addressDSP3, false, RB,
>>>>> RB.length, response,
>>>>> response.length);
>>>>>
>>>>> } catch (ConnectionLostException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> }
>>>>> }
>>>>> @Override
>>>>> public void onFinish() {
>>>>> if(read_ack.equals(1))
>>>>> {
>>>>> try {
>>>>> twi.writeReadAsync(addressDSP1, false, stim_off,
>>>>> stim_off.length, null, 0);
>>>>>
>>>>> } catch (ConnectionLostException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> }
>>>>> iWrite("Stim stopped");
>>>>> }
>>>>> }
>>>>> }
>>>>
>>>>
>>>> When I try with the synchronous method writeRead() it completely
>>>> freezes my Android App:
>>>>
>>>> public class dataRecCountDownTimer extends CountDownTimer {
>>>>> public dataRecCountDownTimer(long startTime, long interval) {
>>>>> super(startTime, interval);
>>>>> }
>>>>> @Override
>>>>> public void onTick(long millisUntilFinished) {
>>>>>
>>>>> try {
>>>>> read_ack = twi.writeRead(addressDSP3, false, RB, RB.length, response,
>>>>> response.length);
>>>>> } catch (ConnectionLostException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> } catch (InterruptedException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> }
>>>>>
>>>>> }
>>>>> @Override
>>>>> public void onFinish() {
>>>>> if(read_ack == true)
>>>>> {
>>>>>
>>>>> try {
>>>>> twi.writeRead(addressDSP1, false, stim_off,
>>>>> stim_off.length, null, 0);
>>>>> } catch (ConnectionLostException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> } catch (InterruptedException e) {
>>>>> // TODO Auto-generated catch block
>>>>> e.printStackTrace();
>>>>> }
>>>>>
>>>>> iWrite("Stim stopped");
>>>>> }
>>>>> }
>>>>> }
>>>>
>>>>
>>>>
>>>> Le mercredi 18 mars 2015 01:24:36 UTC+1, Ytai a écrit :
>>>>>
>>>>> When an Android app crashes, an error message an stack trace gets
>>>>> written to the log. What's in your log?
>>>>> Also, in order to wait for completion just call writeRead() instead of
>>>>> Async(). Another option is using the object returned from Async() to
>>>>> await
>>>>> completion.
>>>>> On Mar 17, 2015 7:22 AM, "Vincent Nadon" <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> So I included back the call of twi to read RB and put it in
>>>>>> "response" buffer (see attached code) to make the App crash. Now, when I
>>>>>> start my timer it starts stim_on and after a few seconds the App
>>>>>> crashes,
>>>>>> in the LogCat I see IOIOthread is exiting.
>>>>>>
>>>>>> Le lundi 16 mars 2015 19:20:13 UTC+1, Vincent Nadon a écrit :
>>>>>>>
>>>>>>> The App doesn't crash anymore when I take out the twi call for RB
>>>>>>> buffer. When it crashes it starts my stim_on (so I hear sounds with my
>>>>>>> device) and then it tells me that Unfortunately the App has stopped. I
>>>>>>> can
>>>>>>> confirm to you tomorrow more precisely how...
>>>>>>>
>>>>>>> How can I make sure to wait for the transaction to complete? with
>>>>>>> delays? I think this might be a problem like you say. Also, you say
>>>>>>> calling
>>>>>>> multiple functions subsequently with calls to twi shouldn't be a
>>>>>>> problem?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Le lundi 16 mars 2015 19:08:39 UTC+1, Ytai a écrit :
>>>>>>>>
>>>>>>>> You should be able to use the entire API concurrently with no
>>>>>>>> problem. It is all thread safe.
>>>>>>>> How exactly does it crash when it does?
>>>>>>>> Also, you seem to be clobbering the "response" buffer from multiple
>>>>>>>> requests and you also seem to be reading from it without waiting for
>>>>>>>> the
>>>>>>>> transaction to complete.
>>>>>>>>
>>>>>>>> On Mon, Mar 16, 2015 at 10:54 AM, Vincent Nadon <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am sorry about that. I understand that debugging a lot of code
>>>>>>>>> is time consuming. Here attached is a version that I debugged step by
>>>>>>>>> step.
>>>>>>>>> I found that I had calls to functions which might call the
>>>>>>>>> twi.writeReadAsync simultaneously, removing these calls made my app
>>>>>>>>> responsive to subsequent calls of my stim_on and stim_off. Moreover,
>>>>>>>>> calling the twi.writeReadAsync for the RB buffer at multiple places
>>>>>>>>> as you
>>>>>>>>> mentioned seemed to cause the App to crash after a second call of my
>>>>>>>>> stim_on and stim_off. Removing all calls to twi.writeReadAsync for
>>>>>>>>> RB
>>>>>>>>> buffer solved the problem for the moment.
>>>>>>>>>
>>>>>>>>> I figured that I need to keep the screen alive (as I used to do)
>>>>>>>>> so that after my Timer is up my stim_off is executed, otherwise it is
>>>>>>>>> not
>>>>>>>>> executed.
>>>>>>>>>
>>>>>>>>> I also have a problem that is persisting, I cannot call my stim_on
>>>>>>>>> with my button on my screen more than 8 times precisely, is that
>>>>>>>>> related to
>>>>>>>>> some buffer or something?
>>>>>>>>>
>>>>>>>>> I would like to know how I can make sure that I can call
>>>>>>>>> the twi.writeReadAsync in multiple functions, sequentially (one after
>>>>>>>>> the
>>>>>>>>> other). For example, DSP_button1(); followed by DSPbutton2(); and
>>>>>>>>> DSPbutton3(); each containing calls of twi.writeReadAsync .
>>>>>>>>>
>>>>>>>>> Thanks again for your help!
>>>>>>>>>
>>>>>>>>> Le samedi 14 mars 2015 00:11:28 UTC+1, Ytai a écrit :
>>>>>>>>>>
>>>>>>>>>> I think you misunderstood what I meant by "minimal code". What I
>>>>>>>>>> meant is that you provide me with minimum code that actually does
>>>>>>>>>> build and
>>>>>>>>>> run and exhibits your problem and that is as small as possible.
>>>>>>>>>> Reading
>>>>>>>>>> through your 300 or so lines of code trying to figure out what's
>>>>>>>>>> going on
>>>>>>>>>> is a pretty time-consuming task. It is very likely that in the
>>>>>>>>>> process of
>>>>>>>>>> trying to strip down your code you'll find out the problem yourself.
>>>>>>>>>> Otherwise, you'd be at least able to explain it more precisely.
>>>>>>>>>>
>>>>>>>>>> As for the asynchronous calls, if you actually care about what's
>>>>>>>>>> in the buffer, you shouldn't share it across concurrent calls.
>>>>>>>>>> Otherwise,
>>>>>>>>>> why are you passing it in the first place?
>>>>>>>>>>
>>>>>>>>>> On Fri, Mar 13, 2015 at 5:04 AM, Vincent Nadon <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> I trimmed it a bit more again, I haven't tested this code
>>>>>>>>>>> because I would have to put some code back in... but it should show
>>>>>>>>>>> the
>>>>>>>>>>> problem. I have shown where "response" is defined in this version.
>>>>>>>>>>> I am
>>>>>>>>>>> comfortable sharing across asynchronous calls since these calls are
>>>>>>>>>>> supposed to be sequential if I see it right and also it is simply a
>>>>>>>>>>> read
>>>>>>>>>>> data buffer.
>>>>>>>>>>>
>>>>>>>>>>> Thanks for further help :)
>>>>>>>>>>>
>>>>>>>>>>> Le jeudi 12 mars 2015 22:00:50 UTC+1, Ytai a écrit :
>>>>>>>>>>>>
>>>>>>>>>>>> Is that really the minimum required, in the sense that anything
>>>>>>>>>>>> you'd remove would make the problem disappear? Also some things
>>>>>>>>>>>> are
>>>>>>>>>>>> missing, e.g. where the response buffer being defined and why are
>>>>>>>>>>>> you
>>>>>>>>>>>> comfortable sharing it across asynchronous calls.
>>>>>>>>>>>> On Mar 12, 2015 7:06 AM, "Vincent Nadon" <[email protected]>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Here is the trimmed down file that should illustrate the
>>>>>>>>>>>>> problem. I think it mainly comes from my threads (timers) and the
>>>>>>>>>>>>> IOIO
>>>>>>>>>>>>> management...
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hope you guys can help me out :)
>>>>>>>>>>>>>
>>>>>>>>>>>>> See attached file!
>>>>>>>>>>>>>
>>>>>>>>>>>>> Le jeudi 12 mars 2015 05:28:13 UTC+1, Ytai a écrit :
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> There's nothing special about the loop() method, it is mostly
>>>>>>>>>>>>>> a convenience feature. You may call IOIO APIs from any thread
>>>>>>>>>>>>>> including the
>>>>>>>>>>>>>> UI thread (which includes all sorts of GUI listeners).
>>>>>>>>>>>>>> The code you posted on stackoverflow doesn't have anything
>>>>>>>>>>>>>> that's related to IOIO on it, so I don't think you'd get much
>>>>>>>>>>>>>> help there. I
>>>>>>>>>>>>>> recommend you to make a copy of your problematic app, trim it
>>>>>>>>>>>>>> down to the
>>>>>>>>>>>>>> bare minimum that illustrates the problem and then post it here.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Mar 11, 2015 at 11:48 AM, Vincent Nadon <
>>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I am having the following problem :
>>>>>>>>>>>>>>> http://stackoverflow.com/questions/28989176/android-app-st
>>>>>>>>>>>>>>> ops-i2c-bluetooth-communication-ioio
>>>>>>>>>>>>>>> and I think it's because all my code to call the
>>>>>>>>>>>>>>> twi.WriteReadAsync is outside the loop() function.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Le mercredi 11 mars 2015 18:55:55 UTC+1, Vincent Nadon a
>>>>>>>>>>>>>>> écrit :
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> How does the Android IOIO App loop() function work? Is
>>>>>>>>>>>>>>>> there a way to create functions in the Looper class which are
>>>>>>>>>>>>>>>> called inside
>>>>>>>>>>>>>>>> this loop() according to a listener on a Button or a Spinner?
>>>>>>>>>>>>>>>> This way it
>>>>>>>>>>>>>>>> would simplify my code since I need to send a lot of twi
>>>>>>>>>>>>>>>> commands in the
>>>>>>>>>>>>>>>> loop() based on the user input in my Android UI Menu.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> 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 [email protected].
>>>>>>>>>>>>>>> To post to this group, send email to
>>>>>>>>>>>>>>> [email protected].
>>>>>>>>>>>>>>> Visit this group at http://groups.google.com/group
>>>>>>>>>>>>>>> /ioio-users.
>>>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>> 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 [email protected].
>>>>>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>>>>>> .
>>>>>>>>>>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>> 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 [email protected].
>>>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>> 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 [email protected].
>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>> 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 [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>> --
>>>> 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 [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/ioio-users.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.