[Tinyos-help] Problem with modified Oscilloscope
Alessandro Turella
alessandro.turella at venetaengineering.it
Thu Nov 1 15:20:09 PDT 2007
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: alessandro.turella.vcf
Type: text/x-vcard
Size: 392 bytes
Desc: not available
Url : https://www.millennium.berkeley.edu/pipermail/tinyos-help/attachments/20071101/3b75f8ed/alessandro.turella.vcf
More information about the Tinyos-help
mailing list