using System;
using static MAXT.MXFoundation.mxf;
using System.Runtime.InteropServices;
using System.Text;
using System.Xml.Linq;
namespace hdlc_flexsmp_example {
class hdlc_flexsmp {
static void Main(string[] args) {
UInt32 rc = MAXT_SUCCESS;
UInt64 server = 0;
UInt64 rxChannel = 0;
UInt64 txChannel = 0;
UInt64 bufferSize = 0;
UInt64 mxfRxBuffer = 0;
UInt64 mxfTxBuffer = 0;
UInt64 rxAcqStatus = 0;
UInt64 msgCount = 0, byteCount = 0;
IntPtr recPtr = IntPtr.Zero;
#if (LOCAL)
#else
rc =
mxfConnectEthernet(
"192.168.0.1",
"admin",
"admin", Convert.ToUInt64(
false), out server);
#endif
if (rc == MAXT_SUCCESS) {
Console.WriteLine("Initializing ...");
}
if (rc == MAXT_SUCCESS) {
rc =
mxfChannelGet(server, MXF_CLASS_HDLC, MXF_SCLASS_RX_CHANNEL, MXF_MODULE_FLEXSMP, 0, out rxChannel);
}
if (rc == MAXT_SUCCESS) {
rc =
mxfChannelGet(server, MXF_CLASS_HDLC, MXF_SCLASS_TX_CHANNEL, MXF_MODULE_FLEXSMP, 0, out txChannel);
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
rc =
mxfAttributeUint64Set(txChannel, KMXF_HDLC_TX_INTERFRAME_TIME_FILL, VMXF_HDLC_TX_INTERFRAME_TIME_FILL_FLAGS);
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
rc =
mxfAttributeUint64Set(txChannel, KMXF_HDLC_ELECTRICAL_INTERFACE, VMXF_HDLC_ELECTRICAL_INTERFACE_RS485);
}
if (rc == MAXT_SUCCESS) {
}
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) {
}
if (rc == MAXT_SUCCESS) {
string dataString = "Hello, World!\0";
byte[] dataByte = Encoding.UTF8.GetBytes(dataString);
reserved = 0,
timeTag = 0,
control = 0,
repeatCount = 1,
dataSize = (UInt32)dataByte.Length + 2,
data = new UInt16[2048],
};
Buffer.BlockCopy(dataByte, 0, txRec.data, 0, dataByte.Length);
try {
recPtr = Marshal.AllocHGlobal((int)bufferSize);
}
catch (OutOfMemoryException) {
rc = MAXT_ERROR_MEM;
}
if (rc == MAXT_SUCCESS) {
Marshal.StructureToPtr(txRec, recPtr, false);
Console.WriteLine("Transmitting ...");
}
if (recPtr != IntPtr.Zero) {
Marshal.FreeHGlobal(recPtr);
}
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
try {
recPtr = Marshal.AllocHGlobal((int)bufferSize);
}
catch (OutOfMemoryException) {
rc = MAXT_ERROR_MEM;
}
if (rc == MAXT_SUCCESS) {
Console.WriteLine("Receiving ...");
rc =
mxfHDLCRxAcqRead(mxfRxBuffer, 1, bufferSize, out rxAcqStatus, out msgCount, out byteCount, recPtr);
if (rc == MAXT_SUCCESS && msgCount == 1) {
byte[] dataByte =
new byte[rxRec.
dataSize-2];
Buffer.BlockCopy(rxRec.
data, 0, dataByte, 0, dataByte.Length);
Console.WriteLine(
" Timetag: {0} Size: {1}", rxRec.
timeTag, rxRec.
dataSize);
Console.WriteLine(" String: {0}", Encoding.UTF8.GetString(dataByte, 0, dataByte.Length));
}
}
if (recPtr != IntPtr.Zero) {
Marshal.FreeHGlobal(recPtr);
}
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc == MAXT_SUCCESS) {
}
if (rc != MAXT_SUCCESS) {
var sb = new StringBuilder(256);
sb.Append(string.Format("ERROR # 0x{0:X8}", rc));
}
Console.WriteLine(sb);
}
Console.WriteLine("Terminating...");
if (mxfRxBuffer != 0) {
}
if (mxfTxBuffer != 0) {
}
Console.WriteLine("Press enter to exit");
Console.Read();
return;
}
}
}