[Tinyos-help] Problem with modified Oscilloscope
Michael Schippling
schip at santafe.edu
Thu Nov 1 16:45:52 PDT 2007
I have often charged exorbitant amounts to design, write,
and debug systems...so what I suggest is that you look at
the ADC parts of the doc/tutorial, and at how the original
Oscope program gets it's data.
What the memcpy() thing appears to be doing is copying
a message 'payload' from whatever "local" is into the
"sendbuf" data area and then sending it over the radio.
However I think there are some missing parens and it
should be sizeof(local), but maybe they are optional.
MS
Alessandro Turella wrote:
> Michael Schippling ha scritto:
>
>> 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
>>
> What do you suggest? can you correct the code attached please?
> can you explain to me this 2 lines please?
> memcpy(call AMSend.getPayload(&sendbuf), &local, sizeof local);
> if (call AMSend.send(0, &sendbuf, sizeof local) == SUCCESS)
>
>>
>> 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 1 Nov07 - SIGN2.DEF 1 Nov07 - MACRO.DEF 1 Nov07
> 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 1 Nov07 - SIGN2.DEF 1 Nov07 - MACRO.DEF 1 Nov07
> 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