package lejos.nxt.addon;
import lejos.nxt.SensorPort;
import lejos.nxt.I2CSensor;
import java.util.ArrayList;
/*
* WARNING: THIS CLASS IS SHARED BETWEEN THE classes AND pccomms PROJECTS.
* DO NOT EDIT THE VERSION IN pccomms AS IT WILL BE OVERWRITTEN WHEN THE PROJECT IS BUILT.
*/
/**
* Abstraction for a Lattebox NXT Extension Kit with Lattebox 10-Axis Servo Kit
* http://www.lattebox.com
* UML: http://www.juanantonio.info/p_research/robotics/lejos/nxj/lattebox/LatteboxNXTeKit.png
*
* @author Juan Antonio Brenha Moral
*
*/
public class NXTe extends I2CSensor{
//LSC
private ArrayList<LSC> arrLSC;
private final int MAXIMUM_LSC = 4;
//Exception handling
private final String ERROR_SERVO_DEFINITION = "Error with Servo Controller definition";
private final String ERROR_SPI_CONFIGURATION = "Error in SPI Configuration";
//I2C
private SensorPort portConnected;
private final byte SPI_PORT[] = {0x01,0x02,0x04,0x08};//SPI Ports where you connect LSC
public static final byte NXTE_ADDRESS = 0x28;
private final byte REGISTER_IIC = (byte)0xF0;//NXTe IIC address
/**
* Constructor
*
* @param port
*/
public NXTe(SensorPort port){
super(port);
port.setType(TYPE_LOWSPEED_9V);
port.setMode(MODE_RAW);
portConnected = port;
arrLSC = new ArrayList<LSC>();
this.setAddress((int) NXTE_ADDRESS);
int I2C_Response;
I2C_Response = this.sendData((int)this.REGISTER_IIC, (byte)0x0c);
}
/**
* Add a LSC, Lattebox Servo Controller
*
* @param SPI_PORT
* @throws Exception
*/
public void addLSC(int SPI_PORT) throws ArrayIndexOutOfBoundsException{
if(arrLSC.size() <= MAXIMUM_LSC){
LSC LSCObj = new LSC(this.portConnected,this.SPI_PORT[SPI_PORT]);
arrLSC.add(LSCObj);
}else{
//throw new ArrayIndexOutOfBoundsException(ERROR_SERVO_DEFINITION);
throw new ArrayIndexOutOfBoundsException();
}
}
/**
* Get a LSC, Lattebox Servo Controller
*
* @param index in the array
* @return the LSC object
*/
public LSC getLSC(int index){
return arrLSC.get(index);
}
}