using System;
using static MAXT.MXFoundation.mxf;
using System.Runtime.InteropServices;
using System.Text;
namespace ar429_example
{
class ar429_embedded_recorder
{
const int BUFFER_SIZE = 4096;
const int FILE_SIZE = 256 * 1024 * 1024;
static void Main(string[] args)
{
UInt32 rc;
UInt64 server;
var device = new UInt64[1];
var module = new UInt64[1];
UInt64 count = 0;
var tx429 = new UInt64[1];
var rx429 = new UInt64[1];
UInt64 flash = 0;
UInt64 fileIdx = 0, fileSize;
UInt32 needUnmount = Convert.ToUInt32(false);
#if LOCAL
#else
rc =
mxfServerConnect(
"192.168.0.1",
"admin",
"admin", Convert.ToUInt32(
false), out server);
#endif
if (rc != MAXT_SUCCESS)
{
Console.Write("Failed to connect; rc=0x{0:x8}", rc);
Console.Write("\nPress a key to terminate\n");
Console.ReadKey();
return;
}
Console.Write("\nStarting\n");
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS && count > 0)
if (rc == MAXT_SUCCESS && count > 0)
if (rc == MAXT_SUCCESS && count > 0)
if (rc == MAXT_SUCCESS && count == 0)
rc = MAXT_ERROR_NOT_FOUND;
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)
if (rc == MAXT_SUCCESS && nvInfo.type == MXF_EMBEDDED_NVSTORAGE_TYPE_EMMC)
{
needUnmount = Convert.ToUInt32(true);
}
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_ERROR_NVSTORAGE_NOT_FORMATTED)
{
Console.Write("Formatting...\n");
Console.Write("Done\n");
count = 0;
}
}
if (rc == MAXT_SUCCESS)
{
if (count > 0)
{
if (rc == MAXT_SUCCESS)
{
if (fileSize == FILE_SIZE / nvInfo.sectorSize)
{
fileIdx = 0;
if (rc == MAXT_SUCCESS)
Console.Write("File #{0} reset\n", fileIdx);
}
else
{
Console.Write("Formatting...\n");
Console.Write("Done\n");
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
Console.Write("File #{0} allocated\n", fileIdx);
}
}
}
else
{
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
Console.Write("File #{0} allocated\n", fileIdx);
}
}
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
rc = TX429PeriodicScheduling(tx429[0]);
if (rc == MAXT_SUCCESS)
rc = read429RecordsFromEmbeddedFlash(flash, fileIdx);
if (rc == MAXT_SUCCESS)
if (needUnmount > 0)
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.Write("\nPress enter to terminate\n");
Console.ReadKey();
return;
}
private static UInt32 TX429PeriodicScheduling(UInt64 txChannel)
{
UInt64 schedule;
var msg = new UInt64[3] { 0, 0, 0 };
UInt32 data, ssm = 0;
UInt32 rc;
var labelMsg0 = new UInt64[6] { 004, 077, 0103, 0104, 0251, 0252 };
var labelMsg1 = new UInt64[2] { 0100, 0110 };
var labelMsg2 = new UInt64[3] { 0140, 0141, 0143 };
var bufferMsg0 = new UInt64[6];
var bufferMsg1 = new UInt64[2];
var bufferMsg2 = new UInt64[3];
UInt32 rec, indexBuffer;
double bnr;
IntPtr recPtr = IntPtr.Zero;
try
{
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
if (rc == MAXT_SUCCESS)
for (rec = 0; rec < 6 && rc == MAXT_SUCCESS; rec++)
{
if (rc == MAXT_SUCCESS)
{
data = 0;
switch (rec)
{
case 0:
data = 0x40000;
ssm = 0;
break;
case 1:
bnr = 100.123;
data >>= 10;
ssm = 3;
break;
case 2:
bnr = 400.126;
data >>= 10;
ssm = 3;
break;
case 3:
bnr = -25;
data >>= 10;
ssm = 3;
break;
case 4:
bnr = 2222.2;
data >>= 10;
ssm = 3;
break;
case 5:
bnr = 333.3;
data >>= 10;
ssm = 3;
break;
}
if (rc == MAXT_SUCCESS)
{
Marshal.StructureToPtr(rec429, recPtr, true);
}
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
for (rec = 0; rec < 2 && rc == MAXT_SUCCESS; rec++)
{
if (rc == MAXT_SUCCESS)
{
data = 0;
switch (rec)
{
case 0:
bnr = 45.08;
data >>= 10;
ssm = 3;
break;
case 1:
bnr = 44;
data >>= 10;
ssm = 3;
break;
}
if (rc == MAXT_SUCCESS)
{
Marshal.StructureToPtr(rec429, recPtr, true);
}
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
for (rec = 0; rec < 3 && rc == MAXT_SUCCESS; rec++)
{
if (rc == MAXT_SUCCESS)
{
data = 0;
switch (rec)
{
case 0:
bnr = 5;
data >>= 10;
ssm = 3;
break;
case 1:
bnr = -2;
data >>= 10;
ssm = 3;
break;
case 2:
bnr = 0;
data >>= 10;
ssm = 3;
break;
}
if (rc == MAXT_SUCCESS)
{
Marshal.StructureToPtr(rec429, recPtr, true);
}
}
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
{
Console.Write("Running periodic transmission, please wait...\n\r");
}
if (rc == MAXT_SUCCESS)
{
}
if (rc == MAXT_SUCCESS)
Console.Write("\n\rTransmission stopped\n\r");
for (indexBuffer = 0; indexBuffer < 6; indexBuffer++)
{
if (bufferMsg0[indexBuffer] > 0)
}
for (indexBuffer = 0; indexBuffer < 2; indexBuffer++)
{
if (bufferMsg1[indexBuffer] > 0)
}
for (indexBuffer = 0; indexBuffer < 3; indexBuffer++)
{
if (bufferMsg2[indexBuffer] > 0)
}
Marshal.FreeHGlobal(recPtr);
return rc;
}
private static UInt32 read429RecordsFromEmbeddedFlash(UInt64 flash, UInt64 fileIdx)
{
IntPtr recPtr = IntPtr.Zero, p = IntPtr.Zero;
UInt64 msgReadCnt, byteReadCnt;
UInt64 iRec, iMsg = 0, label, sdi, ssm, parity, data;
UInt32 rc = 0;
UInt64 result;
double bnr;
try
{
recPtr = Marshal.AllocHGlobal(BUFFER_SIZE);
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
Console.Write("Reading from flash\n\n");
if (rc == MAXT_SUCCESS)
{
do
{
for (iRec = 0, p = recPtr; iRec < msgReadCnt; iRec++, iMsg++)
{
switch (label)
{
case 004:
data >>= 8;
result = (data & 0xf) + (((data >> 4) & 0xf) * 10) + (((data >> 8) & 0xf) * 100);
result *= 100;
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5} Feet\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, result);
break;
case 077:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.000} MLb-in\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
case 0100:
case 0110:
case 0140:
case 0141:
case 0143:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.00}Deg/180\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
case 0103:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.00} Knots\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
case 0104:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.00} Ft/Min\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
case 0251:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.000}N.M.\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
case 0252:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:.0} Min.\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, bnr);
break;
default:
Console.Write(
"{0:00} - time tag={1} (arw=0x{2:x8}): label={3:000}, sdi={4}, data={5:X5}\n\r", iMsg, rec429.
timeTag, rec429.
data, label, sdi, data);
break;
}
}
} while (rc == MAXT_SUCCESS && msgReadCnt > 0);
}
if (recPtr != IntPtr.Zero)
Marshal.FreeHGlobal(recPtr);
return rc;
}
}
}