260 lines
9.9 KiB
C
260 lines
9.9 KiB
C
/*
|
|
* PMDSDK 2
|
|
*
|
|
* File: pmdsdk2.h
|
|
* Author: Martin Profittlich
|
|
* Version: 1.0
|
|
*
|
|
* General header file for applications using the PMDSDK 2.0.
|
|
* Contains all necessary definitions and prototypes.
|
|
*
|
|
* Copyright (c) 2006-2007 PMD Technologies GmbH.
|
|
* All Rights Reserved.
|
|
*
|
|
*/
|
|
|
|
//
|
|
// Differences from MiniSDK 1.0:
|
|
//
|
|
// - Distance, amplitude and intensity data type is float (was double)
|
|
// - pmdGetRaw() is now pmdGetSourceData()
|
|
// - Error code values changed
|
|
// - User is responsible for memory (de-)allocation now
|
|
// - Info commands removed, introduced pmdSourceCommand instead
|
|
// - Plugins!
|
|
// - Multiple integration times and modulation frequencies
|
|
// - Only one connection command, camera identification via plugin/parameter
|
|
//
|
|
|
|
#ifndef PMDMSDK2_H_INCLUDED_2503171013
|
|
#define PMDMSDK2_H_INCLUDED_2503171013
|
|
|
|
#include "pmddatadescription.h"
|
|
#include "pmdheader.h"
|
|
|
|
#ifdef _WIN32
|
|
# ifndef DLLSPEC
|
|
# define DLLSPEC __declspec(dllimport)
|
|
# endif
|
|
#else
|
|
# ifdef DLLSPEC
|
|
# undef DLLSPEC
|
|
# endif
|
|
# define DLLSPEC
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// TYPES
|
|
|
|
/// Handle for a camera connection.
|
|
///This handle is used for all subsequent operations.
|
|
///
|
|
//typedef void* PMDHandle;
|
|
typedef unsigned PMDHandle;
|
|
|
|
// FUNCTIONS
|
|
|
|
ImageHeaderInformation *retriveHeader();
|
|
|
|
int pmdGetDistancesAsync(PMDHandle hnd, float *data, size_t maxLen);
|
|
int pmdGetAmplitudesAsync(PMDHandle hnd, float * data, size_t maxLen);
|
|
int pmdGetIntensitiesAsync(PMDHandle hnd, float * data, size_t maxLen);
|
|
|
|
|
|
/// Connect to a PMD camera or other data source
|
|
///\param hnd Empty PMDHandle structure. On success, this value
|
|
///will contain the handle for subsequent operations.
|
|
///\param rplugin Path of the camera plugin
|
|
///\param rparam Parameter for the camera plugin
|
|
///\param pplugin Path of the processing plugin. If this is NULL, no porcessing plugin will be loaded.
|
|
///\param pparam Parameter for the processing plugin
|
|
///\return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdOpen (PMDHandle * hnd, const char * rplugin, const char * rparam, const char * pplugin, const char * pparam);
|
|
|
|
/// Connect to a PMD camera or other data source without processing
|
|
///\param hnd Empty PMDHandle structure. On success, this value
|
|
///will contain the handle for subsequent operations.
|
|
///\param rplugin Path of the camera plugin
|
|
///\param rparam Parameter for the camera plugin
|
|
///\return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdOpenSourcePlugin (PMDHandle * hnd, const char * rplugin, const char * rparam);
|
|
|
|
/// Disconnect and close the handle.
|
|
/// \param hnd Handle of the connection.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdClose (PMDHandle hnd);
|
|
|
|
/// Get an error description from the last error.
|
|
/// Error messages are stored per handle. A new error associated with PMDHandle A
|
|
/// does not overwrite the last error message associated with PMDHandle B.
|
|
/// \param hnd Handle of the connection/plugin.
|
|
/// \param error Memory to hold the error message.
|
|
/// \param maxLen Maximum length of the error message, including the terminating zero byte.
|
|
/// Longer messages will be truncated.
|
|
DLLSPEC int pmdGetLastError (PMDHandle hnd, char * error, size_t maxLen);
|
|
|
|
/// Retrieve the a new frame from the camera.
|
|
/// To obtain the actual data, use pmdGetSourceData, pmdGetDistances,
|
|
/// pmdGetAmplitudes etc.
|
|
/// \param hnd Handle of the connection.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdUpdate (PMDHandle hnd);
|
|
|
|
/// Set the integration time of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the integration time.
|
|
/// \param t Integration time in microseconds.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdSetIntegrationTime (PMDHandle hnd, unsigned idx, unsigned t);
|
|
|
|
/// Get the integration time of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the integration time.
|
|
/// \param t Pointer to a variable to contain the
|
|
/// integration time in microseconds.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetIntegrationTime (PMDHandle hnd, unsigned * t, unsigned idx);
|
|
|
|
/// Get a supported integration time of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the integration time.
|
|
/// \param t The desired integration time
|
|
/// \param w Where to look for a valid integration time in respect to the desired
|
|
/// integration time (CloseTo, AtLeast or AtMost)
|
|
/// \param responsible Pointer to a variable to contain the
|
|
/// integration time in microseconds.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetValidIntegrationTime (PMDHandle hnd, unsigned * result, unsigned idx, Proximity w, unsigned t);
|
|
|
|
/// Set the modulation frequency of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the modulation frequency.
|
|
/// \param f Modulation frequency in Hz.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdSetModulationFrequency (PMDHandle hnd, unsigned idx, unsigned f);
|
|
|
|
/// Get the modulation frequency of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the modulation frequency.
|
|
/// \param t Pointer to a variable to contain the
|
|
/// modulation frequency in Hz.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetModulationFrequency (PMDHandle hnd, unsigned * f, unsigned idx);
|
|
|
|
/// Get a supported modulation frequency of the camera
|
|
/// \param hnd Handle of the connection.
|
|
/// \param idx Index of the modulation frequency.
|
|
/// \param f The desired modulation frequency
|
|
/// \param w Where to look for a valid modulation frequency in respect to the desired
|
|
/// modulation frequency (CloseTo, AtLeast or AtMost)
|
|
/// \param result Pointer to a variable to contain the
|
|
/// modulation frequency in Hz.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetValidModulationFrequency (PMDHandle hnd, unsigned * result, unsigned idx, Proximity w, unsigned f);
|
|
|
|
/// Get the raw data from the current frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param data Pointer to the memory to contain the address of the data.
|
|
/// \param maxLen Maximum length in bytes for the data
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetSourceData (PMDHandle hnd, void * data, size_t maxLen);
|
|
|
|
/// Get the size in bytes of the current raw data frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param size Will contain the size after the call
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetSourceDataSize (PMDHandle hnd, size_t * size);
|
|
|
|
/// Get the description of the current raw data frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param dd Will contain the PMDDataDescription after the call.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetSourceDataDescription (PMDHandle hnd, struct PMDDataDescription * dd);
|
|
|
|
/// Get the distance data from the current frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param data Pointer to a block of memory to contain the data.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetDistances (PMDHandle hnd, float * data, size_t maxLen);
|
|
|
|
/// Get the amplitude data from the current frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param data Pointer to a block of memory to contain the data.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetAmplitudes (PMDHandle hnd, float * data, size_t maxLen);
|
|
|
|
/// Get the intensity data from the current frame.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param data Pointer to a block of memory to contain the data.
|
|
/// \return PMD_OK on success, errorcode otherwise
|
|
///
|
|
DLLSPEC int pmdGetIntensities (PMDHandle hnd, float * data, size_t maxLen);
|
|
|
|
/// Execute an source plugin-specific command.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param result Pointer to a block of memory to contain the result string.
|
|
/// \param maxLen Maximum length of the result string, including terminating 0.
|
|
/// \param cmd The command to be executed.
|
|
///
|
|
DLLSPEC int pmdSourceCommand (PMDHandle hnd, char * result, size_t maxLen, const char * cmd);
|
|
|
|
/// Execute a processing plugin-specific command.
|
|
/// \param hnd Handle of the connection.
|
|
/// \param result Pointer to a block of memory to contain the result string.
|
|
/// \param maxLen Maximum length of the result string, including terminating 0.
|
|
/// \param cmd The command to be executed.
|
|
///
|
|
DLLSPEC int pmdProcessingCommand (PMDHandle hnd, char * result, size_t maxLen, const char * cmd);
|
|
|
|
// ADDITIONAL PROCESSING
|
|
|
|
DLLSPEC int pmdOpenProcessingPlugin (PMDHandle * hnd, const char * pplugin, const char * pparam);
|
|
|
|
DLLSPEC int pmdProcess (PMDHandle hnd,
|
|
unsigned numOut, struct PMDDataDescription * ddOut, void ** output,
|
|
unsigned numIn, struct PMDDataDescription * ddIn, void ** input);
|
|
|
|
DLLSPEC int pmdCanProcess (PMDHandle hnd, unsigned * memNeeded, unsigned type, unsigned numFmt, struct PMDDataDescription * fmt);
|
|
|
|
// SPECIAL FUNCTIONS
|
|
// additional header file? inline code?
|
|
DLLSPEC int pmdConnectFireWire (PMDHandle * hnd, unsigned index);
|
|
DLLSPEC int pmdConnectASample (PMDHandle * hnd, const char * address);
|
|
|
|
#ifndef PMD_NO_DEPRECATED
|
|
// DEPRECATED
|
|
DLLSPEC int pmdConnect (PMDHandle * hnd, const char * rplugin, const char * rparam, const char * pplugin, const char * pparam);
|
|
DLLSPEC int pmdConnectOnlyRaw (PMDHandle * hnd, const char * rplugin, const char * rparam);
|
|
DLLSPEC int pmdDisconnect (PMDHandle hnd);
|
|
DLLSPEC int pmdOpenAccessPlugin (PMDHandle * hnd, const char * rplugin, const char * rparam);
|
|
DLLSPEC int pmdGetRawData (PMDHandle hnd, void * data, size_t maxLen);
|
|
DLLSPEC int pmdGetRawDataSize (PMDHandle hnd, size_t * size);
|
|
DLLSPEC int pmdGetRawDataDescription (PMDHandle hnd, struct PMDDataDescription * dd);
|
|
DLLSPEC int pmdPlatformCommand (PMDHandle hnd, char * result, size_t maxLen, const char * cmd);
|
|
DLLSPEC int pmdConfigureProcess (PMDHandle hnd, char * result, size_t maxLen, const char * cmd);
|
|
DLLSPEC int pmdGetInfo (PMDHandle hnd, char * result, size_t maxLen, const char * key);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|