Hi,

I want to transfer data from tinyos to java. To start the process is send 
rcm->counter & 0x13. Why is it only possible to start the process once???
Can LogWrite.erase() only called once?

Regards,
Gerald

#include "Timer.h"
#include "TestSerial.h"
#include <printf.h>

#define NUMBER_LOG_VALUES 500

module TestSerialC {
  uses {
    interface SplitControl as Control;
    interface Leds;
    interface Boot;
    interface Receive;
    interface AMSend;
    interface Timer<TMilli> as MilliTimer;
    interface Timer<TMilli> as InitTimer;
    interface Packet;
    interface LogRead;
    interface LogWrite;
  }
}
implementation {

  message_t packet;

  bool locked = FALSE;
  uint16_t counter = 0;
  
  bool busy = FALSE;
  bool logBusy = FALSE;
  uint16_t readings = 0;
  uint16_t data = 0;

  event void Boot.booted() {
    call Control.start();
  }
  
  task void initLogWrite() {
    if (!logBusy)
    {
      logBusy = TRUE;

      if(readings == NUMBER_LOG_VALUES)
      {
        call LogRead.read(&data, sizeof(data));
      }
      else
      //if (readings < NUMBER_LOG_VALUES)
      {
        call LogWrite.append(&readings, sizeof(readings));
        readings++;
      }
    }
  }

  event void MilliTimer.fired() {
  }
  event void InitTimer.fired() {
  }

  event message_t* Receive.receive(message_t* bufPtr, 
                                   void* payload, uint8_t len) {
    if (len != sizeof(test_serial_msg_t)) {return bufPtr;}
    else {
      test_serial_msg_t* rcm = (test_serial_msg_t*)payload;
      
      // if TestSerial.java is started we clear the flash memory
      if (rcm->counter & 0x13) {
        busy = FALSE; 
        logBusy = FALSE;
        call LogWrite.erase();
      }
      // we initialize the flash memory
      //else if (rcm->counter & 0x14) {
      //  post initLogWrite();
      //}
      // we read the flash memory
      //else if (rcm->counter & 0x15) {
      //  call LogRead.read(&data, sizeof(data));
      //}
      return bufPtr;
    }
  }

  event void Control.startDone(error_t err) {
    if (err == SUCCESS) {
    }
  }
  event void Control.stopDone(error_t err) {}

  task void sendTask() {
    if (!busy)
      {
        test_serial_msg_t* rcm = (test_serial_msg_t*)call 
Packet.getPayload(&packet, sizeof(test_serial_msg_t));
        if (rcm == NULL) {return;}
        if (call Packet.maxPayloadLength() < sizeof(test_serial_msg_t)) {
          return;
        }

        rcm->counter = data;
        if (call AMSend.send(AM_BROADCAST_ADDR, &packet, 
sizeof(test_serial_msg_t)) == SUCCESS) {
          busy = TRUE;
        }
      }
  }

  event void AMSend.sendDone(message_t* bufPtr, error_t error) {
    if(error == SUCCESS) {  
      if (&packet == bufPtr) {
        busy = FALSE;
        call LogRead.read(&data, sizeof(data));
      }
    }
  }

  event void LogRead.readDone(void* buf, storage_len_t len, error_t err) {
    if (err == SUCCESS) {
      if (len == sizeof(data)) {
        post sendTask();
      }
    }
  }

  event void LogWrite.eraseDone(error_t result) {
    post initLogWrite();
  }

  event void LogWrite.appendDone(void* buf, storage_len_t len, 
                                 bool recordsLost, error_t err) {
    if (err == SUCCESS)
      call LogWrite.sync();
  }

  event void LogRead.seekDone(error_t err) {
  }

  event void LogWrite.syncDone(error_t err) {
    logBusy = FALSE;
    post initLogWrite();
  }
}
-- 
GMX DSL Doppel-Flat ab 19,99 Euro/mtl.! Jetzt mit 
gratis Handy-Flat! http://portal.gmx.net/de/go/dsl
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to