MX Foundation 4
|
The hardware architecture of the MAX Technologies products (devices with modules) and the software design of the API services are closely related. In this section, the basic terminology that needs to be learned in order to use the services will be explained.
Without formally defining at this point all details of the implementation, the hierarchical view of the software and hardware structure is presented below;
Client <–> MX Foundation API <–> Server <–> Device <–> Module <–> Channel Class <–> Channel <–> Physical Port
Figure 1: Resources Structure Organization
The previous diagram can be described as follows:
This hierarchy becomes obvious in an application where each resource is defined by a HANDLE. A handle is an identifier used for accessing a specific resource. All the handles are logically linked to form the core structure of an application.
MX Foundation 4 (MXF4) is the API that the client application needs to call to access the MAXT hardware.
MXF4 is based on a client / server architecture.
The first step to communicate with MXF4 is to establish a connection to it with one of the mxfConnect functions. These functions will return a handle of type HMXF_SERVER that will be used later with other function calls.
The connection can be PCIe/PXIe, Ethernet or USB.
The second step is to initialize the library by calling the mxfSystemInit() function. The initialization will detect the installed devices and modules.
The System, Time and Network sections define the functions that can be used with a server handle.
The complete description of the Client / Server server functions is given in the section Client/Server.
A device is a piece of MAXT hardware on which modules are located. For example, the Flex1553-PCIe is a device on which five modules are available.
The table below lists the supported device:
Device Constant | Description |
---|---|
MXF_DEVICE_FLEX1553_PCIE | Flex1553-PCIe |
MXF_DEVICE_FLEXMULTI_1553 | FlexMulti 1553 |
MXF_DEVICE_FLEXMULTI_629 | FlexMulti 629 |
MXF_DEVICE_FLEXMULTI_664 | FlexMulti 664 |
MXF_DEVICE_FLEXMULTI_429 | FlexMulti 429 |
MXF_DEVICE_FLEXMULTI | FlexMulti |
MXF_DEVICE_PCIE502 | MAXPCIe 502 carrier |
MXF_DEVICE_PXIE500 | MAXPXIe 500 carrier |
MXF_DEVICE_FMOB429_PLUS | FlexMobile 429+ |
MXF_DEVICE_FLEXMAX_3U | FlexMAX 3U |
MXF_DEVICE_FLEXMAX_1U | FlexMAX 1U |
MXF_DEVICE_RELAYBOX | RelayBox |
The mxfSystemDeviceGet() function can be used to get the reference to a device. A handle of type HMXF_DEVICE will be returned. This handle will be used later with other function calls.
A module is a functional unit on a device, and contains one or more channels.
Depending on the device type one or more modules can be part of the device.
The table below lists the supported modules:
Module Constant | Description |
---|---|
MXF_MODULE_MIL1553MRT_EH | MIL-1553 Enhanced |
MXF_MODULE_A429_EH | ARINC 429 Enhanced |
MXF_MODULE_ASYNC_EH | ASYNC serial RS-422/485 Enhanced |
MXF_MODULE_DIOFIFO_EH | Discrete I/O Enhanced |
MXF_MODULE_MULTI_EH | Multi Enhanced |
MXF_MODULE_A629MRT_EH | ARINC 629 Enhanced |
MXF_MODULE_A708_EH | ARINC 708 Enhanced |
MXF_MODULE_A664 | ARINC 664 |
MXF_MODULE_CANBUS | CAN bus |
MXF_MODULE_A429E | IPM-429 module |
MXF_MODULE_ADC | IPM-ADC module |
MXF_MODULE_DAC | IPM-DAC module |
MXF_MODULE_ASYNC | IPM-ASYNC module |
MXF_MODULE_A708 | IPM-708 module |
MXF_MODULE_A629MRT_REV2 | IPM-629 module |
MXF_MODULE_MULTI | IPM-MULTI module |
MXF_MODULE_HFCE | IPM-HFCE module |
MXF_MODULE_MIL1553MRT | IPM-1553-MRT module |
MXF_MODULE_ASCBMRT | IPM-ASCB module |
MXF_MODULE_DIOFIFO24DIFF | IPM-DIO-24 module |
MXF_MODULE_DIO48 | IPM-DIO-48 module |
MXF_MODULE_DIOFIFO48 | IPM-DIO-48-FIFO module |
MXF_MODULE_FLEXDIO | FlexMAX DIO module |
MXF_MODULE_FLEXADC | FlexMAX ADC module |
MXF_MODULE_FLEXDAC | FlexMAX DAC module |
MXF_MODULE_FLEX429 | FlexMAX 429 module |
For instance, the Flex1553-PCIe has five modules: two MXF_MODULE_MIL1553MRT_EH, one MXF_MODULE_A429_EH, one MXF_MODULE_ASYNC_EH and one MXF_MODULE_DIOFIFO_EH.
The mxfDeviceModuleGet() function can be used to get the reference to a module. A handle of type HMXF_MODULE will be returned. This handle will be used later with other function calls.
At the heart of the MX Foundation multi-protocol library is the channel class concept.
Each of the communication channels (path to a port) supported by the MXF4 function libraries belongs to a channel class.
A channel class is specific to a given communication protocol or legacy I/O and provides channel abstraction and services encapsulation. MX Foundation provides a consistent set of services working the same way regardless of the channel classes.
The table below lists the supported channel class:
Channel Class Constant | Description |
---|---|
MXF_CLASS_MIL1553 | MIL-1553 |
MXF_CLASS_A429 | ARINC 429 |
MXF_CLASS_ASYNC_ENHANCED | ASYNC serial RS-422/485 |
MXF_CLASS_DISCRETE | Discrete I/O |
MXF_CLASS_ANALOG | Analog IO |
MXF_CLASS_CSDB | CSDB |
MXF_CLASS_ASCB | ASCB |
MXF_CLASS_A629 | ARINC 629 |
MXF_CLASS_A717 | ARINC 717 |
MXF_CLASS_A708 | ARINC 708 |
MXF_CLASS_HDLC | HDLC/SDLC |
MXF_CLASS_CLOCK | CLOCK |
MXF_CLASS_PULSE | Pulse |
MXF_CLASS_HANDSHAKE | Handshake |
MXF_CLASS_HFCE | HFCE |
MXF_CLASS_A664 | ARINC 664 |
MXF_CLASS_CANBUS | CAN |
MXF_CLASS_FLEXDIO | Flex Discrete IO |
MXF_CLASS_FLEXANALOG | Flex Analog IO |
A handle to a channel can be obtained with the mxfModuleChannelGet() or the mxfModuleChannelAllGet() function. A handle of type HMXF_CHANNEL will be returned. This handle will be used later with other function calls.
Using the channel handle, MX Foundation can easily retrieve all of the channel attributes and perform operations in accordance with the channel class.