////////////////////////////////////////////////////////////////////////////////////////////////
// April 2006 - Snapshot has been implemented for sequenced operation with a PRX to support the
// SFD project.  It is only designed to work in conjunction with the HLPRX SDK, hence this file is protected
#ifndef DCTSNAPSHOT_H
#define DCTSNAPSHOT_H

#include "RawScan.h"
#include "DataCollection.h"
#include "NDTSError.h"

#ifdef __cplusplus
extern "C" {
#endif

DC_API NDTS_Boolean DC_SnapshotInitialise(DC_AssociatedSDK *pAssociatedSDK);
DC_API NDTS_Boolean DC_SnapshotUninitialise();
DC_API NDTS_Boolean DC_SetAScanSelectionGate(unsigned long cardIndex, unsigned long stepIndex, unsigned long gateIndex);
DC_API NDTS_Boolean DC_GetAScanAndGateDataFromSnapshot(unsigned long cardIndex, unsigned long step, short *pBuffer, unsigned long numberOfBufferValues, short *pAmplitude, short *pDepth);

DC_API NDTS_Boolean DC_GetFullBScanGateDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, NDTS_GateOutput *pGateData, int nSteps, int nGates);
DC_API NDTS_Boolean DC_GetOneStepGateDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, unsigned long stepIndex, NDTS_GateOutput *pGateData, int nGates);
DC_API NDTS_Boolean DC_GetOneStepLargeGateDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, unsigned long stepIndex, NDTS_GateOutputLarge *pGateData, int nGates);
DC_API NDTS_Boolean DC_GetOneStepLargeUnPackedGateDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, unsigned long stepIndex, NDTS_GateOutputLarge *pGateData, int nGates);
DC_API NDTS_Boolean DC_GetEncoderDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, long *pEncoders, int nEncoders);
DC_API unsigned long DC_ReturnNumberOfBScansInSnapshot(unsigned long cardIndex);
DC_API NDTS_Boolean DC_SetClearAScanOnUpdate(unsigned long cardIndex, NDTS_Boolean clearAScanOnUpdate);
DC_API NDTS_Boolean DC_SetFullAScanCapture(unsigned long cardIndex, NDTS_Boolean doFullACapture);
DC_API NDTS_Boolean CALL_CONV DC_GetFullAScanDataFromSnapshot(unsigned long cardIndex, unsigned long bScanIndex, unsigned long step, short *pBuffer, unsigned long numberOfBufferValues);
DC_API int CALL_CONV DC_ReturnNumberOfAScanSamples(unsigned long cardIndex, unsigned long bScanIndex);

// Swap the data bank being read.  Save the number of BScans in the last snapshot
DC_API NDTS_Boolean DC_SwapSnapshotDataBank(unsigned long cardIndex, unsigned long *numberOfBScans);

DC_API void DC_GetLogLevel(NDTS_LogLevel *pFile, NDTS_LogLevel *pApp, NDTS_LogLevel *pDebugger);
DC_API void DC_SetLogLevel(NDTS_LogLevel file, NDTS_LogLevel app, NDTS_LogLevel debugger);

DC_API NDTS_Boolean CALL_CONV DC_ExtractSnapshotOutput(unsigned long cardIndex, NDTS_RawScan *pRawScan, unsigned long step, unsigned long gateIndex, short *pBuffer, unsigned long numberOfBufferValues, short *pAmplitude, short *pDepth) ;

#ifdef __cplusplus
}
#endif

#endif
