nxdrvlinux/examples/tcpserver/Marshaller/APIHeader/HilTransport.h
Sebastian Doell ac2f4d1789 Add initial driver source based on svn versions:
- toolkit V2.8.0.1@14806
 - BSL V1.8.0.0@14590
 - tcpserver: V1.4.3.0@14676 (marshaller V2.4.0.1@14551)
2024-02-05 09:23:09 +01:00

316 lines
19 KiB
C

/*******************************************************************************
Copyright (c) Hilscher GmbH. All Rights Reserved.
*******************************************************************************
Filename:
$Id: HilTransport.h 7029 2015-07-16 12:09:53Z Robert $
Last Modification:
$Author: Robert $
$Date: 2015-07-16 14:09:53 +0200 (Do, 16 Jul 2015) $
$Revision: 7029 $
Targets:
OSIndependent : yes
Description:
Definition for the universal Hilscher Transport Header prepended, to all
data, send via a communication channel like USB/TCP/Serial.
Changes:
Version Date Author Description
---------------------------------------------------------------------------
11 02.10.2013 MT Added HIL_TRANSPORT_FEATURES_PERMANENT_CONNECTION
10 23.05.2011 MS Added transport types HIL_TRANSPORT_TYPE_INX, HIL_TRANSPORT_TYPE_NETANALYZER, HIL_TRANSPORT_TYPE_NETPLC
9 28.06.2010 SD New types for 64-bit support
8 24.06.2009 MT HIL_TRANSPORT_BASIC_FEATURES_U structure changed data type from uint32_t to unsigned int
7 22.07.2008 PL New transport type HIL_TRANSPORT_TYPE_KEEP_ALIVE added
6 15.04.2008 MT New error code (state) HIL_TSTATE_BUFFEROVERFLOW_ERROR added
5 07.05.2007 MT New header definitions adjusted to standard c data types
4 04.04.2007 RM Default state definitions included
3 22.03.2007 RM Definition changed to fit new data structure
2 16.03.2007 RM Header reworked
1 06.03.2007 MT created
*******************************************************************************/
#ifndef __HILTRANSPORT__H
#define __HILTRANSPORT__H
#include <stdint.h>
/*****************************************************************************/
/*! \file HilTransport.h
* Definition for the universal Hilscher Transport Header */
/*****************************************************************************/
#define HIL_TRANSPORT_IP_PORT 50111 /**< IP Port number used for transport */
#define HIL_TRANSPORT_COOKIE 0xA55A5AA5UL /**< Cookie for HIL_TRANSPORT_HEADER */
#define HIL_TRANSPORT_PACKETID "netX" /**< Packet ID */
#define HIL_TRANSPORT_STATE_OK 0x00 /**< Packet received successfully */
#define HIL_TSTATE_CHECKSUM_ERROR 0x10 /**< Packet checksum error */
#define HIL_TSTATE_LENGTH_INCOMPLETE 0x11 /**< Packet length incomplete */
#define HIL_TSTATE_DATA_TYPE_UNKNOWN 0x12 /**< Packet data type unknown */
#define HIL_TSTATE_DEVICE_UNKNOWN 0x13 /**< Device unknown */
#define HIL_TSTATE_CHANNEL_UNKNOWN 0x14 /**< Channel unknown */
#define HIL_TSTATE_SEQUENCE_ERROR 0x15 /**< Sequence number out of sync */
#define HIL_TSTATE_BUFFEROVERFLOW_ERROR 0x16 /**< Buffer overflow in receiver */
#define HIL_TSTATE_RESOURCE_ERROR 0x17 /**< Out of internal resources
(e.g. parallel services exceeded) */
#define HIL_TSTATE_KEEP_ALIVE_ERROR 0x20 /**< Keep Alive ComID was incorrect */
/*****************************************************************************/
/* Transport data types */
/*****************************************************************************/
#define HIL_TRANSPORT_TYPE_QUERYSERVER 0x0000 /**< Admim command: query basic server information */
#define HIL_TRANSPORT_TYPE_QUERYDEVICE 0x0001 /**< Admim command: query device specific information */
#define HIL_TRANSPORT_TYPE_RCX_PACKET 0x0100 /**< Transport type for rcX packets */
#define HIL_TRANSPORT_TYPE_MARSHALLER 0x0200 /**< Transport type for cifX API calls */
#define HIL_TRANSPORT_TYPE_INX 0x0300 /**< Transport type for INX API calls */
#define HIL_TRANSPORT_TYPE_NETANALYZER 0x0400 /**< Transport type for netANALYZER API calls */
#define HIL_TRANSPORT_TYPE_NETPLC 0x0500 /**< Transport type for netPLC API calls */
#define HIL_TRANSPORT_TYPE_ACKNOWLEDGE 0x8000 /**< Transport type for acknowledging succesful sends */
#define HIL_TRANSPORT_TYPE_KEEP_ALIVE 0xFFFF /**< Transport type for connection keepalive transfers */
#define HIL_TRANSPORT_TRANSACTION_DEVICE 0x8000 /**< Transaction ID was generated by Device/Target */
/*****************************************************************************/
/*! Structure preceeding every data packet sent to netX based devices.
* This structure is independent from the transmission channel. */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_HEADERtag
{
uint32_t ulCookie; /**< Magic cookie */
uint32_t ulLength; /**< Length of following data (in Bytes) */
uint16_t usChecksum; /**< CRC16 over all data, 0 = no checksum */
uint16_t usDataType; /**< Type of data following */
uint8_t bDevice; /**< Device number */
uint8_t bChannel; /**< Channel number */
uint8_t bSequenceNr; /**< Sequence Nr. Increased with every packet */
uint8_t bState; /**< Transmission/Target state */
uint16_t usTransaction; /**< Transaction ID */
uint16_t usReserved; /**< unused/reserved for future use */
} HIL_TRANSPORT_HEADER, *PHIL_TRANSPORT_HEADER;
/*****************************************************************************/
/*! Administration datatype definitions */
/*****************************************************************************/
/* Error codes */
#define HIL_ADMIN_S_OK 0 /*!< No error */
/* Features flag definition (used in QueryServer command) */
#define HIL_TRANSPORT_FEATURES_KEEPALIVE 0x00000001 /*!< Device supports keep-alive */
#define HIL_TRANSPORT_FEATURES_NXAPI 0x00000002 /*!< Device supports NXAPI marshalling */
#define HIL_TRANSPORT_FEATURES_PERMANENT_CONNECTION 0x80000000 /*!< Device has a steady connection (does not drop on remote device resets) */
#define HIL_TRANSPORT_QUERYSERVER_NAMELEN 32
/*****************************************************************************/
/*! Administration : Query Server structure DataType = 0x0000 */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYSERVER_DATA_Ttag
{
uint32_t ulStructVersion; /*!< Structure Version, currently 1 */
char szServerName[HIL_TRANSPORT_QUERYSERVER_NAMELEN]; /*!< NULL Terminated Server name */
uint32_t ulVersionMajor; /*!< Major Version of Server */
uint32_t ulVersionMinor; /*!< Minor Version of Server */
uint32_t ulVersionBuild; /*!< Build Version of Server */
uint32_t ulVersionRevision; /*!< Major Version of Server */
uint32_t ulFeatures; /*!< Features flag */
uint32_t ulParallelServices; /*!< Number of parallel services */
uint32_t ulBufferSize; /*!< Maximum of bytes in a data packet */
uint32_t ulDatatypeCnt; /*!< Number of supported data types */
uint16_t ausDataTypes[1]; /*!< Array of supported data types */
} HIL_TRANSPORT_ADMIN_QUERYSERVER_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYSERVER_DATA_T;
/*****************************************************************************/
/*! Administration : Query Server data packet DataType = 0x0000 */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYSERVER_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYSERVER_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYSERVER_T, *PHIL_TRANSPORT_ADMIN_QUERYSERVER_T;
/*****************************************************************************/
/* Query device definitions (Datatype=0x0001) */
/*****************************************************************************/
#define HIL_TRANSPORT_QUERYDEVICE_OPT_DEVICECNT 0 /*!< Query the number of available devices */
#define HIL_TRANSPORT_QUERYDEVICE_OPT_CHANNELCNT 1 /*!< Query the number of channels on a device */
#define HIL_TRANSPORT_QUERYDEVICE_OPT_DEVICEINFO 2 /*!< Get Device information */
#define HIL_TRANSPORT_QUERYDEVICE_OPT_CHANNELINFO 3 /*!< Get channel information */
/*****************************************************************************/
/*! Administration : Query Device request data DataType = 0x0001 */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_DATA_Ttag
{
uint16_t usDataType; /*!< Data type the info is requested for */
uint16_t usReserved; /*!< unused/reserved, set to zero */
uint32_t ulOption; /*!< Option to query */
} HIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_DATA_T;
/*****************************************************************************/
/*! Administration : Query Device request DataType = 0x0001 */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICE_REQ_T;
/*****************************************************************************/
/*! Structure of query device count response data (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_DATA_Ttag
{
uint16_t usDatatype; /**< Data type the request is made for */
uint16_t usReserved; /**< Reserved field */
uint32_t ulOption; /**< Requested option */
uint32_t ulError; /**< Error code for te request( If ulError is set -> following data will be supressed */
uint32_t ulDeviceCnt; /**< Number of supported devices */
} HIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_DATA_T;
/*****************************************************************************/
/*! Structure of query device count response (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICE_CNF_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICECNT_CNF_T;
/*****************************************************************************/
/*! Structure of query channel count response data (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_DATA_Ttag
{
uint16_t usDatatype; /**< Data type the request is made for */
uint16_t usReserved; /**< Reserved field */
uint32_t ulOption; /**< Requested option */
uint32_t ulError; /**< Error code for te request( If ulError is set -> following data will be supressed */
uint32_t ulChannelCnt; /**< Number of supported channels on device passed via bDevice */
} HIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_DATA_T;
/*****************************************************************************/
/*! Structure of query channel count response (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_T, *PHIL_TRANSPORT_ADMIN_QUERYCHANNELCNT_CNF_T;
/*****************************************************************************/
/*! Structure of query device info response data (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_DATA_Ttag
{
uint16_t usDatatype; /**< Data type the request is made for */
uint16_t usReserved; /**< Reserved field */
uint32_t ulOption; /**< Requested option */
uint32_t ulError; /**< Error code for te request( If ulError is set -> following data will be supressed */
uint32_t ulDeviceNr; /**< Device Number */
uint32_t ulSerialNr; /**< Serial Number */
uint16_t usMfgNr; /**< Manufacturer code */
uint16_t usProdDate; /**< Production date */
uint32_t ulLicenseFlag1; /**< License flags 1 */
uint32_t ulLicenseFlag2; /**< License flags 2 */
uint16_t usLicenseID; /**< License ID */
uint16_t usLicenseFlags; /**< License flags */
uint16_t usDeviceClass; /**< Device class */
uint8_t bHwRevision; /**< HW Revision */
uint8_t bHwCompatibility; /**< HW compatibility */
} HIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_DATA_T;
/*****************************************************************************/
/*! Structure of query device info response (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_T, *PHIL_TRANSPORT_ADMIN_QUERYDEVICEINFO_CNF_T;
/*****************************************************************************/
/*! Structure of query channel info response data (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_DATA_Ttag
{
uint16_t usDatatype; /**< Data type the request is made for */
uint16_t usReserved; /**< Reserved field */
uint32_t ulOption; /**< Requested option */
uint32_t ulError; /**< Error code for te request( If ulError is set -> following data will be supressed */
uint16_t usCommClass; /**< Communication class */
uint16_t usProtocolClass; /**< Protocol class */
uint16_t usConformanceClass; /**< Conformance class */
uint16_t usReserved1; /**< Reserved field 1 */
uint8_t szFWName[64]; /**< Null-terminated firmware name */
uint16_t usFWMajor; /**< Firmware version (major) */
uint16_t usFWMinor; /**< Firmware version (minor) */
uint16_t usFWBuild; /**< Firmware version (build) */
uint16_t usFWRev; /**< Firmware version (revision) */
uint16_t usYear; /**< Build data of firmware (year) */
uint8_t bMonth; /**< Build data of firmware (month) */
uint8_t bDay; /**< Build data of firmware (day) */
} HIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_DATA_T, *PHIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_DATA_T;
/*****************************************************************************/
/*! Structure of query device info response (administration command). */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_DATA_T tData;
} HIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_T, *PHIL_TRANSPORT_ADMIN_QUERYCHANNELINFO_CNF_T;
/*****************************************************************************/
/* Keep alive definitions */
/*****************************************************************************/
#define HIL_TRANSPORT_KEEP_ALIVE_FIRST_COMID 0x00000000 /**< Default value for the Keep Alive ComID */
#define HIL_TRANSPORT_KEEP_ALIVE_CLIENT_TIMEOUT 500 /**< Timeout(ms) for the Client-side of the Keep Alive */
#define HIL_TRANSPORT_KEEP_ALIVE_SERVER_TIMEOUT 2000 /**< Timeout(ms) for the Server-side of the Keep Alive */
/*****************************************************************************/
/*! Keepalive data structure DataType = 0xFFFF */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_KEEPALIVE_DATA_Ttag
{
uint32_t ulComID; /*!< KeepAlive ID. 0 = Request new from device */
} HIL_TRANSPORT_KEEPALIVE_DATA_T, *PHIL_TRANSPORT_KEEPALIVE_DATA_T;
/*****************************************************************************/
/*! Keepalive data packet DataType = 0xFFFF */
/*****************************************************************************/
typedef struct HIL_TRANSPORT_KEEPALIVE_Ttag
{
HIL_TRANSPORT_HEADER tHeader;
HIL_TRANSPORT_KEEPALIVE_DATA_T tData;
} HIL_TRANSPORT_KEEPALIVE_T, *PHIL_TRANSPORT_KEEPALIVE_T;
#endif /* __HILTRANSPORT__H */