This whole Java FSUIPC SDK is based upon SDK written by Mark Burton, later amended by Paul Henty for 64 bit environment. But, it has been greatly rewritten and uses different approach.
Why the rewrite? Well, the main reason for me was performance considerations. After studying FSUIPC C SDK, the wrapper library and the Java SDK by Mark, I found out
that the C/C++ wrapper library (fsuipc_java64.dll, fsuipc_java32.dll), that implements the FSUIPCWrapper.readData(int, int, byte[])
and FSUIPCWrapper.writeData(int, int, byte[])
functions, calls the FSUIPC_Process function.
What is the catch? Well, normally when working with the FSUIPC C/C++ SDK, you call FSUIPC_Read and FSUIPC_Write functions to tell FSUIPC what data you want to read/write, kind of registering data requests, and than process all of them
using the FSUIPC_Process function. I have read on the forums that this function is quite heavy on processing time - thus, it is not good to call it very often. But this is how it was
implemented in the previous wrapper libraries. The FSUIPC_Process function got called every time you called the read or write functions. It may not cause trouble in simple projects. But, when you would read multiple values,
continuously, like in the loop, for example for flight monitoring app, I think that might be a performance issue sooner or later. Not mentioning, that your app probably would not be the only one that FSUIPC
would have to provides it's services to. That is why I decided to try to write a different SDK, that will try to reflect the approach that we would use when writing the code in C/C++.
This SDK thinks of FSUIPC read/writes as of data requests. It allows you to register multiple of them and then process them all via one call of the process function.
The main package of the SDK is the com.mouseviator.fsuipc
package which contains the two core classes. The FSUIPCWrapper
class, which is the "low-level" approach class. It contains
the native methods implemented in the fsuipc_java64.dll and fsuipc_java32.dll (libraries for 32bit/64bit JVM). The second class is the FSUIPC
class. This class uses FSUIPCWrapper
internally
and is the main class for you to use if you want to get use of the data requests approach to FSUIPC that this SDK offers. Actually, you don't even have to know about FSUIPCWrapper
class if you want to use
the FSUIPC
class.
There are 4 other main packages, which all contains classes/interfaces for use with the FSUIPC
class. The com.mouseviator.fsuipc.datarequest
contains classes/interfaces being helpful/needed when
writing brand new type of data request class for use with the FSUIPC
class. The com.mouseviator.fsuipc.datarequest.primitives
package contains classes that implements all (well, maybe most, so I am not lying)
Java primitive data types of data requests for use with the FSUIPC
class. That is, if you want to read/write byte, short, integer etc from/to the simulator. The com.mouseviator.fsuipc.datarequest.advanced
contains above the primitive data requests. Well, for now it only contains the FSControlRequest
class,
which implements data request to send any FS control to flight simulator and it is not that complex either :).
The last package, the com.mouseviator.fsuipc.helpers
(and it's sub-packages) contains couple of helper classes, that you can use to gather specific data, without having to care about FSUIPC offsets and conversions of values. For example, the
AircraftHelper
class has the AircraftHelper.getIAS()
function which will return the data request to read/write aircraft IAS in knots. It will return/expect the value
as floating point value. Yes, there is just a couple of classes with just a couple of methods. It is nearly impossible for me to cover all FSUIPC offsets.
That is for a quick overview. Read the documentation of FSUIPC
class, where you will find more info and also some examples of the usage.
Package | Description |
---|---|
com.mouseviator.fsuipc |
This package contains two main classes that implement the Java FSUIPC SDK.
|
com.mouseviator.fsuipc.datarequest |
This package provides interfaces
IDataRequest , IReadOnlyRequest and IWriteOnlyRequest and an abstract class DataRequest that are basic
building blocks for creating data requests to use with FSUIPC class. |
com.mouseviator.fsuipc.datarequest.advanced |
This package contains above the primitive data type requests...
|
com.mouseviator.fsuipc.datarequest.primitives |
This package contains classes that implement data request for primitive data types, such as Byte, Integer, Long, Float, Double, String...
|
com.mouseviator.fsuipc.helpers |
This package (and sub-packages) contains helper classes to get data requests for use with
FSUIPC class to gather various sim data. |
com.mouseviator.fsuipc.helpers.aircraft |
This package contains helper classes to get data requests for use with
FSUIPC class to gather various aircraft related data. |
com.mouseviator.fsuipc.helpers.avionics |
This package contains helper classes to get data requests for use with
FSUIPC class to gather various aircraft avionics related data. |