#define LOCAL
#define LOOPBACK
using System;
using System.Text;
using System.Runtime.InteropServices;
using static MAXT.MXFoundation.mxf;
namespace mil1553_example
{
public class mil1553_aperiodic_frame
{
static void Main(string[] args)
{
UInt32 rc;
UInt64 deviceCount = 0;
UInt64 moduleCount = 0;
UInt64 server;
var device = new UInt64[1];
var module = new UInt64[2];
UInt64 bc = 0;
UInt64 bm = 0;
UInt64 rt4 = 0;
UInt64 rt5 = 0;
UInt64 bcLowAperBuffer = 0;
UInt64 bcHighAperBuffer = 0;
UInt64 bcBuffer0 = 0;
UInt64 bcBuffer1 = 0;
UInt64 bcBufferTx = 0;
UInt64 rt4Buffer = 0;
UInt64 rt5Buffer = 0;
UInt64 bmBuffer = 0;
UInt64 startTime = 0;
UInt64 txBufferSize = 0, rxBufferSize = 0;
IntPtr txBuffer = IntPtr.Zero;
IntPtr recPtr = IntPtr.Zero;
IntPtr rxBuffer = IntPtr.Zero;
rec1553.
data =
new UInt16[36];
UInt64 rxAcqStatus = 0;
UInt64 status, msgCount;
UInt64 byteCount;
UInt64 rxRec;
UInt32 data;
UInt32 checksumError = 0;
var errorString = new StringBuilder(200);
#if (LOCAL)
#else
rc =
mxfServerConnect(
"192.168.0.1",
"admin",
"admin", Convert.ToUInt64(
false), out server);
#endif
if (rc == MAXT_SUCCESS)
{
Console.Write("Starting ...\n\r");
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS && deviceCount == 0)
if (rc == MAXT_SUCCESS && deviceCount != 0)
{
if (moduleCount != 2)
{
Console.Write("This example only works for FM1553-4 or FX1553-4\n");
rc = MAXT_ERROR_MODEL;
}
}
else if (rc == MAXT_SUCCESS && deviceCount == 0)
rc = MAXT_ERROR_MODEL;
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
#if LOOPBACK
if (rc == MAXT_SUCCESS)
#endif
if (rc == MAXT_SUCCESS)
{
txBufferSize = 4096;
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
try
{
txBuffer = Marshal.AllocHGlobal((int)txBufferSize);
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
}
}
if (rc == MAXT_SUCCESS)
{
rxBufferSize = 10 * 1024;
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
try
{
rxBuffer = Marshal.AllocHGlobal((int)rxBufferSize);
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
msgid[0].
type = MXF_MIL1553_MSGTYPE_TX;
msgid[0].address = 4;
msgid[0].subAddress = 2;
msgid[0].reserved = 0;
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
minorFrame[0].modulo = 1;
minorFrame[0].options = MXF_MIL1553_TXPERIODIC_MJRFRAME_MSG_OPT_CHECKSUM_ENABLE;
minorFrame[0].buffer = bcBuffer0;
if (rc == MAXT_SUCCESS)
{
minorFrame[1].modulo = 1;
minorFrame[1].delay = 80000;
minorFrame[1].options = MXF_MIL1553_TXPERIODIC_MJRFRAME_MSG_OPT_DELAY;
minorFrame[1].buffer = bcBuffer1;
}
if (rc == MAXT_SUCCESS)
{
minorFrame[2].modulo = 1;
minorFrame[2].delay = 80000;
minorFrame[2].options = MXF_MIL1553_TXPERIODIC_MJRFRAME_MSG_OPT_DELAY;
minorFrame[2].buffer = bcBufferTx;
}
if (rc == MAXT_SUCCESS)
{
minorFrame[3].modulo = 1;
minorFrame[3].delay = 80000;
minorFrame[3].options = MXF_MIL1553_TXPERIODIC_MJRFRAME_MSG_OPT_DELAY;
minorFrame[3].buffer = bcBufferTx;
}
if (rc == MAXT_SUCCESS)
{
minorFrame[4].modulo = 1;
minorFrame[4].delay = 80000;
minorFrame[4].options = MXF_MIL1553_TXPERIODIC_MJRFRAME_MSG_OPT_DELAY;
minorFrame[4].buffer = bcBufferTx;
}
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
{
rec1553.
data[0] = 0x0000;
rec1553.
data[1] = 0x0000;
rec1553.
data[2] = 0x1111;
rec1553.
data[3] = 0x2222;
rec1553.
data[4] = 0x3333;
Marshal.StructureToPtr(rec1553, txBuffer, true);
}
if (rc == MAXT_SUCCESS)
{
rec1553.
data[0] = 0x0000;
rec1553.
data[1] = 0x1234;
rec1553.
data[2] = 0x5678;
rec1553.
data[3] = 0x9ABC;
rec1553.
data[4] = 0xDEF0;
Marshal.StructureToPtr(rec1553, txBuffer, true);
}
if (rc == MAXT_SUCCESS)
{
rec1553.
data[0] = 0x0000;
rec1553.
data[1] = 0xAAAA;
rec1553.
data[2] = 0xBBBB;
rec1553.
data[3] = 0xCCCC;
rec1553.
data[4] = 0xDDDD;
Marshal.StructureToPtr(rec1553, txBuffer, true);
}
if (rc == MAXT_SUCCESS)
{
Console.Write("Starting RT 4\n\r");
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
{
Console.Write("Starting RT 5\n\r");
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
startTime += 200000000;
if (rc == MAXT_SUCCESS)
{
}
if (rc == MAXT_SUCCESS)
{
rec1553.
timeTag = startTime + 52000000;
rec1553.
control = MXF_MIL1553_TXAPERIODIC_REC_CTRL_CHECKSUM_ENABLE;
rec1553.
data[1] = 0x1111;
rec1553.
data[2] = 0x1111;
rec1553.
data[3] = 0x1111;
rec1553.
data[4] = 0x1111;
Marshal.StructureToPtr(rec1553, txBuffer, true);
}
if (rc == MAXT_SUCCESS)
{
rec1553.
timeTag = startTime + 54000000;
rec1553.
control = MXF_MIL1553_TXAPERIODIC_REC_CTRL_CHECKSUM_ENABLE | MXF_MIL1553_TXAPERIODIC_REC_CTRL_GAP;
rec1553.
data[1] = 0x2222;
rec1553.
data[2] = 0x2222;
rec1553.
data[3] = 0x2222;
rec1553.
data[4] = 0x2222;
Marshal.StructureToPtr(rec1553, txBuffer, true);
}
if (rc == MAXT_SUCCESS)
{
rc =
mxfMIL1553RxAcqRead(bmBuffer, 0, rxBufferSize, out rxAcqStatus, out msgCount, out byteCount, rxBuffer);
recPtr = rxBuffer;
for (rxRec = 0; rxRec < msgCount && rc == MAXT_SUCCESS; rxRec++)
{
Console.Write(
"\n\r{0}:\t", rec1553.
timeTag);
Console.Write(
"Control: 0x{0:x8}", rec1553.
control);
if ((rec1553.
control & MXF_MIL1553_RX_REC_CTRL_MSG_CHECKSUM_ERROR) > 0)
checksumError++;
for (data = 0; data < rec1553.
dataSize / 2; data++)
{
if (data > 0 && (data % 5) == 0)
Console.Write("\n\r\t\t\t");
Console.Write(
" 0x{0:x4}", rec1553.
data[data]);
}
Console.Write("\n\r");
}
}
if (rc == MAXT_SUCCESS)
{
if ((rxAcqStatus & MXF_RXACQ_STATUS_BUFFER_FULL) > 0)
Console.Write("Acquisition stopped with buffer full\n");
}
if (rc == MAXT_SUCCESS)
Console.Write("Number of checksum error = {0}\n", checksumError);
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (txBuffer != IntPtr.Zero)
Marshal.FreeHGlobal(txBuffer);
if (rxBuffer != IntPtr.Zero)
Marshal.FreeHGlobal(rxBuffer);
if (rc != MAXT_SUCCESS)
{
{
errorString.Clear();
errorString.Append(string.Format("ERROR # 0x{0:x8}", rc));
}
Console.Write(errorString + "\n\r");
}
if (bcLowAperBuffer > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (bcHighAperBuffer > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (bcBuffer0 > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (bcBuffer1 > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (bcBufferTx > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (rt4Buffer > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (rt5Buffer > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
if (bmBuffer > 0)
{
if (rc != MAXT_SUCCESS)
Console.Write("Free buffer failed !\n\r");
}
Console.Write("\n\rPress enter to terminate\n\r");
Console.ReadKey();
return;
}
}
}