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] > <javascript:>> 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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> 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.
