[Tinyos-help] Problem with modified Oscilloscope

Michael Schippling schip at santafe.edu
Thu Nov 1 11:39:41 PDT 2007


I'll take a wild guess...

If that Read interface works like the ADC, what probably
happens is that Read.read() starts a "conversion" but
you don't get a result until Read.readDone() fires.
So you probably want to send your result message from
readDone() to get the latest and greatest.

MS


Alessandro Turella wrote:
> Hi guys,
> I have a problem with the following code, I've modified the oscilloscope 
> code, cut the timer and some other counters.
> I'd like to read from the ADC on demand. it seems to work but when i 
> send the command from the java interface i it send me back the value 
> read before;
> 
> I.e.:
> 
> this is the correct cycle of operation of the mote:
> 
> -Boot;
> -activation of the radio;
> 
> when a cmd of type 2 (to read) arrives it should:
> 
> -toggle leds;
> -read from ADC;
> -send a message with actual value to radio;
> 
> well, all works right but the value i receive in the message is an old 
> one..
> I hope to be clear, some one could help me?
> Thanx in advance
> 
> Alessandro
> 
> ################## CODE SNIPPET ##############################
> 
> #include "Oscilloscope.h"
> 
> module OscilloscopeC
> {
>  uses {
>    interface Boot;
>    interface SplitControl as RadioControl;
>    interface AMSend;
>    interface Receive;
>    //interface Timer<TMilli>;
>    interface Read<uint16_t>;
>    interface Leds;
>  }
> }
> implementation
> {
>  message_t sendbuf;
>  bool sendbusy;
> 
>  /* Current local state - interval, version and accumulated readings */
>  oscilloscope_t local;
> 
>  uint8_t reading; /* 0 to NREADINGS */
> 
>  /* When we head an Oscilloscope message, we check it's sample count. If
>     it's ahead of ours, we "jump" forwards (set our count to the received
>     count). However, we must then suppress our next count increment. This
>     is a very simple form of "time" synchronization (for an abstract
>     notion of time). */
>  bool suppress_count_change;
> 
>  void report_problem() {  // problemi -> Led Rosso
>        call Leds.led0On();    }
> 
>  event void Boot.booted() {
>    local.interval = DEFAULT_INTERVAL;
>    local.id = TOS_NODE_ID;
>    reading = 0;
>    if (call RadioControl.start() != SUCCESS)
>      report_problem();
>  }
> 
>  event void RadioControl.startDone(error_t error) { // faccio partire la 
> radio e poi rimango in attesa del pacchetto di start
>  }
> 
>  event void RadioControl.stopDone(error_t error) {
>  }
> 
>  event message_t* Receive.receive(message_t* msg, void* payload, uint8_t 
> len) {
>    oscilloscope_t *omsg = payload;
>               if (omsg->cmd == 0) // toggle leds to show a stop signal
>        {
>           call Leds.led0On();
>           call Leds.led1Off();
>           call Leds.led2Off();                        return msg;
>        }
>     if (omsg->cmd == 2) // read ADC and send radio msg
>        {
>           call Leds.led0Off();
>           call Leds.led1On();
>           call Leds.led2On();
>           if (call Read.read() == SUCCESS)                {
>                   // if (!sendbusy && sizeof local <= call 
> AMSend.maxPayloadLength())                   //     {
>                            memcpy(call AMSend.getPayload(&sendbuf), 
> &local, sizeof local);
>                            if (call AMSend.send(0, &sendbuf, sizeof 
> local) == SUCCESS)
>                               {
>                                sendbusy = TRUE;
>                               }
>                            else {
>                  //      }
>                  //  if (!sendbusy)
>                       report_problem();
>                       }
>                    reading = 0;
>                    return msg;
>                }
>                return msg;
>        }
>  }
> 
>  event void AMSend.sendDone(message_t* msg, error_t error) {
>    if (error != SUCCESS)
>      report_problem();
>    sendbusy = FALSE;
>  }
> 
>  event void Read.readDone(error_t result, uint16_t data) {
>    if (result != SUCCESS)
>      {
>     data = 0xffff;
>     report_problem();
>      }
>    else {
>     call Leds.led0Off();
>        call Leds.led2Off();
>      }
>    local.readings[reading++] = data;
>  }
> }
> 
> 
> 
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> Scanned with Copfilter Version 0.84beta2 (ProxSMTP 1.6)
> AntiVirus: ClamAV 0.91.2-exp/4659 - Thu Nov  1 17:24:40 2007
> AntiVirus: F-PROT 4.6.7 Engine version: 3.16.15
> SIGN.DEF 31 Oct07 - SIGN2.DEF 31 Oct07 - MACRO.DEF 31 Oct07
> by Markus Madlener @ http://www.copfilter.org
> 
> 
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> Scanned with Copfilter Version 0.84beta2 (ProxSMTP 1.6)
> AntiVirus: ClamAV 0.91.2-exp/4659 - Thu Nov  1 17:24:40 2007
> AntiVirus: F-PROT 4.6.7 Engine version: 3.16.15
> SIGN.DEF 31 Oct07 - SIGN2.DEF 31 Oct07 - MACRO.DEF 31 Oct07
> by Markus Madlener @ http://www.copfilter.org
> 
> _______________________________________________
> Tinyos-help mailing list
> Tinyos-help at Millennium.Berkeley.EDU
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help


More information about the Tinyos-help mailing list