1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include "XnGeneralDebugProcessor.h"
#include <XnDump.h>
XnGeneralDebugProcessor::XnGeneralDebugProcessor(XnDevicePrivateData* pDevicePrivateData) : XnDataProcessor(pDevicePrivateData, "GeneralDebug"), m_pDump(NULL)
{
}
XnGeneralDebugProcessor::~XnGeneralDebugProcessor()
{
xnDumpFileClose(m_pDump);
}
void XnGeneralDebugProcessor::ProcessPacketChunk(const XnSensorProtocolResponseHeader* pHeader, const XnUChar* pData, XnUInt32 nDataOffset, XnUInt32 nDataSize)
{
if (nDataOffset == 0)
{
// start of data. The first uint16 is the number of fields in the header, and then we have the data itself
const XnUInt16* pFields = (const XnUInt16*)pData;
XnUInt16 nFields = *pFields;
++pFields;
XnChar strFileName[XN_FILE_MAX_PATH] = "";
XnUInt32 nCharsWritten = 0;
XnUInt32 nLength = 0;
xnOSStrFormat(strFileName, XN_FILE_MAX_PATH, &nCharsWritten, "FirmwareDebug.");
nLength += nCharsWritten;
for (XnUInt16 i = 0; i < nFields; ++i)
{
xnOSStrFormat(strFileName + nLength, XN_FILE_MAX_PATH - nLength, &nCharsWritten, "%02d.", *pFields);
++pFields;
nLength += nCharsWritten;
}
xnOSStrFormat(strFileName + nLength, XN_FILE_MAX_PATH - nLength, &nCharsWritten, ".raw");
xnDumpFileClose(m_pDump);
m_pDump = xnDumpFileOpenEx("FirmwareDebug", TRUE, TRUE, strFileName);
const XnUChar* pDataStart = (const XnUChar*)pFields;
nDataSize -= XnUInt32(pDataStart - pData);
pData = pDataStart;
}
xnDumpFileWriteBuffer(m_pDump, pData, nDataSize);
if (nDataOffset + nDataSize == pHeader->nBufSize)
{
// end of data
xnDumpFileClose(m_pDump);
m_pDump = NULL;
}
}
|