MX Foundation 4
flexdio_fifo_sampling.c
/******************************************************************************
//
// File:
// flexdio_fifo_sampling.c
//
// Copyright (c) MAX Technologies Inc. 1988-2022, All Rights Reserved.
// CONFIDENTIAL AND PROPRIETARY INFORMATION WHICH IS THE
// PROPERTY OF MAX TECHNOLOGIES INC.
//
// This example demonstrates how to perform sampling receive.
//
// Hardware requirements:
// - MAXT FlexMAX with FlexMAX DIO module.
//
*******************************************************************************/
#include "example.h"
//#define LOCAL
int main(void)
{
uint32 rc;
uint64 channelCount=0;
HMXF_SERVER server;
HMXF_CHANNEL rx=0;
HMXF_BUFFER bufferRx=0;
uint64 msgCount, byteCount;
uint32 rxBufferSize=0;
char errorString[200];
uint64 pin;
int loop=0;
// Connect to services and initialize environment
#ifdef LOCAL
rc = mxfServerConnect("0.0.0.0", "", "", FALSE, &server);
#else
rc = mxfServerConnect("192.168.0.1", "admin", "admin", FALSE, &server);
#endif
// Initialize MX Foundation library
if(!rc)
{
printf("Starting ...\n");
rc = mxfSystemInit(server);
}
// Get handle of discrete input channel
if(!rc)
rc = mxfChannelAllGet(server, MXF_CLASS_FLEXDIO, MXF_SCLASS_ALL, MXF_MODULE_FLEXDIO, 1, &channelCount, &rx);
if(!rc && !channelCount)
rc = MAXT_ERROR_NOT_FOUND;
// Set timebase to RTC usec
if(!rc)
rc = mxfSystemTimeBaseSet(server, MXF_TIMEBASE_DEVICE_USEC);
if(!rc)
rc = mxfAttributeUint64Set(rx, KMXF_FLEXDIO_RX_FIFO_MODE, VMXF_FLEXDIO_RX_FIFO_MODE_SAMPLING);
if(!rc)
rc = mxfAttributeUint64Set(rx, KMXF_FLEXDIO_RX_SAMP_PERIOD, 1000000);
// Configure all pins as input with pull-up
for(pin=0; pin<64 && !rc; pin++)
rc = mxfFlexDIOModeSet(rx, pin, MXF_FLEXDIO_MODE_IN_PULLUP);
// Allocate 4KB buffer for rx data
if(!rc)
{
rxBufferSize = 4*1024;
// Device allocation
rc = mxfRxSamplingBufferAlloc(rx, rxBufferSize, &bufferRx, NULL);
}
// Start acquisition
if(!rc)
rc = mxfRxSamplingStart(bufferRx);
// wait 5 seconds
if(!rc)
{
do
{
rc = mxfFlexDIORxSamplingRead(bufferRx, 0, 1, sizeof(MXF_FLEXDIO_SAMPREC), &msgCount, &byteCount, &rec);
if (!rc)
{
if (msgCount != 0)
{
printf("Timetag %"PRIu64" - data=0x%016"PRIx64"\n", rec.timeTag, rec.data);
}
mxfSleep(1000);
}
}while(!rc && (loop++<5));
}
// Stop acquisition
if(!rc)
rc = mxfRxSamplingStop(bufferRx);
if(rc)
{
if(mxfSystemErrorStringGet(server, rc, sizeof(errorString), errorString))
sprintf (errorString,"ERROR # 0x%08X", rc);
printf("%s\n\r", errorString);
}
//Frees all buffers
if(bufferRx)
// Unload MX Foundation library
printf("\nPress a key to terminate\n");
getchar();
return rc;
}
Updated 10/23/2023