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