MX Foundation 4
Basic Sampling

The way to setup a basic sampling receive application is as follows:

The MXF_ASCB_SAMPREC structure must be used for reading ASCB messages with sampling service.

Example

HMXF_SERVER server;
HMXF_CHANNEL bm;
HMXF_BUFFER sampAscbBuffer;
uint32 rc;
void* rxData=0;
MXF_ASCB_SAMPREC *sampRecAscb;
uint64 msgCount, byteCount;
uint64 rxRec;
uint64 loop=0;
uint32 data;
uint64 rxDataSize = 10*1024;
...
// Sets timebase to RTC usec
if(!rc)
rc = mxfSystemTimeBaseSet(server, MXF_TIMEBASE_DEVICE_USEC);
// Allocates 10KB buffer for ASCB sampling data
if(!rc)
rc = mxfRxSamplingBufferAlloc(bm, rxDataSize, &sampAscbBuffer, NULL);
if(!rc)
rc = mxfRxSamplingKilltimeSet(sampAscbBuffer, 2000000);
// Host allocation
if(!rc)
{
rxData = malloc(rxDataSize);
if(!rxData)
rc = MAXT_ERROR_MEM;
}
...
// Starts BM sampling
if(!rc)
rc = mxfRxSamplingStart(sampAscbBuffer);
printf("Sampling started for 5 seconds, waiting...\n");
mxfSleep(5000);
// Reads and displays received messages
if(!rc)
{
rc = mxfASCBRxSamplingRead(sampAscbBuffer, 0, 0, rxDataSize, &msgCount, &byteCount, rxData);
sampRecAscb = (MXF_ASCB_SAMPREC*)rxData;
for(rxRec=0; !rc && rxRec<msgCount; rxRec++)
{
printf("%012llu ", sampRecAscb->timeTag);
printf("%03u ", sampRecAscb->rate);
printf("%08X ", sampRecAscb->control);
printf("%04u ", (sampRecAscb->dataSize/2)-1);
for(data=0; data < min(5, sampRecAscb->dataSize/2); data++)
{
printf("%04X ", sampRecAscb->data[data]);
}
printf("\n\r");
// Gets next msg
mxfASCBNextSamplingRecordPtrGet(sampRecAscb, &sampRecAscb);
}
}
// Stops sampling
if(!rc)
rc = mxfRxSamplingStop(sampAscbBuffer);
...
Updated 10/23/2023