package wcet.dsvmfp.util;
import com.jopdesign.sys.Native;
import wcet.dsvmfp.JopClient;
import util.Dbg;
import joprt.RtThread;
import ejip_old.CS8900;
import ejip_old.LinkLayer;
import ejip_old.Packet;
import ejip_old.Net;
import ejip_old.Udp;
import ejip_old.UdpHandler;
/**
*
* @author rup.inf
* GPL
*/
public class UdpJop {
static Net net;
static LinkLayer ipLink;
static UdpHandler adder;
static Packet p;
// Send and receive destPort
static int destPort;
// Destination IP
static int destIp;
// Receive port
static int receivePort;
static int cnt;
static boolean packetToSend;
public UdpJop(int destIpprm, int destPortprm, int receivePortprm) {
destIp = destIpprm;
destPort = destPortprm;
receivePort = receivePortprm;
cnt = 0;
packetToSend = false;
net = Net.init();
// TODO: the following code does not compile
// ipLink = CS8900.init(Net.eth, Net.ip);
new RtThread(5, 10000) {
public void run() {
for (;;) {
waitForNextPeriod();
net.loop(); //If the request is called if something is received
}
}
};
new RtThread(5, 10000) {
public void run() {
for (;;) {
waitForNextPeriod();
ipLink.loop();
}
}
};
new RtThread(6, 10000) {
public void run() {
for (;;) {
waitForNextPeriod();
// RtThread.sleepMs(100);
if (packetToSend) {
// System.out.println("send");
int pwait = 0;
p = null;
for (; p == null;) {
// System.out
// .println("Loop " + (pwait++) + " p==null");
p = Packet.getPacket(Packet.FREE, Packet.ALLOC);
// RtThread.sleepMs(1000);
}
// System.out.println("dsvmPacket.getCommand()
// "+dsvmPacket.getCommand());
// System.out.println("dsvmPacket.getid()
// "+dsvmPacket.getId());
DsvmUtilFP.arrayCopy(DsvmPacket.pLoad, 0, p.buf, Udp.DATA,
DsvmPacket.length);
// System.out.println("dsvmPacket.getPayloadInt().length
// "+dsvmPacket.getPayloadInt().length);
p.len = (Udp.DATA + DsvmPacket.length) << 2;
// for(int i=0;i<(Udp.DATA +
// dsvmPacket.getPayloadInt().length);i++){
// System.out.println("p.buf["+i+"] "+p.buf[i]);
// }
// System.out.println("p.len"+p.len);
Udp.build(p, destIp, destPort);
packetToSend = false;
}
}
}
};
adder = new UdpHandler() {
public void request(Packet p) {
// System.out.println("UdpHandler.request");
// System.out.println("p.len " + p.len);
//System.out.print("Udp.DATA[0] ");
//System.out.println(Udp.DATA[0]);
DsvmPacket.clear();
DsvmPacket.setIntPayload(p.buf, p.len / 4-Udp.DATA, Udp.DATA);
// for(int i=(p.len / 4-Udp.DATA);i<p.len / 4;i++){
// System.out.print("p[i] ");
// System.out.println(p.buf[i]);
// }
p.setStatus(Packet.FREE);
// for (int i = 0; i < rcv.length; i++)
// System.out.println("UdpJop.request, rcv.payLoad[" + i + "] "
// + rcv.payLoad[i]);
JopClient.receive();
}
};
Udp.addHandler(receivePort, adder);
}
public void send() {
packetToSend = true;
}
}