import lejos.nxt.*;
import lejos.nxt.comm.*;
import lejos.util.TextMenu;
import java.io.*;
/**
* Receive data from another NXT, a PC, a phone,
* or another device. Allow the use of Bluetooth,
* USB or RS485. Allow either packet based or RAW
* connections
*
* Waits for a connection, receives an int and returns
* its negative as a reply, continues until the remote
* system closes the connection.
*
* @author Andy Shaw
*
*/
public class NXTReceive
{
public static void main(String[] args) throws Exception
{
String[] connectionStrings = new String[]{"Bluetooth", "USB", "RS485"};
TextMenu connectionMenu = new TextMenu(connectionStrings, 0, "Connection");
String[] modeStrings = new String[] {"Packet", "Raw"};
TextMenu modeMenu = new TextMenu(modeStrings, 0, "Mode");
NXTCommConnector[] connectors = {Bluetooth.getConnector(), USB.getConnector(), RS485.getConnector()};
int[] modes = {NXTConnection.PACKET, NXTConnection.RAW};
int connectionType = connectionMenu.select();
LCD.clear();
int mode = modeMenu.select();
while (true)
{
LCD.clear();
LCD.drawString("Type: " + connectionStrings[connectionType], 0, 0);
LCD.drawString("Mode: " + modeStrings[mode], 0, 1);
LCD.drawString("Waiting...", 0, 2);
NXTConnection con = connectors[connectionType].waitForConnection(0, modes[mode]);
LCD.drawString("Connected...", 0, 2);
DataInputStream dis = con.openDataInputStream();
DataOutputStream dos = con.openDataOutputStream();
while(true)
{
int n;
try{
n = dis.readInt();
} catch (EOFException e)
{
break;
}
LCD.drawString("Read: ", 0, 4);
LCD.drawInt(n, 7, 6, 4);
dos.writeInt(-n);
dos.flush();
}
LCD.drawString("Closing... ", 0, 2);
dis.close();
dos.close();
con.close();
}
}
}