292 lines
14 KiB
C
292 lines
14 KiB
C
|
|
//-----------------------------------------------------------------------------
|
||
|
|
// (c) 2008 by Basler Vision Technologies
|
||
|
|
// Section: Vision Components
|
||
|
|
// Project: GenApi
|
||
|
|
// Author: Fritz Dierks
|
||
|
|
// $Header$
|
||
|
|
//
|
||
|
|
// License: This file is published under the license of the EMVA GenICam Standard Group.
|
||
|
|
// A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
|
||
|
|
// If for some reason you are missing this file please contact the EMVA or visit the website
|
||
|
|
// (http://www.genicam.org) for a full copy.
|
||
|
|
//
|
||
|
|
// THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
|
||
|
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||
|
|
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
|
||
|
|
// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||
|
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||
|
|
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||
|
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
|
// POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
//-----------------------------------------------------------------------------
|
||
|
|
/*!
|
||
|
|
\file
|
||
|
|
\brief Exported C functions as defined by the Camera Link standard v1.1
|
||
|
|
*/
|
||
|
|
#ifndef CLPROTOCOL_CLSERIAL_H
|
||
|
|
#define CLPROTOCOL_CLSERIAL_H
|
||
|
|
|
||
|
|
#include <CLProtocol\CLSerialTypes.h>
|
||
|
|
|
||
|
|
//==============================================================================
|
||
|
|
// Macros
|
||
|
|
//==============================================================================
|
||
|
|
|
||
|
|
#if (defined(__cplusplus) || defined(__cplusplus__))
|
||
|
|
#define USER_EXTERN_C extern "C"
|
||
|
|
#else
|
||
|
|
#define USER_EXTERN_C
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef CLSERIAL_EXPORTS
|
||
|
|
#define CLSERIALEXPORT USER_EXTERN_C __declspec(dllexport)
|
||
|
|
#else
|
||
|
|
#define CLSERIALEXPORT USER_EXTERN_C __declspec(dllimport)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifndef CLSERIALCC
|
||
|
|
// Note that the CLAllSerial.dll uses __stdcall instead of __cdecl
|
||
|
|
#define CLSERIALCC __cdecl
|
||
|
|
#endif
|
||
|
|
|
||
|
|
//==============================================================================
|
||
|
|
// exported functions
|
||
|
|
//==============================================================================
|
||
|
|
|
||
|
|
/*! \ingroup PublicInterfaces */
|
||
|
|
/*@{*/
|
||
|
|
|
||
|
|
/*! \defgroup CLSerialInterface CLSerial C-Function Interface */
|
||
|
|
/*@{*/
|
||
|
|
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function returns the name of the manufacturer represented by the index parameter
|
||
|
|
and the version of the Camera Link specifications with which the specified .dll complies.
|
||
|
|
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_BUFFER_TOO_SMALL
|
||
|
|
CL_ERR_FUNCTION_NOT_FOUND
|
||
|
|
CL_ERR_INVALID_INDEX
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetManufacturerInfo (
|
||
|
|
CLINT8* ManufacturerName, /*!< A pointer to a user-allocated buffer into which the function
|
||
|
|
copies the manufacturer name. The returned name is
|
||
|
|
NULL-terminated. In the case that the .dll conforms to the October 2000 spec,
|
||
|
|
this parameter will contain the file name of the .dll rather than
|
||
|
|
the manufacturer name. */
|
||
|
|
CLUINT32* bufferSize, /*!< As an input, this value should be the size of the buffer that
|
||
|
|
is passed. On successful return, this parameter contains the
|
||
|
|
number of bytes written into the buffer, including the NULL
|
||
|
|
termination character. On CL_ERR_BUFFER_TOO_SMALL,
|
||
|
|
this parameter contains the size of the buffer needed to write
|
||
|
|
the data text. */
|
||
|
|
CLUINT32* version /*!< The version of the Camera Link Specifications with which this
|
||
|
|
.dll complies. */
|
||
|
|
);
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function initializes the device referred to by serialIndex and returns
|
||
|
|
a pointer to an internal serial reference structure.
|
||
|
|
\return
|
||
|
|
On completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_PORT_IN_USE
|
||
|
|
CL_ERR_INVALID_INDEX
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clSerialInit(
|
||
|
|
CLUINT32 serialIndex, //!< A zero-based index value. For n serial devices
|
||
|
|
//!< in your system supported by this library,
|
||
|
|
//!< serialIndex has a range of 0 to(n-1).
|
||
|
|
//!< The order of the serial devices is vendor specific.
|
||
|
|
hSerRef* serialRefPtr //!< Points to a value that contains, on a successful call,
|
||
|
|
); //!< a pointer to the vendor-specific reference to the current session.
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function reads numBytes from the serial device referred to by serialRef.
|
||
|
|
clSerialRead will return when numBytes are available at the serial port or
|
||
|
|
when the serialTimeout period has passed.
|
||
|
|
|
||
|
|
Upon success, numBytes are copied into buffer.
|
||
|
|
In the case of any error, including CL_ERR_TIMEOUT, no data is copied into buffer.
|
||
|
|
|
||
|
|
\return On completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_TIMEOUT
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clSerialRead(
|
||
|
|
hSerRef serialRef, //!< The value obtained from the clSerialInit function.
|
||
|
|
CLINT8* buffer, //!< Points to a user-allocated buffer. Upon a successful call,
|
||
|
|
//!< buffer contains the data read from the serial device.
|
||
|
|
//!< Upon failure, this buffer is not affected.
|
||
|
|
//!< Caller should ensure that buffer is at least numBytes in size.
|
||
|
|
CLUINT32* bufferSize, //!< This is the number of bytes requested by the caller.
|
||
|
|
CLUINT32 serialTimeOut //!< Indicates the timeout in milliseconds.
|
||
|
|
);
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function writes the data in the buffer to the serial device referenced by serialRef.
|
||
|
|
\return On completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
CL_ERR_TIMEOUT
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clSerialWrite(
|
||
|
|
hSerRef serialRef, //!< The value obtained from the clSerialInit function.
|
||
|
|
CLINT8* buffer, //!< Contains data to write to the serial device.
|
||
|
|
CLUINT32* bufferSize, //!< Contains the buffer size indicating
|
||
|
|
//!< the number of bytes to be written.
|
||
|
|
//!< Upon a successful call, bufferSize contains the number of
|
||
|
|
//!< bytes written to the serial device.
|
||
|
|
CLUINT32 serialTimeOut //!< Indicates the timeout in milliseconds.
|
||
|
|
);
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function closes the serial device and cleans up the resources associated with serialRef.
|
||
|
|
Upon return, serialRef is no longer usable.
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT void CLSERIALCC
|
||
|
|
clSerialClose(
|
||
|
|
hSerRef serialRef //!< The value obtained from the clSerialInit function for clean up.
|
||
|
|
);
|
||
|
|
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function returns the number of serial ports in your system from a specified manufacturer.
|
||
|
|
Use this number to determine the number of times you should loop through the
|
||
|
|
clGetSerialPortIdentifier function.
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_FUNCTION_NOT_FOUND
|
||
|
|
CL_ERR_MANU_DOES_NOT_EXIST
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetNumSerialPorts(
|
||
|
|
CLUINT32* numSerialPorts //!< The number of serial ports in your system
|
||
|
|
); //!< that you can access with the current .dll.
|
||
|
|
|
||
|
|
/*
|
||
|
|
\brief This function returns a manufacturer-specific identifier for each serial port in your system.
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_BUFFER_TOO_SMALL
|
||
|
|
CL_ERR_FUNCTION_NOT_FOUND
|
||
|
|
CL_ERR_INVALID_INDEX
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetSerialPortIdentifier(
|
||
|
|
CLUINT32 serialIndex, //!< A zero-based index value. The valid range for serialIndex
|
||
|
|
//!< is 0 to n-1, where n is the value of numSerialPorts,
|
||
|
|
//!< as returned by clGetNumManuSerialPorts.
|
||
|
|
CLINT8* PortID, //!< Manufacturer-specific identifier for the serial port.
|
||
|
|
//!< In the case that the manufacturer .dll conforms to the
|
||
|
|
//!< October 2000 specification, on return this parameter will
|
||
|
|
//!< be "Port #n" where n is a unique index for the port.
|
||
|
|
CLUINT32 *bufferSize //!< As an input, this value should be the size of the buffer that
|
||
|
|
); //!< is passed. On successful return, this parameter contains
|
||
|
|
//!< the number of bytes written into the buffer,
|
||
|
|
//!< including the NULL termination character.
|
||
|
|
//!< On CL_ERR_BUFFER_TOO_SMALL, this parameter contains the size
|
||
|
|
//!< of the buffer needed to write the data text.
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function will output how many bytes have are available at the port specified by serialRef.
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
CL_ERR_FUNCTION_NOT_FOUND
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetNumBytesAvail(
|
||
|
|
hSerRef serialRef, //!< The value obtained by the clSerialInit function.
|
||
|
|
CLUINT32 *numBytes //!< The number of bytes currently available to be read from the port.
|
||
|
|
);
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function will discard any bytes that are available in the input buffer.
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clFlushPort(
|
||
|
|
hSerRef serialRef //!< The value obtained by the clSerialInit function that describes the port to be flushed.
|
||
|
|
);
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function returns the valid baud rates of the current interface.
|
||
|
|
\return At completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
CL_ERR_FUNCTION_NOT_FOUND
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetSupportedBaudRates(
|
||
|
|
hSerRef serialRef, //!< Points to a value that contains, on a successful call,
|
||
|
|
//!< a pointer to the vendor-specific reference to the current session.
|
||
|
|
CLUINT32 *baudRates //!< Bitfield that describes all supported baud rates of the serial port
|
||
|
|
); //!< as described by serialRefPtr. See Table B-2 of the Camera Link
|
||
|
|
//!< docu for more information on constants.
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function sets the baud rate for the serial port of the selected device.
|
||
|
|
Use clGetSupportedBaudRate to determine supported baud rates.
|
||
|
|
\return On completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_INVALID_REFERENCE
|
||
|
|
CL_ERR_BAUD_RATE_NOT_SUPPORTED
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clSetBaudRate(
|
||
|
|
hSerRef serialRef, //!< The value obtained from the clSerialInit function.
|
||
|
|
CLUINT32 baudRate //!< The baud rate you want to use. This parameter expects the
|
||
|
|
); //!< values represented by the CL_BAUDRATE constants in table B-2.
|
||
|
|
//!< By default, the baud rate for serial communication is 9600.
|
||
|
|
|
||
|
|
/*!
|
||
|
|
\brief This function converts an error code to error text for display in a
|
||
|
|
dialog box or in a standard I/O window.
|
||
|
|
|
||
|
|
Note: clGetErrorText first looks for the error code in CCTserial.dll.
|
||
|
|
If the error code is not found in CCTserial.dll, it is not a standard Camera Link error.
|
||
|
|
clGetErrorText then passes the error code to the manufacturer-specific .dll,
|
||
|
|
which returns the manufacturer-specific error text.
|
||
|
|
\return On completion, this function returns one of the following status codes:
|
||
|
|
CL_ERR_NO_ERR
|
||
|
|
CL_ERR_BUFFER_TOO_SMALL
|
||
|
|
CL_ERR_ERROR_NOT_FOUND
|
||
|
|
*/
|
||
|
|
CLSERIALEXPORT CLINT32 CLSERIALCC
|
||
|
|
clGetErrorText(
|
||
|
|
CLINT32 errorCode, //!< The error code used to find the appropriate error text.
|
||
|
|
//!< An error code is returned by every function in this library.
|
||
|
|
CLINT8* errorText, //!< A caller-allocated buffer which contains the
|
||
|
|
//!< NULL-terminated error text on function return.
|
||
|
|
CLUINT32* errorTextSize //!< On success, contains the number of bytes written
|
||
|
|
); //!< into the buffer, including the NULL-termination character.
|
||
|
|
//!< This value should be the size in bytes of the error text
|
||
|
|
//!< buffer passed in. On CL_ERR__BUFFER_TOO_SMALL,
|
||
|
|
//!< contains the size of the buffer needed to write the error text.
|
||
|
|
|
||
|
|
|
||
|
|
/*@}*/ // CLSerialInterface
|
||
|
|
/*@}*/ // PublicInterfaces
|
||
|
|
|
||
|
|
|
||
|
|
//==============================================================================
|
||
|
|
// helper functions
|
||
|
|
//==============================================================================
|
||
|
|
|
||
|
|
|
||
|
|
#endif // CLPROTOCOL_CLSERIAL_H
|
||
|
|
|