package lejos.pc.tools;
import java.io.*;
import lejos.pc.comm.*;
public class DataViewComms
{
private NXTConnector con;
private boolean connected = false;
private DataViewerUI viewer;
private OutputStream os;
private DataInputStream dataIn;
public DataViewComms(DataViewerUI viewer)
{
this.viewer = viewer;
}
public void setConnected(boolean connected)
{
this.connected = connected;
}
public boolean connecTo(String name, String address, boolean useUSB)
{
int protocols;
if (useUSB)
{
protocols = NXTCommFactory.USB;
} else
{
protocols = NXTCommFactory.BLUETOOTH;
}
return connectTo(name, address, protocols);
}
public boolean connectTo(String name, String address, int protocol)
{
viewer.logMessage("Connecting to " + name + " " + address);
con = new NXTConnector();
boolean res = con.connectTo(name, address, protocol);
viewer.logMessage("Connect result " + res);
if (!res)
{
viewer.logMessage("Connection failed ");
return false;
}
os = con.getOutputStream();
dataIn = con.getDataIn();
if (dataIn == null)
{
viewer.logMessage("NULL input stream ");
return false;
} else
{
if (os == null)
{
viewer.logMessage("NULL output stream");
return false;
} else
{
connected = true;
}
}
name = con.getNXTInfo().name;
address = con.getNXTInfo().deviceAddress;
viewer.connectedTo(name, address);
return true;
}
public void startDownload()
{
if (!connected)
{
viewer.showMessage("Not yet connected");
return;
}
int b = 15;
try //handshake - ready to read data
{
os.write(b);
os.flush();
} catch (IOException e)
{
viewer.showMessage(e + " handshake failed ");
}
try
{
int length = dataIn.readInt();
viewer.setStatus(" reading length " + length);
for (int i = 0; i < length; i++)
{
viewer.append(dataIn.readFloat());
}
} catch (IOException e)
{
viewer.showMessage("read error " + e);
}
viewer.setStatus("Read all data");
}
public void close() {
try {
if (con != null) con.close();
} catch (IOException ioe) {};
}
}