OpenClovis Logo

API Usage Examples
External Data Representation (XDR)

Code Examples. More...

Code Examples.

Marshall the data, array and pointer of type ClUint8T

ClRcT rc = CL_OK;
ClBufferHandleT inMsgHdl = 0;
ClBufferHandleT outMsgHdl = 0;
ClUint8T uint8Data = 120;
ClUint8T uint8Arr[10] = {0};
ClUint8T *uint8Ptr = NULL;
ClUint32T i = 0;
ClUint32T funcNo = CL_EO_GET_FULL_FN_NUM
ClUint32T rmdFlags = 0;
ClIocAddressT address = {{0}};
/*Allocate Pointer*/
uint8Ptr = (ClUint8T*)clHeapAllocate (10*sizeof(ClUint8T));
if(NULL != uint8Ptr)
{
clLogError("EXP","XDR", "Memory allocation Failed.");
}
for(i = 0; i < 10; i++)
{
uint8Arr[i] = i;
uint8Ptr[i] = 10 - i;
}
/*inMsgHdl buffer create*/
rc = clBufferCreate(&inMsgHdl);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Buffer creation Failed.");
return rc;
}
/* Marshall ClUint8T data */
rc = clXdrMarshallClUint8T(&uint8Data, inMsgHdl, 0);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Marshalling of ClUint8T data Failed.");
return rc;
}
/*Marshall ClUint8T array*/
rc = clXdrMarshallArrayClUint8T(uint8Arr, sizeof(uint8Arr) /
sizeof(ClUint8T), inMsgHdl, 0);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Marshalling of ClUint8T array Failed.");
return rc;
}
/*Marshall ClUint8T ptr*/
rc = clXdrMarshallPtrClUint8T(uint8Ptr, 10, inMsgHdl, 1);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Marshalling of ClUint8T pointer Failed.");
return rc;
}
rmdFlags &= ~CL_RMD_CALL_ASYNC;
address.iocPhyAddress.portId = /*Fill this with the appropriate port id
for rmd call*/
/*Master Addr get*/
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Failed to get master address.");
return rc;
}
/*outMsgHdl buffer create*/
rc = clBufferCreate(&outMsgHdl);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Buffer creation Failed.");
return rc;
}
/*RMD for ClUint8T*/
rc = clRmdWithMsg(address, funcNo, inMsgHdl, outMsgHdl,
rmdFlags, &rmdOptions, NULL);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Rmd call Failed.");
return rc;
}
clBufferDelete(&outMsgHdl);

Unmarshall the data, array and pointer of type ClUint8T

/*Get the in-message-handle 'inMsgHdl' and out-message-handle 'outMsgHdl'
from RMD receieve function. */
ClRcT rc = CL_OK;
ClUint8T recvData = 0;
ClUint8T recvArr[10] = {0};
ClUint8T *recvPtr = NULL;
/*Unmarshall data, it will get stored in recvData*/
rc = clXdrUnmarshallClUint8T(inMsgHdl, &recvData);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Unmarshalling of Uint8T data Failed.");
return rc;
}
/*Unmarshall 10 array elements, it will get stored in recvArr*/
rc = clXdrUnmarshallArrayClUint8T(inMsgHdl, &recvArr, 10);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Unmarshalling of Uint8T array Failed.");
return rc;
}
/*Unmarshall 10 elements of type ClUint8T, it will get stored in recvPtr*/
rc = clXdrUnmarshallPtrClUint8T(inMsgHdl, (void**)&recvPtr, 10);
if(rc != CL_OK)
{
clLogError("EXP","XDR", "Unmarshalling of Uint8T pointer Failed.");
return rc;
}
if(rc == CL_OK)
{
/*Free the pointer allocated in clXdrUnmarshallPtrClUint8T()*/
clHeapFree(recvPtr);
}

Generated on Tue Jan 10 10:29:15 PST 2012 for OpenClovis SDK using Doxygen