The Xmp module provides the low-level interface between the controller and the MPI library. It defines the shared memory access between the controller's processor and the host CPU. It also contains several hardware constants and maximum values for resources. ALL data transactions between the MPI and controller are defined by this module.
The MPI provides a layer between the application code and the controller. It protects the application from xmp.h changes, hides controller complexity, handles semaphore locking, performs data validation and range checking, plus many other features. Normally, an application does not need the Xmp module. An application should ALWAYS use the MPI to access the controller. In some cases, the MPI may not have methods/structures to support a controller feature. For example, a custom feature may require support for direct access to the MPI, but it has not been yet been developed. In these cases, an application can use xmp.h and mpiControlMemoryGet/Set to directly access the controller.
The xmp.h file is version dependent. Make sure to ONLY use the xmp.h that was included with the MPI and controller firmware software package. Using mismatched xmp.h defines can cause unexpected and potentially dangerous behavior!
Be aware that the xmp.h is always changing. It is an internal file, used by the controller firmware and MPI. It is optimized for memory allocation and performance for the controller's processor. As new features are developed and improved, the xmp.h is modified. If you use xmp.h defines in your application code, make sure to check for changes when upgrading to new software releases.