You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 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