using System;
using static MAXT.MXFoundation.mxf;
using System.Runtime.InteropServices;
using System.Text;
namespace irigb_example
{
class irigb_1pps
{
static void Main(string[] args)
{
UInt32 rc;
UInt64 server = 0;
UInt64 device = 0;
var module = new UInt64[1];
var txChannel = new UInt64[1];
UInt64 txBuffer = 0;
IntPtr recPtr = IntPtr.Zero;
UInt64 moduleCount = 0;
UInt64 channelCount = 0;
UInt64 txBufferSize = 0;
IntPtr txHostBuffer = IntPtr.Zero;
UInt64 irigbStatus = 0;
UInt64 timer = 0;
# if LOCAL
#else
#endif
if (rc != MAXT_SUCCESS)
{
Console.Write("Failed to connect; rc=0{0:X8}", rc);
Console.ReadKey();
return;
}
if (rc == MAXT_SUCCESS)
{
Console.Write("Starting ...\n");
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
rc =
mxfModuleChannelAllGet(module[0], MXF_CLASS_DISCRETE, MXF_SCLASS_TX_CHANNEL, 1, out channelCount, txChannel);
if (rc == MAXT_SUCCESS && channelCount == 0)
rc = MAXT_ERROR_NOT_FOUND;
if (rc == MAXT_SUCCESS)
{
if (rc == MAXT_SUCCESS)
{
try
{
txHostBuffer = Marshal.AllocHGlobal((int)txBufferSize);
}
catch (OutOfMemoryException)
{
rc = MAXT_ERROR_MEM;
}
}
}
if (rc == MAXT_SUCCESS)
{
UInt64 bcd;
var time = DateTime.UtcNow.AddYears(-1970);
rc =
mxfDeviceIrigbBcdCompose((UInt64)time.Year, (UInt64)time.Day, (UInt64)time.Hour, (UInt64)time.Minute, (UInt64)time.Second, out bcd);
if (rc == MAXT_SUCCESS)
}
if (rc == MAXT_SUCCESS)
{
Console.Write("Configuring IRIG-B\n");
}
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
if (rc == MAXT_SUCCESS)
rc =
mxfAttributeUint64Set(device, KMXF_DEVICE_IRIGB_INPUT_SIGNAL, VMXF_DEVICE_IRIGB_INPUT_SIGNAL_DIGITAL);
if (rc == MAXT_SUCCESS)
{
do
{
} while (rc == MAXT_SUCCESS && (irigbStatus != MXF_IRIGB_STATUS_NO_SIGNAL) && (irigbStatus != MXF_IRIGB_STATUS_LOCKED));
}
if (rc == MAXT_SUCCESS)
{
if (irigbStatus == MXF_IRIGB_STATUS_LOCKED)
else
{
Console.Write("No IRIG-B signal found\n\r");
rc = MAXT_ERROR_IRIGB_NO_SIGNAL;
}
}
if (rc == MAXT_SUCCESS)
{
recPtr = txHostBuffer;
rec.
control = MXF_DISCRETE_TX_REC_CTRL_PULSE_START;
}
if (rc == MAXT_SUCCESS)
{
timer /= 1 * 1000 * 1000 * 1000;
timer *= 1 * 1000 * 1000 * 1000;
timer += 2 * 1000 * 1000 * 1000;
Console.Write("Starting 1PPS ...\n");
Marshal.StructureToPtr(rec, recPtr, true);
}
if (rc == MAXT_SUCCESS)
{
}
if (rc == MAXT_SUCCESS)
{
recPtr = txHostBuffer;
recPtr = txHostBuffer;
Marshal.StructureToPtr(rec, recPtr, true);
}
if (txBuffer > 0)
if (txHostBuffer != IntPtr.Zero)
Marshal.FreeHGlobal(txHostBuffer);
if (rc != MAXT_SUCCESS)
{
StringBuilder errorString = new StringBuilder(256);
Console.WriteLine("ERROR # 0x{0:X} {1}", rc, errorString + "\n\r");
}
Console.Write("Terminating ...\n");
Console.Write("\nPress a key to terminate\n");
Console.ReadKey();
return;
}
}
}