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-stops-i2c-bluetooth-communicat
>>>>>>>>>>>>>> ion-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.