Tweaked Java client docs and added readDATA command.

This commit is contained in:
Jason Watkins
2015-04-18 09:15:27 -07:00
parent e191537bc9
commit fd96966911

View File

@@ -124,9 +124,9 @@ public class XPlaneConnect implements AutoCloseable
/** /**
* Initializes a new instance of the {@code XPlaneConnect} class using the specified ports and X-Plane host. * Initializes a new instance of the {@code XPlaneConnect} class using the specified ports and X-Plane host.
* *
* @param port The port on which the X-Plane Connect plugin is sending data.
* @param xpHost The network host on which X-Plane is running. * @param xpHost The network host on which X-Plane is running.
* @param xpPort The port on which the X-Plane Connect plugin is listening. * @param xpPort The port on which the X-Plane Connect plugin is listening.
* @param port The local port to use when sending and receiving data from XPC.
* @throws java.net.SocketException If this instance is unable to bind to the specified port. * @throws java.net.SocketException If this instance is unable to bind to the specified port.
* @throws java.net.UnknownHostException If the specified hostname can not be resolved. * @throws java.net.UnknownHostException If the specified hostname can not be resolved.
*/ */
@@ -139,9 +139,9 @@ public class XPlaneConnect implements AutoCloseable
/** /**
* Initializes a new instance of the {@code XPlaneConnect} class using the specified ports, hostname, and timeout. * Initializes a new instance of the {@code XPlaneConnect} class using the specified ports, hostname, and timeout.
* *
* @param port The port on which the X-Plane Connect plugin is sending data.
* @param xpHost The network host on which X-Plane is running. * @param xpHost The network host on which X-Plane is running.
* @param xpPort The port on which the X-Plane Connect plugin is listening. * @param xpPort The port on which the X-Plane Connect plugin is listening.
* @param port The port on which the X-Plane Connect plugin is sending data.
* @param timeout The time, in milliseconds, after which read attempts will timeout. * @param timeout The time, in milliseconds, after which read attempts will timeout.
* @throws java.net.SocketException If this instance is unable to bind to the specified port. * @throws java.net.SocketException If this instance is unable to bind to the specified port.
* @throws java.net.UnknownHostException If the specified hostname can not be resolved. * @throws java.net.UnknownHostException If the specified hostname can not be resolved.
@@ -156,7 +156,7 @@ public class XPlaneConnect implements AutoCloseable
} }
/** /**
* Closes the underlying inSocket. * Closes the underlying socket.
*/ */
public void close() public void close()
{ {
@@ -189,20 +189,13 @@ public class XPlaneConnect implements AutoCloseable
} }
/** /**
* Send the given data to the X-Plane plugin. This method automatically sets the length byte before sending, * Send the given data to the X-Plane plugin.
* overwriting any value previously stored in @{code buffer[4]}.
* *
* @param buffer The data to send. * @param buffer The data to send.
* @throws IOException If the send operation fails. * @throws IOException If the send operation fails.
*/ */
private void sendUDP(byte[] buffer) throws IOException private void sendUDP(byte[] buffer) throws IOException
{ {
if(buffer.length < 5 || buffer.length > 255)
{
throw new IllegalArgumentException("buffer must be between 5 and 255 bytes long.");
}
buffer[4] = (byte)buffer.length;
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, xplaneAddr, xplanePort); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, xplaneAddr, xplanePort);
socket.send(packet); socket.send(packet);
} }
@@ -228,9 +221,9 @@ public class XPlaneConnect implements AutoCloseable
* @return A byte array representing data dependent on the dref requested. * @return A byte array representing data dependent on the dref requested.
* @throws IOException If either the request or the response fails. * @throws IOException If either the request or the response fails.
*/ */
public float[] requestDREF(String dref) throws IOException public float[] getDREF(String dref) throws IOException
{ {
return requestDREFs(new String[]{dref})[0]; return getDREFs(new String[] {dref})[0];
} }
/** /**
@@ -240,7 +233,7 @@ public class XPlaneConnect implements AutoCloseable
* @return A multidimensional array representing the data for each requested dref. * @return A multidimensional array representing the data for each requested dref.
* @throws IOException If either the request or the response fails. * @throws IOException If either the request or the response fails.
*/ */
public float[][] requestDREFs(String[] drefs) throws IOException public float[][] getDREFs(String[] drefs) throws IOException
{ {
//Preconditions //Preconditions
if(drefs == null || drefs.length == 0) if(drefs == null || drefs.length == 0)
@@ -313,19 +306,19 @@ public class XPlaneConnect implements AutoCloseable
throw new IOException("No response received."); throw new IOException("No response received.");
} }
public void sendDREF(String dref, float value) throws IOException public void setDREF(String dref, float value) throws IOException
{ {
sendDREF(dref, new float[] {value}); setDREF(dref, new float[] {value});
} }
/** /**
* Sends a command to X-Plane that sets the given DREF. * Sends a command to X-Plane that sets the given DREF.
* *
* @param dref The name of the DREF to set. * @param dref The name of the X-Plane dataref to set.
* @param value An array of floating point values whose structure depends on the dref specified. * @param value An array of floating point values whose structure depends on the dref specified.
* @throws IOException If the command cannot be sent. * @throws IOException If the command cannot be sent.
*/ */
public void sendDREF(String dref, float[] value) throws IOException public void setDREF(String dref, float[] value) throws IOException
{ {
//Preconditions //Preconditions
if(dref == null) if(dref == null)
@@ -551,6 +544,36 @@ public class XPlaneConnect implements AutoCloseable
sendUDP(os.toByteArray()); sendUDP(os.toByteArray());
} }
/**
* Reads X-Plane data
*
* @return The data read.
* @throws IOException If the read operation fails.
*/
public float[][] readData() throws IOException
{
byte[] buffer = readUDP();
ByteBuffer bb = ByteBuffer.wrap(buffer);
int cur = 5;
int len = bb.get(cur++);
float[][] result = new float[bb.get(len)][9];
for(int i = 0; i < len; ++i)
{
for(int j = 0; j < 9; ++j)
{
result[i][j] = bb.getFloat(cur);
cur += 4;
}
}
return result;
}
/**
* Sends data to X-Plane
*
* @param data The data to send.
* @throws IOException If the command cannot be sent.
*/
public void sendDATA(float[][] data) throws IOException public void sendDATA(float[][] data) throws IOException
{ {
//Preconditions //Preconditions
@@ -635,6 +658,15 @@ public class XPlaneConnect implements AutoCloseable
sendUDP(os.toByteArray()); sendUDP(os.toByteArray());
} }
/**
* Adds, removes, or clears a set of waypoints. If the command is clear, the points are ignored
* and all points are removed.
*
* @param op The operation to perform.
* @param points An array of values representing points. Each triplet in the array will be
* interpreted as a (Lat, Lon, Alt) point.
* @throws IOException If the command cannot be sent.
*/
public void sendWYPT(WaypointOp op, float[] points) throws IOException public void sendWYPT(WaypointOp op, float[] points) throws IOException
{ {
//Preconditions //Preconditions