316 lines
19 KiB
C
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 */
|