using System;
using static MAXT.MXFoundation.mxf;
using System.Runtime.InteropServices;
using System.Text;
namespace ar429_example
{
class ar429_embedded_bridge
{
const int MAX_CHANNELS = 2;
const int BUFFER_SIZE = 8192;
const int MAX_TX_RECORDS_TO_TRANSMIT = 256;
static void Main(string[] args)
{
UInt32 rc;
UInt64 server;
UInt64 device = 0;
var module = new UInt64[1];
UInt64 count = 0;
var txChannel = new UInt64[MAX_CHANNELS];
var rxChannel = new UInt64[MAX_CHANNELS];
UInt64 rxBuffer = 0;
var txBuffer = new UInt64[MAX_CHANNELS];
UInt64 bridge = 0;
UInt64 i, indexBuffer;
string mask = "DM:XXXXXXXXXXXXXXXXXXXXXXXX10101010";
UInt64 modulo = 1;
UInt64 status, msgsCount = 0, bytesCount;
UInt64 label, sdi, data, ssm, parity;
UInt64 allocated = 0;
IntPtr hostBuffer = IntPtr.Zero;
IntPtr recPtr = IntPtr.Zero;
#if LOCAL
#else
rc =
mxfServerConnect(
"192.168.0.1",
"admin",
"admin", Convert.ToUInt64(
false), out server);
#endif
if (rc != MAXT_SUCCESS)
{
Console.WriteLine("Failed to connect; rc=0x{0:x8}", rc);
Console.WriteLine("Press a key to terminate");
Console.Read();
return;
}
Console.WriteLine("Starting");
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if ((rc == MAXT_SUCCESS) && (count == 0))
rc = MAXT_ERROR_NOT_FOUND;
if (rc == MAXT_SUCCESS)
rc =
mxfModuleChannelAllGet(module[0], MXF_CLASS_A429, MXF_SCLASS_RX_CHANNEL, MAX_CHANNELS, out count, rxChannel);
if ((rc == MAXT_SUCCESS) && (count == MAX_CHANNELS))
rc =
mxfModuleChannelAllGet(module[0], MXF_CLASS_A429, MXF_SCLASS_TX_CHANNEL, MAX_CHANNELS, out count, txChannel);
if ((rc == MAXT_SUCCESS) && (count != MAX_CHANNELS))
rc = MAXT_ERROR_NOT_FOUND;
if (rc == MAXT_SUCCESS)
for (i = 0; i < MAX_CHANNELS && (rc == MAXT_SUCCESS); i++)
{
if (rc == MAXT_SUCCESS)
#if LOOPBACK
if (rc == MAXT_SUCCESS)
#endif
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
try
{
hostBuffer = Marshal.AllocHGlobal(BUFFER_SIZE);
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
{
Console.WriteLine();
Console.WriteLine("Acquisition started");
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
for (i = 0; (i <= 50) && (rc == MAXT_SUCCESS); i++)
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
{
Console.WriteLine();
Console.WriteLine("Bridge started");
}
}
if (rc == MAXT_SUCCESS)
{
Console.WriteLine("Starting transmission");
recPtr = hostBuffer;
for (i = 0; (i < MAX_TX_RECORDS_TO_TRANSMIT) && (rc == MAXT_SUCCESS); i++)
{
parity = VMXF_A429_PARITY_ODD;
ssm = 0;
data = 0x135;
sdi = 2;
label = i;
Marshal.StructureToPtr(rec429, recPtr, false);
}
}
if (rc == MAXT_SUCCESS)
{
rc =
mxfA429TxAperiodicWrite(txBuffer[0], MXF_TXAPERIODIC_FLAG_DEFAULT, 0, MAX_TX_RECORDS_TO_TRANSMIT, hostBuffer);
if (rc == MAXT_SUCCESS)
Console.WriteLine("{0} records transmitted", MAX_TX_RECORDS_TO_TRANSMIT);
}
if (rc == MAXT_SUCCESS)
rc =
mxfA429RxAcqRead(rxBuffer, 0, BUFFER_SIZE, out status, out msgsCount, out bytesCount, hostBuffer);
recPtr = hostBuffer;
for (i = 0; (i < msgsCount) && (rc == MAXT_SUCCESS); i++)
{
Console.WriteLine("{0:D2}: Timetag {1} - ARINC word=[{2},{3},{4:X5},{5},{6}]",
i, rec429.
timeTag, parity, ssm, data, sdi, Convert.ToString((
int)label, 8).PadLeft(3,
'0'));
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
{
Console.WriteLine();
Console.WriteLine("Bridge stopped");
}
}
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
{
Console.WriteLine();
Console.WriteLine("Acquisition stopped");
}
}
if (rc != MAXT_SUCCESS)
{
StringBuilder buffer = new StringBuilder(256);
{
buffer.Clear();
buffer.Append(string.Format("ERROR # 0x{0:x8}", rc));
}
Console.Write(buffer + "\n\r");
}
Console.WriteLine();
Console.WriteLine("Terminating");
if (rxBuffer != 0)
for (indexBuffer = 0; indexBuffer < 2; indexBuffer++)
{
if (txBuffer[indexBuffer] != 0)
}
if (hostBuffer != IntPtr.Zero)
Marshal.FreeHGlobal(hostBuffer);
Console.WriteLine();
Console.WriteLine("Press enter to terminate");
Console.Read();
return;
}
}
}