[Tinyos-contrib-commits]
CVS: tinyos-1.x/contrib/shockfish/tools/java_tc65/src/com/shockfish/tinyos/gateway
CldcDataSender.java, NONE, 1.1 ProtocolGateway.java, NONE,
1.1 SenderMessage.java, NONE, 1.1 SenderTask.java, NONE,
1.1 SenderTimerControl.java, NONE, 1.1 TOSBuffer.java, NONE,
1.1 UpdateDate.java, NONE, 1.1 UpdateDateTask.java, NONE, 1.1
rogmeier
rogmeier at users.sourceforge.net
Mon Sep 11 06:40:05 PDT 2006
Update of /cvsroot/tinyos/tinyos-1.x/contrib/shockfish/tools/java_tc65/src/com/shockfish/tinyos/gateway
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv28926/src/com/shockfish/tinyos/gateway
Added Files:
CldcDataSender.java ProtocolGateway.java SenderMessage.java
SenderTask.java SenderTimerControl.java TOSBuffer.java
UpdateDate.java UpdateDateTask.java
Log Message:
TC65/TinyNode foundations.
--- NEW FILE: CldcDataSender.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
//import net.tinyos.message.Dump;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.SocketConnection;
import javax.microedition.io.Connector;
import java.util.Date;
public class CldcDataSender extends ProtocolGateway {
private String Address;
private int port;
private String optionalParameter;
private SocketConnection sc;
private DataInputStream is;
private DataOutputStream os;
public CldcDataSender( String Address, int port, String optionalParameter) {
this.Address = Address;
this.port = port;
this.optionalParameter=optionalParameter;
}
public void connect() throws IOException {
sc = (SocketConnection)Connector.open("socket://"+Address+":"+port+optionalParameter);
sc.setSocketOption(SocketConnection.LINGER, 5);
is = sc.openDataInputStream();
os = sc.openDataOutputStream();
}
public void sendInit(String id_Basestation,Date date) throws IOException {
os.writeUTF(id_Basestation);
os.writeLong(date.getTime());
os.flush();
}
public void sendRecord (byte [] data) throws IOException {
os.writeByte(NEW_VALUE);
os.write(data);
os.flush();
}
public void sendEnd() throws IOException {
os.writeByte(END_VALUE);
os.flush();
}
public void close() throws IOException {
is.close();
os.close();
sc.close();
}
}
--- NEW FILE: ProtocolGateway.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
public class ProtocolGateway {
protected final int END_VALUE = 40;
protected final int NEW_VALUE = 60;
}
--- NEW FILE: SenderMessage.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
import java.io.IOException;
import com.shockfish.tinyos.gateway.SenderTimerControl;
import com.shockfish.tinyos.gateway.CldcDataSender;
import com.shockfish.tinyos.tools.Tc65Manager;
import com.shockfish.tinyos.tools.CldcLogger;
import com.shockfish.tinyos.gateway.TOSBuffer;
public class SenderMessage extends Thread {
private SenderTimerControl senderTimerControl;
private Tc65Manager manager;
private TOSBuffer tosbuffer;
private int NumberOfRecordToSend;
private CldcDataSender cldsDataSender;
private int maxNumberOfTry = 1;
private final String DEFAULT_IP_DATA_SERVER = "10.192.168.10";
private final String DEFAULT_PORT_DATA_SERVER = "1000";
private final String FILE_IP_DATA_SERVER = "IP_DATA_SERVER";
private final String FILE_PORT_DATA_SERVER = "PORT_DATA_SERVER";
private final String FILE_ID_BASESTATION = "BASESTATION_ID";
private final String DEFAULT_ID_BASESTATION = "NO_BASESTATION_ID";
public SenderMessage(Tc65Manager manager, TOSBuffer tosbuffer,
SenderTimerControl senderTimerControl) {
super();
this.senderTimerControl = senderTimerControl;
this.manager = manager;
this.tosbuffer = tosbuffer;
String address = manager.readProp(FILE_IP_DATA_SERVER);
String port = manager.readProp(FILE_PORT_DATA_SERVER);
if (address == null)
address = DEFAULT_IP_DATA_SERVER;
if (port == null)
port = DEFAULT_PORT_DATA_SERVER;
cldsDataSender = new CldcDataSender(address, Integer.parseInt(port),
manager.getGprsConf());
}
public void run() {
NumberOfRecordToSend = tosbuffer.size();
// do not start the connection if nothing to send
CldcLogger.devDebug(CldcLogger.SRC_8, "SenderMessage started ("
+ Thread.currentThread() + ")");
if (NumberOfRecordToSend <= 0) {
CldcLogger.info("Buffer empty, do not send anything");
senderTimerControl.startSenderTimer();
return;
}
String id_basestation = manager.readProp(FILE_ID_BASESTATION);
if (id_basestation == null)
id_basestation = DEFAULT_ID_BASESTATION;
long startTime = System.currentTimeMillis();
int numberOfTry = 0;
boolean isConnected = false;
// try to reconnect a certain number of times
while ((numberOfTry <= maxNumberOfTry) && (!isConnected)) {
try {
cldsDataSender.connect();
isConnected = true;
} catch (IOException e) {
CldcLogger
.severe("Connection to server failed: "
+ e);
numberOfTry++;
}
}
boolean isSent = false;
int NumSendedRecord = 0;
try {
if (!isConnected) {
senderTimerControl.startSenderTimer();
return;
}
cldsDataSender.sendInit(id_basestation, Tc65Manager.getDate());
for (int i = 0; i < NumberOfRecordToSend; i++) {
cldsDataSender.sendRecord(tosbuffer.getElement(i));
NumSendedRecord++;
}
cldsDataSender.sendEnd();
isSent = true;
} catch (IOException e) {
CldcLogger.severe("SenderMessage error: "
+ e.toString());
}
try {
cldsDataSender.close();
} catch (IOException e) {
CldcLogger.severe("SenderMessage closing error: "
+ e.toString());
}
if (isSent) {
for (int i = 0; i < NumberOfRecordToSend; i++) {
tosbuffer.deleteRecord(0);
}
}
senderTimerControl.startSenderTimer();
}
}
--- NEW FILE: SenderTask.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
import java.io.*;
import com.shockfish.tinyos.tools.*;
import java.util.Vector;
import java.util.TimerTask;
public class SenderTask extends TimerTask {
private Tc65Manager manager;
private TOSBuffer tosbuffer;
private SenderTimerControl senderTimerControl;
public SenderTask(Tc65Manager manager, TOSBuffer tosbuffer,
SenderTimerControl senderTimerControl) {
super();
this.manager = manager;
this.tosbuffer = tosbuffer;
this.senderTimerControl = senderTimerControl;
}
public void run() {
Vector vector;
SenderMessage senderMessage = new SenderMessage(manager, tosbuffer,
senderTimerControl);
senderMessage.start();
}
}
--- NEW FILE: SenderTimerControl.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
public interface SenderTimerControl {
public void startSenderTimer();
public void stopSenderTimer();
}
--- NEW FILE: TOSBuffer.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
import java.util.Vector;
import com.shockfish.tinyos.tools.CldcLogger;
public class TOSBuffer {
private class ByteArray {
private byte [] data;
public ByteArray (byte [] data) {
this.data=data;
}
public byte [] getBytes () {
return data;
}
}
public final static int BUFCAP = 20;
private Vector vector;
public TOSBuffer () {
vector=new Vector(BUFCAP);
}
public void close() {
vector=null;
}
public void addElement (byte [] data) {
if (vector.size()>=BUFCAP) {
CldcLogger.severe("Record dropped, TOSBuffer capacity reached, TOSBuf.size="+vector.size());
return;
}
vector.addElement(new ByteArray(data));
}
public byte [] getElement (int index_Element) {
ByteArray byteArray=(ByteArray) vector.elementAt(index_Element);
return byteArray.getBytes();
}
public void deleteRecord (int index) {
vector.removeElementAt(index);
}
public void empty () {
vector.removeAllElements();
}
public int size () {
return vector.size();
}
}
--- NEW FILE: UpdateDate.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
* @author Pierre Metrailler, Shockfish SA
*/
import com.shockfish.tinyos.packet.*;
import java.io.*;
import java.util.Date;
import com.shockfish.tinyos.tools.*;
import java.lang.String;
import com.shockfish.tinyos.net.CldcSntpClient;
public class UpdateDate extends Thread {
private Tc65Manager manager;
private final String DEFAULT_IP_DATE_SERVER = "swisstime.ethz.ch";
private final String FILE_IP_DATE_SERVER = "IP_DATE_SERVER";
private final static long DATE_UPDATE_PERIOD = 10000;
private static String address;
public UpdateDate(Tc65Manager manager) {
this.manager = manager;
address = manager.readProp(FILE_IP_DATE_SERVER);
if (address == null)
address = DEFAULT_IP_DATE_SERVER;
}
public void run() {
CldcLogger.devDebug(CldcLogger.SRC_7,"Updating time...(UpdateDate: " + Thread.currentThread() + ")");
boolean dateUpdated = false;
while (!dateUpdated) {
try {
long offset = CldcSntpClient.getOffset(address, manager.getGprsConf());
CldcLogger.devDebug(CldcLogger.SRC_7,"Setting offset :" + offset);
manager.setOffsetCalendar(offset);
CldcLogger.devDebug(CldcLogger.SRC_7,"Date after the update: " + manager.getDate());
manager.setSyncedTime();
dateUpdated = true;
} catch (IOException e) {
CldcLogger.devDebug(CldcLogger.SRC_7,"Time update failed, probably due to communication error :" + e.toString());
manager.resetSyncedTime();
}
try {
Thread.sleep(DATE_UPDATE_PERIOD);
} catch (InterruptedException e) {
CldcLogger.devDebug(CldcLogger.SRC_7,"Interrupted sleep in UpdateDate: " + e.toString());
}
}
CldcLogger.devDebug(CldcLogger.SRC_7, "UpdateDate done.");
}
}
--- NEW FILE: UpdateDateTask.java ---
package com.shockfish.tinyos.gateway;
/**
* @author Karl Baumgartner, HEIG-VD
*/
import com.shockfish.tinyos.tools.*;
import java.util.Vector;
import java.util.TimerTask;
public class UpdateDateTask extends TimerTask {
private Tc65Manager manager;
public UpdateDateTask(Tc65Manager manager) {
super();
this.manager = manager;
}
public void run() {
UpdateDate updateDate = new UpdateDate(manager);
updateDate.start();
}
}
More information about the Tinyos-contrib-commits
mailing list