Read UDP from a simulator help

Hi,

I need help to convert a JAVA program for arduino with ethernet shield.

 private final String stringDATA = "DATA";

    private final int segmentSize = 4 + 8 * 4;

    private final int headerSize = 4 + 1;

    private TreeMap<String, MessagePart> messages = new TreeMap<String, MessagePart>();

    public void work(int port) throws IOException {
        DatagramSocket socket;
        DatagramPacket packet;
        int maxIndex = 128;
        int maxSize = headerSize + maxIndex * (segmentSize);
        byte[] message = new byte[maxSize];

        socket = new DatagramSocket(port);

        FileOutputStream fosSerial = null;
        FileInputStream fisSerial = null;
        FileOutputStream fosLogfile = null;
        FileOutputStream fosResponseLogfile = null;
        long lastSent = System.currentTimeMillis();
        boolean running = true;
        while (running) {
            try {
                packet = new DatagramPacket(message, message.length);
                // System.err.println("waiting for packet...");
                socket.receive(packet);
                // System.err.println("received packet...");
                int bytesReceived = packet.getLength();

                // dumpData(packet.getData(), bytesReceived);
                byte[] data;
                data = getBytes(packet.getData(), 0, 4);
                if (// !data.equals(headerDATA) &&
                !new String(data).equals(stringDATA)) {
                    // System.err.println("skipping msg(" + new String(data) +
                    // ")");
                    // System.err.print(".");
                    continue;
                }
                // System.err.println("DATA RECEIVED, size(" + bytesReceived + ")");
                // dumpData(packet.getData(), bytesReceived);

                data = getBytes(packet.getData(), 4, 1);

                int recordCount = bytesReceived - (headerSize);
                recordCount /= segmentSize;
                // System.err.println("number of rercords(" + recordCount +
                // ")");
                for (int i = 0; i < recordCount; i++) {
                    int index = indexFromRecord(packet.getData(), i);
                    // System.err.println("index=" + Integer.toHexString(index));
                    {
                        switch (index) {
                        case 3:
                        case 0x03000000: {
                            float v0 = valueFromRecord(packet.getData(), i, 0);
                            float v1 = valueFromRecord(packet.getData(), i, 1);
                            float v2 = valueFromRecord(packet.getData(), i, 2);
                            float v3 = valueFromRecord(packet.getData(), i, 3);
                            float v4 = valueFromRecord(packet.getData(), i, 4);
                            float v5 = valueFromRecord(packet.getData(), i, 5);
                            float v6 = valueFromRecord(packet.getData(), i, 6);
                            float v7 = valueFromRecord(packet.getData(), i, 7);
                            messagesAdd(new MessagePart("vindkias", v0));
                            // messagesAdd(new MessagePart("vindkeas", v1));
                            // messagesAdd(new MessagePart("vtruektas", v2));
                            // messagesAdd(new MessagePart("vtruektgs", v3));
                            //							
                            // messagesAdd(new MessagePart("vindmph", v5));
                            // messagesAdd(new MessagePart("vtruemphas", v6));
                            // messagesAdd(new MessagePart("vtruemphgs", v7));
                            break;
                        }
                        case 4:
                        case 0x04000000: {
                            float v0 = valueFromRecord(packet.getData(), i, 0);// v0=0.2039596 MACH
                            float v2 = valueFromRecord(packet.getData(), i, 2);// v2=-0.95520073 VVI
                            float v4 = valueFromRecord(packet.getData(), i, 4);// v4=0.998774 GLOAD normal
                            float v5 = valueFromRecord(packet.getData(), i, 5);// v5=-0.024983805 GLOAD axial
                            float v6 = valueFromRecord(packet.getData(), i, 6);// v6=6.872059E-4 GLOAD side
                            float v7 = valueFromRecord(packet.getData(), i, 7);
                            // messagesAdd(new MessagePart("mach", v0));
                            messagesAdd(new MessagePart("vvi", v2));
                            // messagesAdd(new MessagePart("gloadnormal", v4));
                            // messagesAdd(new MessagePart("gloadaxial", v5));
                            // messagesAdd(new MessagePart("gloadside", v6));
                        }
                            break;
                        case 14:
                        case 0x0E000000: {
                            float v0 = valueFromRecord(packet.getData(), i, 0);
                            float v1 = valueFromRecord(packet.getData(), i, 1);
                            float v2 = valueFromRecord(packet.getData(), i, 2);
                            float v3 = valueFromRecord(packet.getData(), i, 3);
                            float v4 = valueFromRecord(packet.getData(), i, 4);
                            float v5 = valueFromRecord(packet.getData(), i, 5);
                            float v6 = valueFromRecord(packet.getData(), i, 6);
                            float v7 = valueFromRecord(packet.getData(), i, 7);
                            messagesAdd(new MessagePart("gear", v0));
                            messagesAdd(new MessagePart("wbrak", v1));
                            // messagesAdd(new MessagePart("lbrak", v2));
                            // messagesAdd(new MessagePart("rbrak", v3));

                        }
                            break;
                        // case 18:
                        // case 0x12000000:
                        // trueHdg = valueFromRecord(packet.getData(), i, 2);
                        // magVar = valueFromRecord(packet.getData(), i, 4);
                        // // messagesAdd(new MessagePart("trueHdg=" + trueHdg);
                        // // messagesAdd(new MessagePart("magVar=" + magVar);
                        // break;
                        case 20:
                        case 0x14000000:
                            float altFt = valueFromRecord(packet.getData(), i, 2);
                            float lon = valueFromRecord(packet.getData(), i, 1);
                            float lat = valueFromRecord(packet.getData(), i, 0);
                            messagesAdd(new MessagePart("altFt", altFt));
                            // messagesAdd(new MessagePart("lon", lon));
                            // messagesAdd(new MessagePart("lat", lat));
                            break;

                        case 21:
                        case 0x15000000: {
                            float v0 = valueFromRecord(packet.getData(), i, 0);
                            float v1 = valueFromRecord(packet.getData(), i, 1);
                            float v2 = valueFromRecord(packet.getData(), i, 2);
                            float v3 = valueFromRecord(packet.getData(), i, 3);
                            float v4 = valueFromRecord(packet.getData(), i, 4);
                            float v5 = valueFromRecord(packet.getData(), i, 5);
                            float v6 = valueFromRecord(packet.getData(), i, 6);
                            float v7 = valueFromRecord(packet.getData(), i, 7);
                            // loc vel distTravelled
                            messagesAdd(new MessagePart("v0", v0));
                            messagesAdd(new MessagePart("v1", v1));
                            messagesAdd(new MessagePart("v2", v2));
                            messagesAdd(new MessagePart("v3", v3));
                            messagesAdd(new MessagePart("v4", v4));
                            messagesAdd(new MessagePart("v5", v5));
                            messagesAdd(new MessagePart("v6", v6));
                            messagesAdd(new MessagePart("v7", v7));
                            // messagesAdd(new MessagePart("groundSpeedKt=" +
                            // groundSpeedKt);
                        }

This is a part of the JAR file that intercept UDP from the simulator program, I want to begin
to read correctly the UDP trough the ethernet shield…can anyone help me?

If I use the Example program to read UDP actually I see only the word “DATA” without value…
thank’s
I will post in pm full jar file if is necessary…

Too complicated -- don't want to think too hard to day...

For UDP packets, I make sure I set them on 8byte boundaries for the data on thew Arduino... seems to help

So I will do a 24 byte, 32 byte 48 byte, 64 byte packet for example or similar...

Since UDP packets disappear, I also send a sequence number. I do not re-transmit -- just want to know...

Get Wire Shark and use it... see if you can spot errors lighting up ... very helpful.

The Arduino Ethernet Shield --- The Wiznet Card is flaky -- I have commented elsewhere on this -- and so have many others...

It needs a serious quality check -- but I don't know if it is hardware, software or both....

Many packets have the data scrambled.