Files
qc2-reader/vendor/libltkc/ltkc_connection.h
2026-03-09 09:01:17 -04:00

191 lines
6.2 KiB
C
Executable File

/*
*****************************************************************************
* *
* IMPINJ CONFIDENTIAL AND PROPRIETARY *
* *
* This source code is the sole property of Impinj, Inc. Reproduction or *
* utilization of this source code in whole or in part is forbidden without *
* the prior written consent of Impinj, Inc. *
* *
* (c) Copyright Impinj, Inc. 2007,2008. All rights reserved. *
* *
*****************************************************************************/
/**
*****************************************************************************
**
** @file ltkc_connection.h
**
** @brief Types and function prototypes for handling
** two-way LLRP message traffic
**
*****************************************************************************/
/* Forward type declarations */
struct LLRP_SConnection;
typedef struct LLRP_SConnection LLRP_tSConnection;
struct bio_st;
/**
*****************************************************************************
**
** @brief Structure of an LLRP connection instance
**
** An LLRP connection consists of:
** - A file descriptor (fd) likely, but not necessarily, a socket
** - An input queue of messages already received. Used to hold
** asynchronous messages while awaiting a response.
** - Receiver state.
** - The receive buffer and count
** - Whether a frame is valid. Valid means that the receive
** buffer holds a frame and the MessageLength, MessageType,
** ProtocolVersion, and MessageID are valid (usable).
** Not valid with a nBuffer greater than 0 means that a frame
** is being received. Sometimes we want to look at the frame
** after it has been (or attempted to be) decoded.
** - Top-level frame variables: tSFrameExtract
** - Details of the last receiver error, including I/O errors,
** end-of-file (EOF), timeout, or decode errors.
** - Send state
** - The send buffer and count
** - Details of the last send error, including I/O errors,
** or encode errors.
**
*****************************************************************************/
struct LLRP_SConnection
{
/** The OpenSSL provided socket abstraction */
struct bio_st * pBio;
/** Error message if openConnectionToReader() or close...() fail */
const char * pConnectErrorStr;
/** The registry to consult for message/parameter types during decode. */
const LLRP_tSTypeRegistry * pTypeRegistry;
/** Head of queue of messages already received. Probably events.
** the queue is a one-way, NULL terminated linked list. */
LLRP_tSMessage * pInputQueue;
/** Size of the send/recv buffers, below, specified at construct() time */
unsigned int nBufferSize;
/** Receive state */
struct
{
/** The buffer. Contains incomming frame. */
unsigned char * pBuffer;
/** Count of bytes currently in buffer */
unsigned int nBuffer;
/** Valid boolean. TRUE means the buffer and frame summary
** variables are valid (usable). This is always
** FALSE mid receive */
int bFrameValid;
/** Frame summary variables. Derived by LLRP_FrameExtract() */
LLRP_tSFrameExtract FrameExtract;
/** Details of last I/O or decoder error. */
LLRP_tSErrorDetails ErrorDetails;
} Recv;
/** Send state */
struct
{
/** The buffer. Contains outgoing frame. */
unsigned char * pBuffer;
/** Count of bytes currently in buffer (from last send) */
unsigned int nBuffer;
/** Details of last I/O or encoder error. */
LLRP_tSErrorDetails ErrorDetails;
} Send;
};
/*
* ltkc_connection.c
*/
extern LLRP_tSConnection *
LLRP_Conn_construct (
const LLRP_tSTypeRegistry * pTypeRegistry,
unsigned int nBufferSize);
extern void
LLRP_Conn_destruct (
LLRP_tSConnection * pConn);
extern int
LLRP_Conn_openConnectionToReader (
LLRP_tSConnection * pConn,
const char * pReaderHostName);
extern int
LLRP_Conn_openSecureConnectionToReader (
LLRP_tSConnection * pConn,
const char * pReaderHostName);
extern int
LLRP_Conn_openConnectionToReaderWithPort (
LLRP_tSConnection * pConn,
const char * pReaderHostName,
const char * pPort);
extern int
LLRP_Conn_openSecureConnectionToReaderWithPort (
LLRP_tSConnection * pConn,
const char * pReaderHostName,
const char * pPort);
extern int
LLRP_Conn_closeConnectionToReader (
LLRP_tSConnection * pConn);
extern const char *
LLRP_Conn_getConnectError (
LLRP_tSConnection * pConn);
extern LLRP_tSMessage *
LLRP_Conn_transact (
LLRP_tSConnection * pConn,
LLRP_tSMessage * pSendMessage,
int nMaxMS);
extern const LLRP_tSErrorDetails *
LLRP_Conn_getTransactError (
LLRP_tSConnection * pConn);
extern LLRP_tResultCode
LLRP_Conn_sendMessage (
LLRP_tSConnection * pConn,
LLRP_tSMessage * pMessage);
extern const LLRP_tSErrorDetails *
LLRP_Conn_getSendError (
LLRP_tSConnection * pConn);
extern LLRP_tSMessage *
LLRP_Conn_recvMessage (
LLRP_tSConnection * pConn,
int nMaxMS);
extern LLRP_tSMessage *
LLRP_Conn_recvResponse (
LLRP_tSConnection * pConn,
int nMaxMS,
const LLRP_tSTypeDescriptor * pResponseType,
llrp_u32_t ResponseMessageID);
extern const LLRP_tSErrorDetails *
LLRP_Conn_getRecvError (
LLRP_tSConnection * pConn);