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.

Packages
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.