package lejos.pc.comm;
import java.io.IOException;
import java.util.ArrayList;
import lejos.nxt.remote.*;
public class NXTConnectionManager {
private ArrayList<NXTCommand> nxtCommands;
private NXTConnector nxtConnector;
public NXTConnectionManager() {
nxtConnector = new NXTConnector();
nxtCommands = new ArrayList<NXTCommand>();
}
/**
* searches for available NXT bricks automatically connects to the first one
* found (TODO: correct?)
*
* @return an array of available NXTInfo objects or null, if no brick is
* found
*/
public NXTInfo[] search() {
return nxtConnector.search(null,null,NXTCommFactory.ALL_PROTOCOLS);
}
/**
* connects to a NXT brick
*
* @param nxtInfo
* @return true, if connection was successful
*/
public boolean connectToBrick(NXTInfo nxtInfo) {
boolean brickConnected = false;
if (nxtInfo != null)
brickConnected = nxtConnector.connectTo(nxtInfo, NXTComm.LCP);
return brickConnected;
}
public void closeAll() throws IOException {
for (NXTCommand nxtCommand : nxtCommands) {
nxtCommand.close();
}
}
/**
* register log listener
*
* @param listener
* the log listener
*/
public void addLogListener(NXTCommLogListener listener) {
nxtConnector.addLogListener(listener);
}
/**
* unregister log listener
*
* @param listener
* the log listener
*/
public void removeLogListener(NXTCommLogListener listener) {
nxtConnector.removeLogListener(listener);
}
/*
* public NXTInfo connectedNXT;
*
* public NXTInfo getConnectedNXT() { return connectedNXT; }
*
* public NXTInfo[] searchForNXTBricks() { // disconnect NXTCommand
* nxtCommand = NXTCommand.getSingleton(); try { nxtCommand.close();
* connectedNXT = null; } catch (IOException ioe) { LeJOSNXJUtil.message(
* "something went wrong when trying to close the connection to NXT bricks"
* + ioe.getMessage()); } // search for bricks NXTInfo[] nxtBricks = null;
* NXTInfo[] nxtUSBBricks = null; NXTInfo[] nxtBluetoothBricks = null; try {
* nxtUSBBricks = nxtCommand.search(null, NXTCommFactory.USB); } catch
* (NXTCommException nce) { LeJOSNXJUtil
* .message("something went wrong when searching for NXT bricks via USB: " +
* nce.getMessage()); } try { nxtBluetoothBricks = nxtCommand.search(null,
* NXTCommFactory.BLUETOOTH); } catch (NXTCommException nce) { LeJOSNXJUtil
* .
* message("something went wrong when searching for NXT bricks via Bluetooth: "
* + nce.getMessage()); } int noOfUSBBricksFound = 0; if (nxtUSBBricks !=
* null) { noOfUSBBricksFound = nxtUSBBricks.length; } int
* noOfBluetoothBricksFound = 0; if (nxtBluetoothBricks != null) {
* noOfBluetoothBricksFound = nxtBluetoothBricks.length; } int
* noOfBricksFound = noOfUSBBricksFound + noOfBluetoothBricksFound; if
* (noOfBricksFound > 0) { nxtBricks = new NXTInfo[noOfBricksFound]; int i =
* 0; for (int j = 0; j < noOfUSBBricksFound; j++) { nxtBricks[i++] = new
* NXTInfo(nxtUSBBricks[j]); } for (int j = 0; j < noOfBluetoothBricksFound;
* j++) { nxtBricks[i++] = new NXTInfo(nxtBluetoothBricks[j]); } } return
* nxtBricks; }
*
* public boolean connectToBrick(NXTInfo browserInfo) { boolean
* brickConnected = false; try { brickConnected =
* NXTCommand.getSingleton().open(browserInfo); } catch (Throwable t) {
* LeJOSNXJUtil.message(t); } if(brickConnected) connectedNXT = browserInfo;
* return brickConnected; }
*
* public void detachFromBricks() { try { NXTCommand.getSingleton().close();
* connectedNXT = null; } catch (Throwable t) { LeJOSNXJUtil.message(t); } }
*/
}