Commit df0831a3 authored by Marcus Nordenberg's avatar Marcus Nordenberg

format code

parent ce758cd3
...@@ -146,7 +146,8 @@ extern "C" { ...@@ -146,7 +146,8 @@ extern "C" {
#endif /* PACKED */ #endif /* PACKED */
// max. length is 255 + 8 Bytes // max. length is 255 + 8 Bytes
typedef struct tagMSG_STRUC { typedef struct tagMSG_STRUC
{
unsigned char rx PACKED; unsigned char rx PACKED;
unsigned char tx PACKED; unsigned char tx PACKED;
unsigned char ln PACKED; unsigned char ln PACKED;
...@@ -165,13 +166,15 @@ typedef struct tagMSG_STRUC { ...@@ -165,13 +166,15 @@ typedef struct tagMSG_STRUC {
/* ------------------------------------------------------------------------------------ /* ------------------------------------------------------------------------------------
*/ */
typedef struct tagIOINFO { typedef struct tagIOINFO
{
unsigned char bComBit PACKED; unsigned char bComBit PACKED;
unsigned char bIOExchangeMode PACKED; unsigned char bIOExchangeMode PACKED;
unsigned int ulIOExchangeCnt PACKED; unsigned int ulIOExchangeCnt PACKED;
} IOINFO; } IOINFO;
typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */ typedef struct tagVERSIONINFO
{ /* DEV serial number and OS versions */
unsigned int ulDate PACKED PACKED; unsigned int ulDate PACKED PACKED;
unsigned int ulDeviceNo PACKED; unsigned int ulDeviceNo PACKED;
unsigned int ulSerialNo PACKED; unsigned int ulSerialNo PACKED;
...@@ -182,25 +185,31 @@ typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */ ...@@ -182,25 +185,31 @@ typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */
unsigned char OemIdentifier[4] PACKED; unsigned char OemIdentifier[4] PACKED;
} VERSIONINFO; } VERSIONINFO;
typedef struct tagFIRMWAREINFO { typedef struct tagFIRMWAREINFO
{
unsigned char FirmwareName[16] PACKED; unsigned char FirmwareName[16] PACKED;
unsigned char FirmwareVersion[16] PACKED; unsigned char FirmwareVersion[16] PACKED;
} FIRMWAREINFO; } FIRMWAREINFO;
typedef struct tagTASKSTATE { typedef struct tagTASKSTATE
{
unsigned char TaskState[64] PACKED; unsigned char TaskState[64] PACKED;
} TASKSTATE; } TASKSTATE;
typedef struct tagTASKPARAM { typedef struct tagTASKPARAM
{
unsigned char TaskParameter[64] PACKED; unsigned char TaskParameter[64] PACKED;
} TASKPARAM; } TASKPARAM;
typedef struct tagRAWDATA { typedef struct tagRAWDATA
{
unsigned char abRawData[1022] PACKED; unsigned char abRawData[1022] PACKED;
} RAWDATA; } RAWDATA;
typedef struct tagTASKINFO { typedef struct tagTASKINFO
struct { {
struct
{
char TaskName[8] PACKED; /* Task name */ char TaskName[8] PACKED; /* Task name */
unsigned short Version PACKED; /* Task version */ unsigned short Version PACKED; /* Task version */
unsigned char TaskCondition PACKED; unsigned char TaskCondition PACKED;
...@@ -208,7 +217,8 @@ typedef struct tagTASKINFO { ...@@ -208,7 +217,8 @@ typedef struct tagTASKINFO {
} tInfo[7]; } tInfo[7];
} TASKINFO; } TASKINFO;
typedef struct tagRCSINFO { typedef struct tagRCSINFO
{
unsigned short RcsVersion PACKED; /* Operationsystem Version */ unsigned short RcsVersion PACKED; /* Operationsystem Version */
unsigned char RcsError PACKED; unsigned char RcsError PACKED;
unsigned char HostWatchDog PACKED; unsigned char HostWatchDog PACKED;
...@@ -218,7 +228,8 @@ typedef struct tagRCSINFO { ...@@ -218,7 +228,8 @@ typedef struct tagRCSINFO {
unsigned char DriverType PACKED; unsigned char DriverType PACKED;
} RCSINFO; } RCSINFO;
typedef struct tagDEVINFO { typedef struct tagDEVINFO
{
unsigned char DpmSize PACKED; unsigned char DpmSize PACKED;
unsigned char DevType PACKED; unsigned char DevType PACKED;
unsigned char DevModel PACKED; unsigned char DevModel PACKED;
...@@ -232,9 +243,11 @@ typedef struct tagDEVINFO { ...@@ -232,9 +243,11 @@ typedef struct tagDEVINFO {
*/ */
// Board information structure // Board information structure
typedef struct tagBOARD_INFO { typedef struct tagBOARD_INFO
{
unsigned char abDriverVersion[16] PACKED; // DRV driver information string unsigned char abDriverVersion[16] PACKED; // DRV driver information string
struct { struct
{
unsigned short usBoard PACKED; // DRV board number unsigned short usBoard PACKED; // DRV board number
unsigned short usAvailable PACKED; // DRV board is available unsigned short usAvailable PACKED; // DRV board is available
unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address
...@@ -244,7 +257,8 @@ typedef struct tagBOARD_INFO { ...@@ -244,7 +257,8 @@ typedef struct tagBOARD_INFO {
} BOARD_INFO; } BOARD_INFO;
// Driver information structure // Driver information structure
typedef struct tagDRIVERINFO { typedef struct tagDRIVERINFO
{
unsigned long OpenCnt PACKED; // number of driver open unsigned long OpenCnt PACKED; // number of driver open
unsigned long CloseCnt PACKED; // number of driver close unsigned long CloseCnt PACKED; // number of driver close
unsigned long ReadCnt PACKED; // number of DevGetMessage commands unsigned long ReadCnt PACKED; // number of DevGetMessage commands
...@@ -263,9 +277,11 @@ typedef struct tagDRIVERINFO { ...@@ -263,9 +277,11 @@ typedef struct tagDRIVERINFO {
} DRIVERINFO; } DRIVERINFO;
// Extended board information structure // Extended board information structure
typedef struct tagBOARD_INFOEX { typedef struct tagBOARD_INFOEX
{
unsigned char abDriverVersion[16] PACKED; // DRV driver information string unsigned char abDriverVersion[16] PACKED; // DRV driver information string
struct { struct
{
unsigned short usBoard PACKED; // DRV board number unsigned short usBoard PACKED; // DRV board number
unsigned short usAvailable PACKED; // DRV board is available unsigned short usAvailable PACKED; // DRV board is available
unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address
...@@ -279,7 +295,8 @@ typedef struct tagBOARD_INFOEX { ...@@ -279,7 +295,8 @@ typedef struct tagBOARD_INFOEX {
} BOARD_INFOEX; } BOARD_INFOEX;
// State field structure // State field structure
typedef struct tagCOMSTATE { typedef struct tagCOMSTATE
{
unsigned short usMode PACKED; // Actual STATE mode unsigned short usMode PACKED; // Actual STATE mode
unsigned short usStateFlag PACKED; // State flag unsigned short usStateFlag PACKED; // State flag
unsigned char abState[64] PACKED; // State area unsigned char abState[64] PACKED; // State area
...@@ -345,7 +362,8 @@ typedef struct tagCOMSTATE { ...@@ -345,7 +362,8 @@ typedef struct tagCOMSTATE {
#define CIF_IOC_MAXNR 25 #define CIF_IOC_MAXNR 25
// interface structure for ioctl's // interface structure for ioctl's
typedef struct cif_ioctl_data { typedef struct cif_ioctl_data
{
unsigned long lInpBuffLen PACKED; unsigned long lInpBuffLen PACKED;
unsigned long lOutBuffLen PACKED; unsigned long lOutBuffLen PACKED;
unsigned char* pInpBuff PACKED; unsigned char* pInpBuff PACKED;
...@@ -353,7 +371,8 @@ typedef struct cif_ioctl_data { ...@@ -353,7 +371,8 @@ typedef struct cif_ioctl_data {
} cif_ioctl_data; } cif_ioctl_data;
// SET BOARD OPERATION MODE // SET BOARD OPERATION MODE
typedef struct tagDEVIO_SETOPMODE { typedef struct tagDEVIO_SETOPMODE
{
unsigned short usBoard PACKED; unsigned short usBoard PACKED;
unsigned short usMode PACKED; // Interrupt/polling mode unsigned short usMode PACKED; // Interrupt/polling mode
unsigned short usIrq PACKED; unsigned short usIrq PACKED;
...@@ -361,7 +380,8 @@ typedef struct tagDEVIO_SETOPMODE { ...@@ -361,7 +380,8 @@ typedef struct tagDEVIO_SETOPMODE {
} DEVIO_SETOPMODE; } DEVIO_SETOPMODE;
// GETBOARDINFORMATION // GETBOARDINFORMATION
typedef struct tagDEVIO_GETBOARDINFOCMD { typedef struct tagDEVIO_GETBOARDINFOCMD
{
unsigned short usDevNumber PACKED; // n.a. unsigned short usDevNumber PACKED; // n.a.
unsigned short usInfoLen PACKED; // Information length unsigned short usInfoLen PACKED; // Information length
BOARD_INFO* ptBoardInfo PACKED; BOARD_INFO* ptBoardInfo PACKED;
...@@ -369,7 +389,8 @@ typedef struct tagDEVIO_GETBOARDINFOCMD { ...@@ -369,7 +389,8 @@ typedef struct tagDEVIO_GETBOARDINFOCMD {
} DEVIO_GETBOARDINFOCMD; } DEVIO_GETBOARDINFOCMD;
// Extnded GETBOARDINFORMATION // Extnded GETBOARDINFORMATION
typedef struct tagDEVIO_GETBOARDINFOEXCMD { typedef struct tagDEVIO_GETBOARDINFOEXCMD
{
unsigned short usDevNumber PACKED; // n.a. unsigned short usDevNumber PACKED; // n.a.
unsigned short usInfoLen PACKED; // Information length unsigned short usInfoLen PACKED; // Information length
BOARD_INFOEX* ptBoard PACKED; BOARD_INFOEX* ptBoard PACKED;
...@@ -382,7 +403,8 @@ typedef struct tagDEVIO_GETBOARDINFOEXCMD { ...@@ -382,7 +403,8 @@ typedef struct tagDEVIO_GETBOARDINFOEXCMD {
#define WARMSTART 3 #define WARMSTART 3
#define BOOTSTART 4 #define BOOTSTART 4
typedef struct tagDEVIO_RESETCMD { typedef struct tagDEVIO_RESETCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usMode PACKED; // DEV function unsigned short usMode PACKED; // DEV function
unsigned long ulTimeout PACKED; // Service timeout unsigned long ulTimeout PACKED; // Service timeout
...@@ -391,7 +413,8 @@ typedef struct tagDEVIO_RESETCMD { ...@@ -391,7 +413,8 @@ typedef struct tagDEVIO_RESETCMD {
} DEVIO_RESETCMD; } DEVIO_RESETCMD;
// PUTTASKPARAMETER // PUTTASKPARAMETER
typedef struct tagDEVIO_PUTPARAMETERCMD { typedef struct tagDEVIO_PUTPARAMETERCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usTaskParamNum PACKED; // Number of the parameter area unsigned short usTaskParamNum PACKED; // Number of the parameter area
unsigned short usTaskParamLen PACKED; // Lenght of parameter data unsigned short usTaskParamLen PACKED; // Lenght of parameter data
...@@ -400,7 +423,8 @@ typedef struct tagDEVIO_PUTPARAMETERCMD { ...@@ -400,7 +423,8 @@ typedef struct tagDEVIO_PUTPARAMETERCMD {
} DEVIO_PUTPARAMETERCMD; } DEVIO_PUTPARAMETERCMD;
// PUTMESSAGE // PUTMESSAGE
typedef struct tagDEVIO_PUTMESSAGECMD { typedef struct tagDEVIO_PUTMESSAGECMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
MSG_STRUC tMsg PACKED; // Message data MSG_STRUC tMsg PACKED; // Message data
unsigned long ulTimeout PACKED; // Service timeout unsigned long ulTimeout PACKED; // Service timeout
...@@ -408,7 +432,8 @@ typedef struct tagDEVIO_PUTMESSAGECMD { ...@@ -408,7 +432,8 @@ typedef struct tagDEVIO_PUTMESSAGECMD {
} DEVIO_PUTMESSAGECMD; } DEVIO_PUTMESSAGECMD;
// GETMESSAGE // GETMESSAGE
typedef struct tagDEVIO_GETMESSAGECMD { typedef struct tagDEVIO_GETMESSAGECMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned long ulTimeout PACKED; // Service timeout unsigned long ulTimeout PACKED; // Service timeout
unsigned long ulMsgSize PACKED; // User message buffer size unsigned long ulMsgSize PACKED; // User message buffer size
...@@ -417,7 +442,8 @@ typedef struct tagDEVIO_GETMESSAGECMD { ...@@ -417,7 +442,8 @@ typedef struct tagDEVIO_GETMESSAGECMD {
} DEVIO_GETMESSAGECMD; } DEVIO_GETMESSAGECMD;
// GETTASKSTATE // GETTASKSTATE
typedef struct tagDEVIO_GETTASKSTATECMD { typedef struct tagDEVIO_GETTASKSTATECMD
{
unsigned char ucBoard PACKED; // DEV board number unsigned char ucBoard PACKED; // DEV board number
unsigned short usStateNum PACKED; // Task state field number unsigned short usStateNum PACKED; // Task state field number
unsigned short usStateLen PACKED; // Lenght of state data unsigned short usStateLen PACKED; // Lenght of state data
...@@ -433,7 +459,8 @@ typedef struct tagDEVIO_GETTASKSTATECMD { ...@@ -433,7 +459,8 @@ typedef struct tagDEVIO_GETTASKSTATECMD {
#define HOST_MBX_FULL 1 #define HOST_MBX_FULL 1
#define HOST_MBX_SYSERR 2 #define HOST_MBX_SYSERR 2
typedef struct tagDEVIO_MBXINFOCMD { typedef struct tagDEVIO_MBXINFOCMD
{
unsigned char ucBoard PACKED; // DEV board number unsigned char ucBoard PACKED; // DEV board number
unsigned short usDevMbxState PACKED; // State of the device mailbox unsigned short usDevMbxState PACKED; // State of the device mailbox
unsigned short usHostMbxState PACKED; // State of the host mailbox unsigned short usHostMbxState PACKED; // State of the host mailbox
...@@ -452,7 +479,8 @@ typedef struct tagDEVIO_MBXINFOCMD { ...@@ -452,7 +479,8 @@ typedef struct tagDEVIO_MBXINFOCMD {
#define SPECIAL_CONTROL_CLEAR 0 #define SPECIAL_CONTROL_CLEAR 0
#define SPECIAL_CONTROL_SET 1 #define SPECIAL_CONTROL_SET 1
typedef struct tagDEVIO_TRIGGERCMD { typedef struct tagDEVIO_TRIGGERCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usMode PACKED; // DEV function unsigned short usMode PACKED; // DEV function
unsigned long ulTimeout PACKED; // DEV timeout unsigned long ulTimeout PACKED; // DEV timeout
...@@ -472,7 +500,8 @@ typedef struct tagDEVIO_TRIGGERCMD { ...@@ -472,7 +500,8 @@ typedef struct tagDEVIO_TRIGGERCMD {
#define GET_IO_INFO 7 #define GET_IO_INFO 7
#define GET_IO_SEND_DATA 8 #define GET_IO_SEND_DATA 8
typedef struct tagDEVIO_GETDEVINFOCMD { typedef struct tagDEVIO_GETDEVINFOCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usInfoArea PACKED; // Number of info area unsigned short usInfoArea PACKED; // Number of info area
unsigned short usInfoLen PACKED; // Lenght of info data unsigned short usInfoLen PACKED; // Lenght of info data
...@@ -481,14 +510,16 @@ typedef struct tagDEVIO_GETDEVINFOCMD { ...@@ -481,14 +510,16 @@ typedef struct tagDEVIO_GETDEVINFOCMD {
} DEVIO_GETDEVINFOCMD; } DEVIO_GETDEVINFOCMD;
// EXITDRV // EXITDRV
typedef struct tagDEVIO_EXITCMD { typedef struct tagDEVIO_EXITCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usDrvOpenCount PACKED; // dr�er opencount unsigned short usDrvOpenCount PACKED; // dr�er opencount
short sError PACKED; short sError PACKED;
} DEVIO_EXITCMD; } DEVIO_EXITCMD;
// GETTASKPARAMETER // GETTASKPARAMETER
typedef struct tagDEVIO_GETPARAMETERCMD { typedef struct tagDEVIO_GETPARAMETERCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usTaskParamNum PACKED; // Number of the parameter area unsigned short usTaskParamNum PACKED; // Number of the parameter area
unsigned short usTaskParamLen PACKED; // Lenght of parameter data unsigned short usTaskParamLen PACKED; // Lenght of parameter data
...@@ -497,7 +528,8 @@ typedef struct tagDEVIO_GETPARAMETERCMD { ...@@ -497,7 +528,8 @@ typedef struct tagDEVIO_GETPARAMETERCMD {
} DEVIO_GETPARAMETERCMD; } DEVIO_GETPARAMETERCMD;
// EXIO // EXIO
typedef struct tagDEVIO_EXIOCMD { typedef struct tagDEVIO_EXIOCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usSendOffset PACKED; // Byte offset send data unsigned short usSendOffset PACKED; // Byte offset send data
unsigned short usSendLen PACKED; // Length of send data unsigned short usSendLen PACKED; // Length of send data
...@@ -510,7 +542,8 @@ typedef struct tagDEVIO_EXIOCMD { ...@@ -510,7 +542,8 @@ typedef struct tagDEVIO_EXIOCMD {
} DEVIO_EXIOCMD; } DEVIO_EXIOCMD;
// EXIOEX // EXIOEX
typedef struct tagDEVIO_EXIOCMDEX { typedef struct tagDEVIO_EXIOCMDEX
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usSendOffset PACKED; // Byte offset send data unsigned short usSendOffset PACKED; // Byte offset send data
unsigned short usSendLen PACKED; // Length of send data unsigned short usSendLen PACKED; // Length of send data
...@@ -531,7 +564,8 @@ typedef struct tagDEVIO_EXIOCMDEX { ...@@ -531,7 +564,8 @@ typedef struct tagDEVIO_EXIOCMDEX {
#define STATE_MODE_3 3 #define STATE_MODE_3 3
#define STATE_MODE_4 4 #define STATE_MODE_4 4
typedef struct tagDEVIO_EXIOCMDERR { typedef struct tagDEVIO_EXIOCMDERR
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usSendOffset PACKED; // Byte offset send data unsigned short usSendOffset PACKED; // Byte offset send data
unsigned short usSendLen PACKED; // Length of send data unsigned short usSendLen PACKED; // Length of send data
...@@ -545,7 +579,8 @@ typedef struct tagDEVIO_EXIOCMDERR { ...@@ -545,7 +579,8 @@ typedef struct tagDEVIO_EXIOCMDERR {
} DEVIO_EXIOCMDERR; } DEVIO_EXIOCMDERR;
// READIO // READIO
typedef struct tagDEVIO_READSENDCMD { typedef struct tagDEVIO_READSENDCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usReadOffset PACKED; // Byte offset send/receive data unsigned short usReadOffset PACKED; // Byte offset send/receive data
unsigned short usReadLen PACKED; // Length of send/receive data unsigned short usReadLen PACKED; // Length of send/receive data
...@@ -555,7 +590,8 @@ typedef struct tagDEVIO_READSENDCMD { ...@@ -555,7 +590,8 @@ typedef struct tagDEVIO_READSENDCMD {
// ExtData // ExtData
#define EXTDATASIZE 20 #define EXTDATASIZE 20
typedef struct tagDEVIO_EXTDATACMD { typedef struct tagDEVIO_EXTDATACMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usMode PACKED; // DEV mode unsigned short usMode PACKED; // DEV mode
unsigned char* pabExtData PACKED; // DEV Extended data unsigned char* pabExtData PACKED; // DEV Extended data
...@@ -563,7 +599,8 @@ typedef struct tagDEVIO_EXTDATACMD { ...@@ -563,7 +599,8 @@ typedef struct tagDEVIO_EXTDATACMD {
} DEVIO_EXTDATACMD; } DEVIO_EXTDATACMD;
// GetMbxData // GetMbxData
typedef struct tagDEVIO_GETMBXCMD { typedef struct tagDEVIO_GETMBXCMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usDevLen PACKED; // DEV length of dev data unsigned short usDevLen PACKED; // DEV length of dev data
unsigned short usHostLen PACKED; // DEV length of host data unsigned short usHostLen PACKED; // DEV length of host data
...@@ -575,7 +612,8 @@ typedef struct tagDEVIO_GETMBXCMD { ...@@ -575,7 +612,8 @@ typedef struct tagDEVIO_GETMBXCMD {
// ReadWriteRawData // ReadWriteRawData
#define PARAMETER_READ 1 #define PARAMETER_READ 1
#define PARAMETER_WRITE 2 #define PARAMETER_WRITE 2
typedef struct tagDEVIO_RWRAWDATACMD { typedef struct tagDEVIO_RWRAWDATACMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usMode PACKED; // DEV read or write unsigned short usMode PACKED; // DEV read or write
unsigned short usOffset PACKED; // DEV offset in the DPM last kByte unsigned short usOffset PACKED; // DEV offset in the DPM last kByte
...@@ -584,7 +622,8 @@ typedef struct tagDEVIO_RWRAWDATACMD { ...@@ -584,7 +622,8 @@ typedef struct tagDEVIO_RWRAWDATACMD {
short sError PACKED; short sError PACKED;
} DEVIO_RWRAWDATACMD; } DEVIO_RWRAWDATACMD;
// ReadWriteDPMData // ReadWriteDPMData
typedef struct tagDEVIO_RWDPMDATACMD { typedef struct tagDEVIO_RWDPMDATACMD
{
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
unsigned short usMode PACKED; // DEV read or write unsigned short usMode PACKED; // DEV read or write
unsigned short usOffset PACKED; // DEV offset in the DPM last kByte unsigned short usOffset PACKED; // DEV offset in the DPM last kByte
...@@ -598,7 +637,8 @@ typedef struct tagDEVIO_RWDPMDATACMD { ...@@ -598,7 +637,8 @@ typedef struct tagDEVIO_RWDPMDATACMD {
#define DPM_PTR_OPEN_USR 2 #define DPM_PTR_OPEN_USR 2
#define DPM_PTR_CLOSE 3 #define DPM_PTR_CLOSE 3
typedef struct tagDEVIO_GETDPMPTR { typedef struct tagDEVIO_GETDPMPTR
{
unsigned short usMode PACKED; // DEV mode unsigned short usMode PACKED; // DEV mode
unsigned short usBoard PACKED; // DEV board number unsigned short usBoard PACKED; // DEV board number
void* pvUserData PACKED; // DEV user data for pmi void* pvUserData PACKED; // DEV user data for pmi
......
...@@ -156,7 +156,8 @@ extern "C" { ...@@ -156,7 +156,8 @@ extern "C" {
*/ */
// max. length is 288 Bytes, max message length is 255 + 8 Bytes // max. length is 288 Bytes, max message length is 255 + 8 Bytes
typedef struct tagMSG_STRUC { typedef struct tagMSG_STRUC
{
unsigned char rx PACKED; unsigned char rx PACKED;
unsigned char tx PACKED; unsigned char tx PACKED;
unsigned char ln PACKED; unsigned char ln PACKED;
...@@ -230,14 +231,16 @@ typedef struct tagMSG_STRUC { ...@@ -230,14 +231,16 @@ typedef struct tagMSG_STRUC {
#define CONFIGURATION_DOWNLOAD 2 #define CONFIGURATION_DOWNLOAD 2
// Device exchange IO information // Device exchange IO information
typedef struct tagIOINFO { typedef struct tagIOINFO
{
unsigned char bComBit PACKED; /* Actual state of the COM bit */ unsigned char bComBit PACKED; /* Actual state of the COM bit */
unsigned char bIOExchangeMode PACKED; /* Actual data exchange mode (0..5) */ unsigned char bIOExchangeMode PACKED; /* Actual data exchange mode (0..5) */
unsigned int ulIOExchangeCnt PACKED; /* Exchange IO counter */ unsigned int ulIOExchangeCnt PACKED; /* Exchange IO counter */
} IOINFO; } IOINFO;
// Device version information // Device version information
typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */ typedef struct tagVERSIONINFO
{ /* DEV serial number and OS versions */
unsigned int ulDate PACKED; unsigned int ulDate PACKED;
unsigned int ulDeviceNo PACKED; unsigned int ulDeviceNo PACKED;
unsigned int ulSerialNo PACKED; unsigned int ulSerialNo PACKED;
...@@ -249,29 +252,35 @@ typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */ ...@@ -249,29 +252,35 @@ typedef struct tagVERSIONINFO { /* DEV serial number and OS versions */
} VERSIONINFO; } VERSIONINFO;
// Device firmware information // Device firmware information
typedef struct tagFIRMWAREINFO { typedef struct tagFIRMWAREINFO
{
unsigned char abFirmwareName[16] PACKED; /* Firmware name */ unsigned char abFirmwareName[16] PACKED; /* Firmware name */
unsigned char abFirmwareVersion[16] PACKED; /* Firmware version */ unsigned char abFirmwareVersion[16] PACKED; /* Firmware version */
} FIRMWAREINFO; } FIRMWAREINFO;
// Device task state information // Device task state information
typedef struct tagTASKSTATE { typedef struct tagTASKSTATE
{
unsigned char abTaskState[64] PACKED; /* Task state field */ unsigned char abTaskState[64] PACKED; /* Task state field */
} TASKSTATE; } TASKSTATE;
// Device task paramater data // Device task paramater data
typedef struct tagTASKPARAM { typedef struct tagTASKPARAM
{
unsigned char abTaskParameter[64] PACKED; /* Task parameter field */ unsigned char abTaskParameter[64] PACKED; /* Task parameter field */
} TASKPARAM; } TASKPARAM;
// Device raw data structure // Device raw data structure
typedef struct tagRAWDATA { typedef struct tagRAWDATA
{
unsigned char abRawData[1022] PACKED; /* Definition of the last kByte */ unsigned char abRawData[1022] PACKED; /* Definition of the last kByte */
} RAWDATA; } RAWDATA;
// Device task information // Device task information
typedef struct tagTASKINFO { typedef struct tagTASKINFO
struct { {
struct
{
unsigned char abTaskName[8] PACKED; /* Task name */ unsigned char abTaskName[8] PACKED; /* Task name */
unsigned short usTaskVersion PACKED; /* Task version */ unsigned short usTaskVersion PACKED; /* Task version */
unsigned char bTaskCondition PACKED; /* Actual task condition */ unsigned char bTaskCondition PACKED; /* Actual task condition */
...@@ -280,7 +289,8 @@ typedef struct tagTASKINFO { ...@@ -280,7 +289,8 @@ typedef struct tagTASKINFO {
} TASKINFO; } TASKINFO;
// Device operating system (RCS) information // Device operating system (RCS) information
typedef struct tagRCSINFO { typedef struct tagRCSINFO
{
unsigned short usRcsVersion unsigned short usRcsVersion
PACKED; /* Device operating system (RCS) version */ PACKED; /* Device operating system (RCS) version */
unsigned char bRcsError PACKED; /* Operating system errors */ unsigned char bRcsError PACKED; /* Operating system errors */
...@@ -292,7 +302,8 @@ typedef struct tagRCSINFO { ...@@ -292,7 +302,8 @@ typedef struct tagRCSINFO {
} RCSINFO; } RCSINFO;
// Device description // Device description
typedef struct tagDEVINFO { typedef struct tagDEVINFO
{
unsigned char bDpmSize PACKED; /* Device dpm size (2,8...) */ unsigned char bDpmSize PACKED; /* Device dpm size (2,8...) */
unsigned char bDevType PACKED; /* Device type (manufactor code) */ unsigned char bDevType PACKED; /* Device type (manufactor code) */
unsigned char bDevModel PACKED; /* Device model (manufactor code) */ unsigned char bDevModel PACKED; /* Device model (manufactor code) */
...@@ -307,9 +318,11 @@ typedef struct tagDEVINFO { ...@@ -307,9 +318,11 @@ typedef struct tagDEVINFO {
*/ */
// Board information structure // Board information structure
typedef struct tagBOARD_INFO { typedef struct tagBOARD_INFO
{
unsigned char abDriverVersion[16] PACKED; // DRV driver information string unsigned char abDriverVersion[16] PACKED; // DRV driver information string
struct { struct
{
unsigned short usBoard PACKED; // DRV board number unsigned short usBoard PACKED; // DRV board number
unsigned short usAvailable PACKED; // DRV board is available unsigned short usAvailable PACKED; // DRV board is available
unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address
...@@ -319,7 +332,8 @@ typedef struct tagBOARD_INFO { ...@@ -319,7 +332,8 @@ typedef struct tagBOARD_INFO {
} BOARD_INFO; } BOARD_INFO;
// Internal driver state information structure // Internal driver state information structure
typedef struct tagDRIVERINFO { typedef struct tagDRIVERINFO
{
unsigned long ulOpenCnt PACKED; // DevOpen() counter unsigned long ulOpenCnt PACKED; // DevOpen() counter
unsigned long CloseCnt PACKED; // number of driver close unsigned long CloseCnt PACKED; // number of driver close
unsigned long ulReadCnt PACKED; // Number of DevGetMessage commands unsigned long ulReadCnt PACKED; // Number of DevGetMessage commands
...@@ -338,9 +352,11 @@ typedef struct tagDRIVERINFO { ...@@ -338,9 +352,11 @@ typedef struct tagDRIVERINFO {
} DRIVERINFO; } DRIVERINFO;
// Extended board information structure // Extended board information structure
typedef struct tagBOARD_INFOEX { typedef struct tagBOARD_INFOEX
{
unsigned char abDriverVersion[16] PACKED; // DRV driver information string unsigned char abDriverVersion[16] PACKED; // DRV driver information string
struct { struct
{
unsigned short usBoard PACKED; // DRV board number unsigned short usBoard PACKED; // DRV board number
unsigned short usAvailable PACKED; // DRV board is available unsigned short usAvailable PACKED; // DRV board is available
unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address unsigned long ulPhysicalAddress PACKED; // DRV physical DPM address
...@@ -357,7 +373,8 @@ typedef struct tagBOARD_INFOEX { ...@@ -357,7 +373,8 @@ typedef struct tagBOARD_INFOEX {
// 64-bit Linux machine & 32-bit Windows machine // 64-bit Linux machine & 32-bit Windows machine
// #ifdef CONFIG_64BIT // #ifdef CONFIG_64BIT
// Extended board information structure // Extended board information structure
typedef struct tagBOARD_INFOEX_32 { typedef struct tagBOARD_INFOEX_32
{
unsigned char abDriverVersion[16] PACKED; // DRV driver information string unsigned char abDriverVersion[16] PACKED; // DRV driver information string
unsigned char abCatchall[484] PACKED; // catchall unsigned char abCatchall[484] PACKED; // catchall
/*struct { /*struct {
...@@ -374,7 +391,8 @@ typedef struct tagBOARD_INFOEX_32 { ...@@ -374,7 +391,8 @@ typedef struct tagBOARD_INFOEX_32 {
} BOARD_INFOEX_32; } BOARD_INFOEX_32;
// Communication state field structure // Communication state field structure
typedef struct tagCOMSTATE { typedef struct tagCOMSTATE
{
unsigned short usMode PACKED; // Actual STATE mode unsigned short usMode PACKED; // Actual STATE mode
unsigned short usStateFlag PACKED; // State flag unsigned short usStateFlag PACKED; // State flag
unsigned char abState[64] PACKED; // State area unsigned char abState[64] PACKED; // State area
...@@ -409,78 +427,91 @@ extern short DevInitBoard(unsigned short usDevNumber); ...@@ -409,78 +427,91 @@ extern short DevInitBoard(unsigned short usDevNumber);
extern short DevExitBoard(unsigned short usDevNumber); extern short DevExitBoard(unsigned short usDevNumber);
extern short DevPutTaskParameter(unsigned short usDevNumber, extern short DevPutTaskParameter(unsigned short usDevNumber,
unsigned short usNumber, unsigned short usSize, void* pvData); unsigned short usNumber, unsigned short usSize,
void* pvData);
extern short DevReset( extern short DevReset(unsigned short usDevNumber, unsigned short usMode,
unsigned short usDevNumber, unsigned short usMode, unsigned long ulTimeout); unsigned long ulTimeout);
extern short DevPutMessage( extern short DevPutMessage(unsigned short usDevNumber, MSG_STRUC* ptMessage,
unsigned short usDevNumber, MSG_STRUC* ptMessage, unsigned long ulTimeout); unsigned long ulTimeout);
extern short DevGetMessage(unsigned short usDevNumber, unsigned short usSize, extern short DevGetMessage(unsigned short usDevNumber, unsigned short usSize,
MSG_STRUC* ptMessage, unsigned long ulTimeout); MSG_STRUC* ptMessage, unsigned long ulTimeout);
extern short DevGetTaskState(unsigned short usDevNumber, extern short DevGetTaskState(unsigned short usDevNumber,
unsigned short usNumber, unsigned short usSize, void* pvData); unsigned short usNumber, unsigned short usSize,
void* pvData);
extern short DevGetMBXState(unsigned short usDevNumber, extern short DevGetMBXState(unsigned short usDevNumber,
unsigned short* pusDevMBXState, unsigned short* pusHostMBXState); unsigned short* pusDevMBXState,
unsigned short* pusHostMBXState);
extern short DevTriggerWatchDog(unsigned short usDevNumber, extern short DevTriggerWatchDog(unsigned short usDevNumber,
unsigned short usFunction, unsigned short* usDevWatchDog); unsigned short usFunction,
unsigned short* usDevWatchDog);
extern short DevGetInfo(unsigned short usDevNumber, unsigned short usFunction, extern short DevGetInfo(unsigned short usDevNumber, unsigned short usFunction,
unsigned short usSize, void* pvData); unsigned short usSize, void* pvData);
extern short DevGetTaskParameter(unsigned short usDevNumber, extern short DevGetTaskParameter(unsigned short usDevNumber,
unsigned short usNumber, unsigned short usSize, void* pvData); unsigned short usNumber, unsigned short usSize,
void* pvData);
extern short DevExchangeIO(unsigned short usDevNumber, extern short DevExchangeIO(unsigned short usDevNumber,
unsigned short usSendOffset, unsigned short usSendSize, void* pvSendData, unsigned short usSendOffset,
unsigned short usReceiveOffset, unsigned short usReceiveSize, unsigned short usSendSize, void* pvSendData,
void* pvReceiveData, unsigned long ulTimeout); unsigned short usReceiveOffset,
unsigned short usReceiveSize, void* pvReceiveData,
unsigned long ulTimeout);
extern short DevReadSendData(unsigned short usDevNumber, extern short DevReadSendData(unsigned short usDevNumber,
unsigned short usOffset, unsigned short usSize, void* pvData); unsigned short usOffset, unsigned short usSize,
void* pvData);
extern short DevSetHostState( extern short DevSetHostState(unsigned short usDevNumber, unsigned short usMode,
unsigned short usDevNumber, unsigned short usMode, unsigned long ulTimeout); unsigned long ulTimeout);
extern short DevExtendedData(unsigned short usDevNumber, unsigned short usMode, extern short DevExtendedData(unsigned short usDevNumber, unsigned short usMode,
unsigned short usSize, void* pvData); unsigned short usSize, void* pvData);
extern short DevGetMBXData(unsigned short usDevNumber, extern short DevGetMBXData(unsigned short usDevNumber,
unsigned short usHostSize, void* pvHostData, unsigned short usDevSize, unsigned short usHostSize, void* pvHostData,
void* pvDevData); unsigned short usDevSize, void* pvDevData);
extern short DevGetBoardInfoEx(void* pvData); extern short DevGetBoardInfoEx(void* pvData);
extern short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode, extern short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode,
unsigned short usSendOffset, unsigned short usSendSize, void* pvSendData, unsigned short usSendOffset,
unsigned short usReceiveOffset, unsigned short usReceiveSize, unsigned short usSendSize, void* pvSendData,
void* pvReceiveData, unsigned long ulTimeout); unsigned short usReceiveOffset,
unsigned short usReceiveSize, void* pvReceiveData,
unsigned long ulTimeout);
extern short DevExchangeIOErr(unsigned short usDevNumber, extern short DevExchangeIOErr(unsigned short usDevNumber,
unsigned short usSendOffset, unsigned short usSendSize, void* pvSendData, unsigned short usSendOffset,
unsigned short usReceiveOffset, unsigned short usReceiveSize, unsigned short usSendSize, void* pvSendData,
void* pvReceiveData, COMSTATE* ptState, unsigned long ulTimeout); unsigned short usReceiveOffset,
unsigned short usReceiveSize, void* pvReceiveData,
COMSTATE* ptState, unsigned long ulTimeout);
extern short DevReadWriteDPMRaw(unsigned short usDevNumber, extern short DevReadWriteDPMRaw(unsigned short usDevNumber,
unsigned short usMode, unsigned short usOffset, unsigned short usSize, unsigned short usMode, unsigned short usOffset,
void* pvData); unsigned short usSize, void* pvData);
extern short DevSpecialControl(unsigned short usDevNumber, extern short DevSpecialControl(unsigned short usDevNumber,
unsigned short usMode, unsigned short* pusCtrlAck); unsigned short usMode,
unsigned short* pusCtrlAck);
extern short DevDownload(unsigned short usDevNumber, unsigned short usMode, extern short DevDownload(unsigned short usDevNumber, unsigned short usMode,
unsigned char* pszFileName, unsigned long* pdwBytes); unsigned char* pszFileName, unsigned long* pdwBytes);
extern short DevReadWriteDPMData(unsigned short usDevNumber, extern short DevReadWriteDPMData(unsigned short usDevNumber,
unsigned short usMode, unsigned short usOffset, unsigned short usSize, unsigned short usMode, unsigned short usOffset,
void* pvData); unsigned short usSize, void* pvData);
extern short DevSetOpMode( extern short DevSetOpMode(unsigned short usBoard, unsigned short usMode,
unsigned short usBoard, unsigned short usMode, unsigned short* usIrq); unsigned short* usIrq);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -171,7 +171,8 @@ ...@@ -171,7 +171,8 @@
/* ------------------------ RCS message definition ------------------------ */ /* ------------------------ RCS message definition ------------------------ */
typedef struct RCS_MESSAGEHEADERtag { typedef struct RCS_MESSAGEHEADERtag
{
unsigned char rx; /* receiver */ unsigned char rx; /* receiver */
unsigned char tx; /* transmitter */ unsigned char tx; /* transmitter */
unsigned char ln; /* lenght */ unsigned char ln; /* lenght */
...@@ -182,7 +183,8 @@ typedef struct RCS_MESSAGEHEADERtag { ...@@ -182,7 +183,8 @@ typedef struct RCS_MESSAGEHEADERtag {
unsigned char e; /* extension */ unsigned char e; /* extension */
} RCS_MESSAGEHEADER; } RCS_MESSAGEHEADER;
typedef struct RCS_MESSAGEtag { typedef struct RCS_MESSAGEtag
{
unsigned char rx; /* receiver */ unsigned char rx; /* receiver */
unsigned char tx; /* transmitter */ unsigned char tx; /* transmitter */
unsigned char ln; /* lenght */ unsigned char ln; /* lenght */
...@@ -197,7 +199,8 @@ typedef struct RCS_MESSAGEtag { ...@@ -197,7 +199,8 @@ typedef struct RCS_MESSAGEtag {
/* ----------------- Standard telegram header ----------------------------- */ /* ----------------- Standard telegram header ----------------------------- */
/* Keyword: MESSAGE, TASK_B_10 --------------------------------------------*/ /* Keyword: MESSAGE, TASK_B_10 --------------------------------------------*/
typedef struct RCS_TELEGRAMHEADER_10tag { typedef struct RCS_TELEGRAMHEADER_10tag
{
unsigned char device_adr; /* device address */ unsigned char device_adr; /* device address */
unsigned char data_area; /* data area */ unsigned char data_area; /* data area */
unsigned short data_adr; /* data address */ unsigned short data_adr; /* data address */
...@@ -207,7 +210,8 @@ typedef struct RCS_TELEGRAMHEADER_10tag { ...@@ -207,7 +210,8 @@ typedef struct RCS_TELEGRAMHEADER_10tag {
unsigned char function; /* function */ unsigned char function; /* function */
} RCS_TELEGRAMHEADER_10; } RCS_TELEGRAMHEADER_10;
typedef struct RCS_MESSAGETELEGRAMHEADER_10_tag { typedef struct RCS_MESSAGETELEGRAMHEADER_10_tag
{
unsigned char rx; /* receiver */ unsigned char rx; /* receiver */
unsigned char tx; /* transmitter */ unsigned char tx; /* transmitter */
unsigned char ln; /* lenght */ unsigned char ln; /* lenght */
...@@ -225,7 +229,8 @@ typedef struct RCS_MESSAGETELEGRAMHEADER_10_tag { ...@@ -225,7 +229,8 @@ typedef struct RCS_MESSAGETELEGRAMHEADER_10_tag {
unsigned char function; /* function */ unsigned char function; /* function */
} RCS_MESSAGETELEGRAMHEADER_10; } RCS_MESSAGETELEGRAMHEADER_10;
typedef struct RCS_TELEGRAMHEADERDATA_10tag { typedef struct RCS_TELEGRAMHEADERDATA_10tag
{
unsigned char device_adr; unsigned char device_adr;
unsigned char data_area; unsigned char data_area;
unsigned short data_adr; unsigned short data_adr;
...@@ -237,7 +242,8 @@ typedef struct RCS_TELEGRAMHEADERDATA_10tag { ...@@ -237,7 +242,8 @@ typedef struct RCS_TELEGRAMHEADERDATA_10tag {
d[RCS_SEGMENT_LEN - RCS_MESSAGEHEADER_LEN - RCS_TELEGRAMHEADER_LEN]; d[RCS_SEGMENT_LEN - RCS_MESSAGEHEADER_LEN - RCS_TELEGRAMHEADER_LEN];
} RCS_TELEGRAMHEADERDATA_10; } RCS_TELEGRAMHEADERDATA_10;
typedef struct RCS_MESSAGETELEGRAM_10tag { typedef struct RCS_MESSAGETELEGRAM_10tag
{
unsigned char rx; /* receiver */ unsigned char rx; /* receiver */
unsigned char tx; /* transmitter */ unsigned char tx; /* transmitter */
unsigned char ln; /* lenght */ unsigned char ln; /* lenght */
......
...@@ -56,8 +56,8 @@ ...@@ -56,8 +56,8 @@
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8, void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8,
pwr_tUInt16 rawvalue16, pwr_tUInt32 rawvalue32, pwr_tFloat32* actvalue_p, pwr_tUInt16 rawvalue16, pwr_tUInt32 rawvalue32,
pwr_tEnum representation) pwr_tFloat32* actvalue_p, pwr_tEnum representation)
{ {
pwr_tFloat32 sigvalue; pwr_tFloat32 sigvalue;
...@@ -66,24 +66,30 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8, ...@@ -66,24 +66,30 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8,
pwr_tFloat32 f_raw = 0.0; pwr_tFloat32 f_raw = 0.0;
int i; int i;
if (nobits == 32) { if (nobits == 32)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((int)rawvalue32); f_raw = (float)((int)rawvalue32);
else else
f_raw = (float)rawvalue32; f_raw = (float)rawvalue32;
} else if (nobits == 16) { }
else if (nobits == 16)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((short)rawvalue16); f_raw = (float)((short)rawvalue16);
else else
f_raw = (float)rawvalue16; f_raw = (float)rawvalue16;
} else if (nobits == 8) { }
else if (nobits == 8)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((char)rawvalue8); f_raw = (float)((char)rawvalue8);
else else
f_raw = (float)rawvalue8; f_raw = (float)rawvalue8;
} }
switch (cop->SensorPolyType) { switch (cop->SensorPolyType)
{
case 0: case 0:
*actvalue_p = cop->SigValPolyCoef0 + cop->SigValPolyCoef1 * f_raw; *actvalue_p = cop->SigValPolyCoef0 + cop->SigValPolyCoef1 * f_raw;
break; break;
...@@ -94,7 +100,8 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8, ...@@ -94,7 +100,8 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8,
sigvalue = cop->SigValPolyCoef0 + cop->SigValPolyCoef1 * f_raw; sigvalue = cop->SigValPolyCoef0 + cop->SigValPolyCoef1 * f_raw;
polycoef_p = &cop->SensorPolyCoef2; polycoef_p = &cop->SensorPolyCoef2;
actvalue = 0; actvalue = 0;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++)
{
actvalue = sigvalue * actvalue + *polycoef_p; actvalue = sigvalue * actvalue + *polycoef_p;
polycoef_p--; polycoef_p--;
} }
...@@ -124,8 +131,9 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8, ...@@ -124,8 +131,9 @@ void ConvertAi(pwr_sClass_ChanAi* cop, pwr_tInt16 nobits, pwr_tUInt8 rawvalue8,
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits, void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits,
pwr_tUInt16 rawvalue8, pwr_tUInt16 rawvalue16, pwr_tUInt32 rawvalue32, pwr_tUInt16 rawvalue8, pwr_tUInt16 rawvalue16,
pwr_tFloat32* actvalue_p, pwr_tEnum representation) pwr_tUInt32 rawvalue32, pwr_tFloat32* actvalue_p,
pwr_tEnum representation)
{ {
pwr_tFloat32 Slope; pwr_tFloat32 Slope;
pwr_tFloat32 Intercept; pwr_tFloat32 Intercept;
...@@ -136,17 +144,22 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits, ...@@ -136,17 +144,22 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits,
pwr_tFloat32 sigvalue; pwr_tFloat32 sigvalue;
pwr_tFloat32 f_raw = 0.0; pwr_tFloat32 f_raw = 0.0;
if (nobits == 32) { if (nobits == 32)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((int)rawvalue32); f_raw = (float)((int)rawvalue32);
else else
f_raw = (float)rawvalue32; f_raw = (float)rawvalue32;
} else if (nobits == 16) { }
else if (nobits == 16)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((short)rawvalue16); f_raw = (float)((short)rawvalue16);
else else
f_raw = (float)rawvalue16; f_raw = (float)rawvalue16;
} else if (nobits == 8) { }
else if (nobits == 8)
{
if (representation == PB_NUMREP_SIGNEDINT) if (representation == PB_NUMREP_SIGNEDINT)
f_raw = (float)((char)rawvalue8); f_raw = (float)((char)rawvalue8);
else else
...@@ -157,7 +170,8 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits, ...@@ -157,7 +170,8 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits,
Last = cop->NoOfCoordinates; Last = cop->NoOfCoordinates;
while ((Last - First) > 1) { while ((Last - First) > 1)
{
Middle = (First + Last) / 2; Middle = (First + Last) / 2;
TransTabValue = cop->InValue[Middle]; TransTabValue = cop->InValue[Middle];
if (sigvalue < TransTabValue) if (sigvalue < TransTabValue)
...@@ -174,8 +188,8 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits, ...@@ -174,8 +188,8 @@ void ConvertAit(pwr_sClass_ChanAit* cop, pwr_tInt16 nobits,
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Ai Init method for the Pb module Ai
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ai* op; pwr_sClass_Pb_Ai* op;
...@@ -185,23 +199,28 @@ static pwr_tStatus IoCardInit( ...@@ -185,23 +199,28 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Ai*)cp->op; op = (pwr_sClass_Pb_Ai*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
if (rp->Class != pwr_cClass_Pb_DP_Slave) { if (rp->Class != pwr_cClass_Pb_DP_Slave)
{
errh_Info("Illegal object type %s", cp->Name); errh_Info("Illegal object type %s", cp->Name);
return 1; return 1;
} }
if (op->Status >= PB_MODULE_STATE_OPERATE) { if (op->Status >= PB_MODULE_STATE_OPERATE)
for (i = 0; i < IO_MAXCHAN; i++) { {
for (i = 0; i < IO_MAXCHAN; i++)
{
local->scancount[i] = 0; local->scancount[i] = 0;
} }
// Calculate polycoeff // Calculate polycoeff
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop) if (!chanp->cop)
continue; continue;
io_AiRangeToCoef(chanp); io_AiRangeToCoef(chanp);
} }
} else }
else
errh_Info("Error initializing Pb module Ai %s", cp->Name); errh_Info("Error initializing Pb module Ai %s", cp->Name);
return IO__SUCCESS; return IO__SUCCESS;
...@@ -210,8 +229,8 @@ static pwr_tStatus IoCardInit( ...@@ -210,8 +229,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Read method for the Pb Ai card Read method for the Pb Ai card
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead( static pwr_tStatus IoCardRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ai* op; pwr_sClass_Pb_Ai* op;
...@@ -232,8 +251,10 @@ static pwr_tStatus IoCardRead( ...@@ -232,8 +251,10 @@ static pwr_tStatus IoCardRead(
op = (pwr_sClass_Pb_Ai*)cp->op; op = (pwr_sClass_Pb_Ai*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
for (i = 0; i < cp->ChanListSize; i++) { {
for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop || !chanp->sop) if (!chanp->cop || !chanp->sop)
continue; continue;
...@@ -244,71 +265,82 @@ static pwr_tStatus IoCardRead( ...@@ -244,71 +265,82 @@ static pwr_tStatus IoCardRead(
if (cop->CalculateNewCoef) if (cop->CalculateNewCoef)
io_AiRangeToCoef(chanp); io_AiRangeToCoef(chanp);
if (cop->ConversionOn) { if (cop->ConversionOn)
if (local->scancount[i] <= 1) { {
if (op->BytesPerChannel == 4) { if (local->scancount[i] <= 1)
{
if (op->BytesPerChannel == 4)
{
memcpy(&udata32, local->input_area + op->OffsetInputs + 4 * i, 4); memcpy(&udata32, local->input_area + op->OffsetInputs + 4 * i, 4);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata32 = swap32(udata32); udata32 = swap32(udata32);
data32 = (pwr_tInt32)udata32; data32 = (pwr_tInt32)udata32;
sop->RawValue = 0; sop->RawValue = 0;
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
sop->SigValue sop->SigValue =
= udata32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; udata32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
else else
sop->SigValue sop->SigValue =
= data32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; data32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanAi: case pwr_cClass_ChanAi:
ConvertAi( ConvertAi(cop, 32, 0, 0, udata32, &actvalue,
cop, 32, 0, 0, udata32, &actvalue, op->NumberRepresentation); op->NumberRepresentation);
break; break;
case pwr_cClass_ChanAit: case pwr_cClass_ChanAit:
ConvertAit((pwr_sClass_ChanAit*)cop, 32, 0, 0, udata32, &actvalue, ConvertAit((pwr_sClass_ChanAit*)cop, 32, 0, 0, udata32, &actvalue,
op->NumberRepresentation); op->NumberRepresentation);
break; break;
} }
} else if (op->BytesPerChannel == 3) { }
else if (op->BytesPerChannel == 3)
{
udata32 = 0; udata32 = 0;
memcpy(&udata32, local->input_area + op->OffsetInputs + 3 * i, 3); memcpy(&udata32, local->input_area + op->OffsetInputs + 3 * i, 3);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) { if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
{
udata32 = swap32(udata32); udata32 = swap32(udata32);
udata32 = udata32 >> 8; udata32 = udata32 >> 8;
} }
data32 = (pwr_tInt32)udata32; data32 = (pwr_tInt32)udata32;
sop->RawValue = 0; sop->RawValue = 0;
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
sop->SigValue sop->SigValue =
= udata32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; udata32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
else else
sop->SigValue sop->SigValue =
= data32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; data32 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanAi: case pwr_cClass_ChanAi:
ConvertAi( ConvertAi(cop, 32, 0, 0, udata32, &actvalue,
cop, 32, 0, 0, udata32, &actvalue, op->NumberRepresentation); op->NumberRepresentation);
break; break;
case pwr_cClass_ChanAit: case pwr_cClass_ChanAit:
ConvertAit((pwr_sClass_ChanAit*)cop, 32, 0, 0, udata32, &actvalue, ConvertAit((pwr_sClass_ChanAit*)cop, 32, 0, 0, udata32, &actvalue,
op->NumberRepresentation); op->NumberRepresentation);
break; break;
} }
} else if (op->BytesPerChannel == 2) { }
else if (op->BytesPerChannel == 2)
{
memcpy(&udata16, local->input_area + op->OffsetInputs + 2 * i, 2); memcpy(&udata16, local->input_area + op->OffsetInputs + 2 * i, 2);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata16 = swap16(udata16); udata16 = swap16(udata16);
data16 = (pwr_tInt16)udata16; data16 = (pwr_tInt16)udata16;
sop->RawValue = udata16; sop->RawValue = udata16;
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
sop->SigValue sop->SigValue =
= udata16 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; udata16 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
else else
sop->SigValue sop->SigValue =
= data16 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; data16 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanAi: case pwr_cClass_ChanAi:
ConvertAi( ConvertAi(cop, 16, 0, udata16, 0, &actvalue,
cop, 16, 0, udata16, 0, &actvalue, op->NumberRepresentation); op->NumberRepresentation);
break; break;
case pwr_cClass_ChanAit: case pwr_cClass_ChanAit:
ConvertAit((pwr_sClass_ChanAit*)cop, 16, 0, udata16, 0, &actvalue, ConvertAit((pwr_sClass_ChanAit*)cop, 16, 0, udata16, 0, &actvalue,
...@@ -317,20 +349,22 @@ static pwr_tStatus IoCardRead( ...@@ -317,20 +349,22 @@ static pwr_tStatus IoCardRead(
} }
} }
else if (op->BytesPerChannel == 1) { else if (op->BytesPerChannel == 1)
{
memcpy(&udata8, local->input_area + op->OffsetInputs + i, 1); memcpy(&udata8, local->input_area + op->OffsetInputs + i, 1);
data8 = (pwr_tInt8)udata8; data8 = (pwr_tInt8)udata8;
sop->RawValue = udata8; sop->RawValue = udata8;
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
sop->SigValue sop->SigValue =
= udata8 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; udata8 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
else else
sop->SigValue sop->SigValue =
= data8 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0; data8 * cop->SigValPolyCoef1 + cop->SigValPolyCoef0;
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanAi: case pwr_cClass_ChanAi:
ConvertAi( ConvertAi(cop, 8, udata8, 0, 0, &actvalue,
cop, 8, udata8, 0, 0, &actvalue, op->NumberRepresentation); op->NumberRepresentation);
break; break;
case pwr_cClass_ChanAit: case pwr_cClass_ChanAit:
ConvertAit((pwr_sClass_ChanAit*)cop, 8, udata8, 0, 0, &actvalue, ConvertAit((pwr_sClass_ChanAit*)cop, 8, udata8, 0, 0, &actvalue,
...@@ -340,11 +374,12 @@ static pwr_tStatus IoCardRead( ...@@ -340,11 +374,12 @@ static pwr_tStatus IoCardRead(
} }
// Filter // Filter
if (sop->FilterType == 1 && sop->FilterAttribute[0] > 0 if (sop->FilterType == 1 && sop->FilterAttribute[0] > 0 &&
&& sop->FilterAttribute[0] > ctx->ScanTime) { sop->FilterAttribute[0] > ctx->ScanTime)
actvalue = *(pwr_tFloat32*)chanp->vbp {
+ ctx->ScanTime / sop->FilterAttribute[0] actvalue = *(pwr_tFloat32*)chanp->vbp +
* (actvalue - *(pwr_tFloat32*)chanp->vbp); ctx->ScanTime / sop->FilterAttribute[0] *
(actvalue - *(pwr_tFloat32*)chanp->vbp);
} }
*(pwr_tFloat32*)chanp->vbp = actvalue; *(pwr_tFloat32*)chanp->vbp = actvalue;
...@@ -362,8 +397,8 @@ static pwr_tStatus IoCardRead( ...@@ -362,8 +397,8 @@ static pwr_tStatus IoCardRead(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Close method for the Pb Ai card Close method for the Pb Ai card
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -377,5 +412,6 @@ static pwr_tStatus IoCardClose( ...@@ -377,5 +412,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Ai) = { pwr_BindIoMethod(IoCardInit), pwr_dExport pwr_BindIoMethods(Pb_Ai) = {
pwr_BindIoMethod(IoCardRead), pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Ao Init method for the Pb module Ao
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ao* op; pwr_sClass_Pb_Ao* op;
...@@ -63,20 +63,24 @@ static pwr_tStatus IoCardInit( ...@@ -63,20 +63,24 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Ao*)cp->op; op = (pwr_sClass_Pb_Ao*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
if (rp->Class != pwr_cClass_Pb_DP_Slave) { if (rp->Class != pwr_cClass_Pb_DP_Slave)
{
errh_Info("Illegal object type %s", cp->Name); errh_Info("Illegal object type %s", cp->Name);
return IO__SUCCESS; return IO__SUCCESS;
} }
if (op->Status >= PB_MODULE_STATE_OPERATE) { if (op->Status >= PB_MODULE_STATE_OPERATE)
{
// Calculate polycoeff // Calculate polycoeff
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop) if (!chanp->cop)
continue; continue;
io_AoRangeToCoef(chanp); io_AoRangeToCoef(chanp);
} }
} else }
else
errh_Info("Error initializing Pb module Ao %s", cp->Name); errh_Info("Error initializing Pb module Ao %s", cp->Name);
return IO__SUCCESS; return IO__SUCCESS;
...@@ -85,8 +89,8 @@ static pwr_tStatus IoCardInit( ...@@ -85,8 +89,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Write method for the Pb module Ao Write method for the Pb module Ao
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardWrite( static pwr_tStatus IoCardWrite(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ao* op; pwr_sClass_Pb_Ao* op;
...@@ -109,10 +113,12 @@ static pwr_tStatus IoCardWrite( ...@@ -109,10 +113,12 @@ static pwr_tStatus IoCardWrite(
op = (pwr_sClass_Pb_Ao*)cp->op; op = (pwr_sClass_Pb_Ao*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
{
fixout = ctx->Node->EmergBreakTrue && ctx->Node->EmergBreakSelect == FIXOUT; fixout = ctx->Node->EmergBreakTrue && ctx->Node->EmergBreakSelect == FIXOUT;
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop || !chanp->sop) if (!chanp->cop || !chanp->sop)
continue; continue;
...@@ -125,7 +131,8 @@ static pwr_tStatus IoCardWrite( ...@@ -125,7 +131,8 @@ static pwr_tStatus IoCardWrite(
value = cop->FixedOutValue; value = cop->FixedOutValue;
else if (cop->TestOn) else if (cop->TestOn)
value = cop->TestValue; value = cop->TestValue;
else { else
{
value = *(pwr_tFloat32*)chanp->vbp; value = *(pwr_tFloat32*)chanp->vbp;
} }
...@@ -152,50 +159,66 @@ static pwr_tStatus IoCardWrite( ...@@ -152,50 +159,66 @@ static pwr_tStatus IoCardWrite(
// Calculate signal value // Calculate signal value
sop->SigValue = cop->SigValPolyCoef1 * value + cop->SigValPolyCoef0; sop->SigValue = cop->SigValPolyCoef1 * value + cop->SigValPolyCoef0;
if (op->BytesPerChannel == 4) { if (op->BytesPerChannel == 4)
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { {
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
udata32 = (pwr_tUInt32)rawvalue; udata32 = (pwr_tUInt32)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata32 = swap32(udata32); udata32 = swap32(udata32);
memcpy(local->output_area + op->OffsetOutputs + 4 * i, &udata32, 4); memcpy(local->output_area + op->OffsetOutputs + 4 * i, &udata32, 4);
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
data32 = (pwr_tInt32)rawvalue; data32 = (pwr_tInt32)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data32 = swap32(data32); data32 = swap32(data32);
memcpy(local->output_area + op->OffsetOutputs + 4 * i, &data32, 4); memcpy(local->output_area + op->OffsetOutputs + 4 * i, &data32, 4);
} }
}
} else if (op->BytesPerChannel == 3) { else if (op->BytesPerChannel == 3)
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { {
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
udata32 = (pwr_tUInt32)rawvalue; udata32 = (pwr_tUInt32)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata32 = swap32(udata32); udata32 = swap32(udata32);
memcpy(local->output_area + op->OffsetOutputs + 3 * i, &udata32, 3); memcpy(local->output_area + op->OffsetOutputs + 3 * i, &udata32, 3);
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
data32 = (pwr_tInt32)rawvalue; data32 = (pwr_tInt32)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data32 = swap32(data32); data32 = swap32(data32);
memcpy(local->output_area + op->OffsetOutputs + 3 * i, &data32, 3); memcpy(local->output_area + op->OffsetOutputs + 3 * i, &data32, 3);
} }
}
} else if (op->BytesPerChannel == 2) { else if (op->BytesPerChannel == 2)
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { {
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
udata16 = (pwr_tUInt16)rawvalue; udata16 = (pwr_tUInt16)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata16 = swap16(udata16); udata16 = swap16(udata16);
memcpy(local->output_area + op->OffsetOutputs + 2 * i, &udata16, 2); memcpy(local->output_area + op->OffsetOutputs + 2 * i, &udata16, 2);
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
data16 = (pwr_tInt16)rawvalue; data16 = (pwr_tInt16)rawvalue;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data16 = swap16(data16); data16 = swap16(data16);
memcpy(local->output_area + op->OffsetOutputs + 2 * i, &data16, 2); memcpy(local->output_area + op->OffsetOutputs + 2 * i, &data16, 2);
} }
}
} else if (op->BytesPerChannel == 1) { else if (op->BytesPerChannel == 1)
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { {
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
udata8 = (pwr_tUInt8)rawvalue; udata8 = (pwr_tUInt8)rawvalue;
memcpy(local->output_area + op->OffsetOutputs + i, &udata8, 1); memcpy(local->output_area + op->OffsetOutputs + i, &udata8, 1);
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
data8 = (pwr_tInt8)rawvalue; data8 = (pwr_tInt8)rawvalue;
memcpy(local->output_area + op->OffsetOutputs + i, &data8, 1); memcpy(local->output_area + op->OffsetOutputs + i, &data8, 1);
} }
...@@ -209,8 +232,8 @@ static pwr_tStatus IoCardWrite( ...@@ -209,8 +232,8 @@ static pwr_tStatus IoCardWrite(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -224,6 +247,6 @@ static pwr_tStatus IoCardClose( ...@@ -224,6 +247,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Ao) pwr_dExport pwr_BindIoMethods(Pb_Ao) = {
= { pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -54,8 +54,8 @@ ...@@ -54,8 +54,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Move di data word to valuebase. Move di data word to valuebase.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
void pbio_DiUnpackWord( void pbio_DiUnpackWord(io_sCard* cp, pwr_tUInt16 data, pwr_tUInt16 mask,
io_sCard* cp, pwr_tUInt16 data, pwr_tUInt16 mask, int index) int index)
{ {
io_sChannel* chanp; io_sChannel* chanp;
...@@ -64,7 +64,8 @@ void pbio_DiUnpackWord( ...@@ -64,7 +64,8 @@ void pbio_DiUnpackWord(
else else
chanp = &cp->chanlist[16]; chanp = &cp->chanlist[16];
if (mask == IO_CONVMASK_ALL) { if (mask == IO_CONVMASK_ALL)
{
/* No conversion test */ /* No conversion test */
if (chanp->cop && chanp->sop) if (chanp->cop && chanp->sop)
*(pwr_tUInt16*)(chanp->vbp) = ((data & 1) != 0); *(pwr_tUInt16*)(chanp->vbp) = ((data & 1) != 0);
...@@ -114,7 +115,9 @@ void pbio_DiUnpackWord( ...@@ -114,7 +115,9 @@ void pbio_DiUnpackWord(
if (chanp->cop && chanp->sop) if (chanp->cop && chanp->sop)
*(pwr_tUInt16*)(chanp->vbp) = ((data & 32768) != 0); *(pwr_tUInt16*)(chanp->vbp) = ((data & 32768) != 0);
chanp++; chanp++;
} else { }
else
{
if (chanp->cop && chanp->sop && mask & 1) if (chanp->cop && chanp->sop && mask & 1)
*(pwr_tUInt16*)(chanp->vbp) = ((data & 1) != 0); *(pwr_tUInt16*)(chanp->vbp) = ((data & 1) != 0);
chanp++; chanp++;
...@@ -169,8 +172,8 @@ void pbio_DiUnpackWord( ...@@ -169,8 +172,8 @@ void pbio_DiUnpackWord(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Di Init method for the Pb module Di
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Di* op; pwr_sClass_Pb_Di* op;
...@@ -180,8 +183,8 @@ static pwr_tStatus IoCardInit( ...@@ -180,8 +183,8 @@ static pwr_tStatus IoCardInit(
// Check configuration // Check configuration
if (op->NumberOfChannels != 8 && op->NumberOfChannels != 16 if (op->NumberOfChannels != 8 && op->NumberOfChannels != 16 &&
&& op->NumberOfChannels != 32) op->NumberOfChannels != 32)
op->Status = PB_MODULE_STATE_NOTINIT; op->Status = PB_MODULE_STATE_NOTINIT;
if (op->Orientation > op->NumberOfChannels) if (op->Orientation > op->NumberOfChannels)
...@@ -196,8 +199,8 @@ static pwr_tStatus IoCardInit( ...@@ -196,8 +199,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Read method for the Pb module Di Read method for the Pb module Di
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead( static pwr_tStatus IoCardRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Di* op; pwr_sClass_Pb_Di* op;
...@@ -208,22 +211,27 @@ static pwr_tStatus IoCardRead( ...@@ -208,22 +211,27 @@ static pwr_tStatus IoCardRead(
pwr_sClass_Di* sig_di; pwr_sClass_Di* sig_di;
pwr_tUInt32 mask = 0; pwr_tUInt32 mask = 0;
pwr_tUInt16 data[2] = { 0, 0 }; pwr_tUInt16 data[2] = {0, 0};
pwr_tUInt32* data32; pwr_tUInt32* data32;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
op = (pwr_sClass_Pb_Di*)cp->op; op = (pwr_sClass_Pb_Di*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
{
memcpy(&data, local->input_area + op->OffsetInputs, op->BytesOfInput); memcpy(&data, local->input_area + op->OffsetInputs, op->BytesOfInput);
data32 = (pwr_tUInt32*)&data; data32 = (pwr_tUInt32*)&data;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) { if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
if (op->Orientation == PB_ORIENTATION_WORD) { {
if (op->Orientation == PB_ORIENTATION_WORD)
{
data[0] = swap16(data[0]); data[0] = swap16(data[0]);
data[1] = swap16(data[1]); data[1] = swap16(data[1]);
} else if (op->Orientation == PB_ORIENTATION_DWORD) { }
else if (op->Orientation == PB_ORIENTATION_DWORD)
{
*data32 = swap32(*data32); *data32 = swap32(*data32);
} }
} }
...@@ -233,11 +241,13 @@ static pwr_tStatus IoCardRead( ...@@ -233,11 +241,13 @@ static pwr_tStatus IoCardRead(
data[1] = data[1] ^ op->InvMask2; data[1] = data[1] ^ op->InvMask2;
// Packa upp // Packa upp
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
chan_di = (pwr_sClass_ChanDi*)chanp->cop; chan_di = (pwr_sClass_ChanDi*)chanp->cop;
sig_di = (pwr_sClass_Di*)chanp->sop; sig_di = (pwr_sClass_Di*)chanp->sop;
if (chan_di && sig_di) { if (chan_di && sig_di)
{
mask = 1 << chan_di->Number; mask = 1 << chan_di->Number;
*(pwr_tUInt16*)(chanp->vbp) = ((*data32 & mask) != 0); *(pwr_tUInt16*)(chanp->vbp) = ((*data32 & mask) != 0);
} }
...@@ -258,8 +268,8 @@ static pwr_tStatus IoCardRead( ...@@ -258,8 +268,8 @@ static pwr_tStatus IoCardRead(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -273,5 +283,6 @@ static pwr_tStatus IoCardClose( ...@@ -273,5 +283,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Di) = { pwr_BindIoMethod(IoCardInit), pwr_dExport pwr_BindIoMethods(Pb_Di) = {
pwr_BindIoMethod(IoCardRead), pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Do Init method for the Pb module Do
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Do* op; pwr_sClass_Pb_Do* op;
...@@ -61,8 +61,8 @@ static pwr_tStatus IoCardInit( ...@@ -61,8 +61,8 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Do*)cp->op; op = (pwr_sClass_Pb_Do*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
if (op->NumberOfChannels != 8 && op->NumberOfChannels != 16 if (op->NumberOfChannels != 8 && op->NumberOfChannels != 16 &&
&& op->NumberOfChannels != 32) op->NumberOfChannels != 32)
op->Status = PB_MODULE_STATE_NOTINIT; op->Status = PB_MODULE_STATE_NOTINIT;
if (op->Orientation > op->NumberOfChannels) if (op->Orientation > op->NumberOfChannels)
...@@ -77,8 +77,8 @@ static pwr_tStatus IoCardInit( ...@@ -77,8 +77,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Write method for the Pb module Do Write method for the Pb module Do
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardWrite( static pwr_tStatus IoCardWrite(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Do* op; pwr_sClass_Pb_Do* op;
...@@ -90,22 +90,25 @@ static pwr_tStatus IoCardWrite( ...@@ -90,22 +90,25 @@ static pwr_tStatus IoCardWrite(
pwr_tUInt32 mask = 0; pwr_tUInt32 mask = 0;
pwr_tInt32 do_actval; pwr_tInt32 do_actval;
pwr_tUInt16 data[2] = { 0, 0 }; pwr_tUInt16 data[2] = {0, 0};
pwr_tUInt32* data32; pwr_tUInt32* data32;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
op = (pwr_sClass_Pb_Do*)cp->op; op = (pwr_sClass_Pb_Do*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
{
data32 = (pwr_tUInt32*)&data; data32 = (pwr_tUInt32*)&data;
// Packa ner // Packa ner
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
chan_do = (pwr_sClass_ChanDo*)chanp->cop; chan_do = (pwr_sClass_ChanDo*)chanp->cop;
sig_do = (pwr_sClass_Do*)chanp->sop; sig_do = (pwr_sClass_Do*)chanp->sop;
if (chan_do && sig_do) { if (chan_do && sig_do)
{
mask = 1 << chan_do->Number; mask = 1 << chan_do->Number;
do_actval = *(pwr_tInt32*)chanp->vbp; do_actval = *(pwr_tInt32*)chanp->vbp;
if (do_actval != 0) if (do_actval != 0)
...@@ -118,11 +121,15 @@ static pwr_tStatus IoCardWrite( ...@@ -118,11 +121,15 @@ static pwr_tStatus IoCardWrite(
io_DoPackWord(cp, &data[0], 0); io_DoPackWord(cp, &data[0], 0);
if (op->NumberOfChannels > 16) io_DoPackWord(cp, &data[1], 1); if (op->NumberOfChannels > 16) io_DoPackWord(cp, &data[1], 1);
*/ */
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) { if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
if (op->Orientation == PB_ORIENTATION_WORD) { {
if (op->Orientation == PB_ORIENTATION_WORD)
{
data[0] = swap16(data[0]); data[0] = swap16(data[0]);
data[1] = swap16(data[1]); data[1] = swap16(data[1]);
} else if (op->Orientation == PB_ORIENTATION_DWORD) { }
else if (op->Orientation == PB_ORIENTATION_DWORD)
{
*data32 = swap32(*data32); *data32 = swap32(*data32);
} }
} }
...@@ -135,8 +142,8 @@ static pwr_tStatus IoCardWrite( ...@@ -135,8 +142,8 @@ static pwr_tStatus IoCardWrite(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -150,6 +157,6 @@ static pwr_tStatus IoCardClose( ...@@ -150,6 +157,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Do) pwr_dExport pwr_BindIoMethods(Pb_Do) = {
= { pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -112,7 +112,8 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -112,7 +112,8 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
latent_input_count = 0; latent_input_count = 0;
latent_output_count = 0; latent_output_count = 0;
while (cardp) { while (cardp)
{
local_card = calloc(1, sizeof(*local_card)); local_card = calloc(1, sizeof(*local_card));
cardp->Local = local_card; cardp->Local = local_card;
local_card->input_area = (void*)&(op->Inputs); local_card->input_area = (void*)&(op->Inputs);
...@@ -124,7 +125,8 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -124,7 +125,8 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
while (ODD(gdh_GetSuperClass(cid, &cid, cardp->Objid))) while (ODD(gdh_GetSuperClass(cid, &cid, cardp->Objid)))
; ;
switch (cid) { switch (cid)
{
/* Old style configuring with Pb_xx objects. Still here for combatibility /* Old style configuring with Pb_xx objects. Still here for combatibility
reasons. reasons.
New systems (from v4.1.3) should be build with Pb_Module objects or New systems (from v4.1.3) should be build with Pb_Module objects or
...@@ -186,16 +188,19 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -186,16 +188,19 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
mp = (pwr_sClass_Pb_Module*)cardp->op; mp = (pwr_sClass_Pb_Module*)cardp->op;
mp->Status = PB__INITFAIL; mp->Status = PB__INITFAIL;
cardp->offset = 0; cardp->offset = 0;
for (i = 0; i < cardp->ChanListSize; i++) { for (i = 0; i < cardp->ChanListSize; i++)
{
chanp = &cardp->chanlist[i]; chanp = &cardp->chanlist[i];
if (is_diag(&chanp->ChanAref)) { if (is_diag(&chanp->ChanAref))
{
chanp->udata |= PB_UDATA_DIAG; chanp->udata |= PB_UDATA_DIAG;
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanIi: case pwr_cClass_ChanIi:
chanp->offset = ((pwr_sClass_ChanIi*)chanp->cop)->Number; chanp->offset = ((pwr_sClass_ChanIi*)chanp->cop)->Number;
chanp->size chanp->size =
= GetChanSize(((pwr_sClass_ChanIi*)chanp->cop)->Representation); GetChanSize(((pwr_sClass_ChanIi*)chanp->cop)->Representation);
break; break;
default: default:
errh_Error("Diagnostic channel class, card %s", cardp->Name); errh_Error("Diagnostic channel class, card %s", cardp->Name);
...@@ -203,30 +208,34 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -203,30 +208,34 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
continue; continue;
} }
if (chanp->ChanClass != pwr_cClass_ChanDi) { if (chanp->ChanClass != pwr_cClass_ChanDi)
{
input_counter += latent_input_count; input_counter += latent_input_count;
latent_input_count = 0; latent_input_count = 0;
} }
if (chanp->ChanClass != pwr_cClass_ChanDo) { if (chanp->ChanClass != pwr_cClass_ChanDo)
{
output_counter += latent_output_count; output_counter += latent_output_count;
latent_output_count = 0; latent_output_count = 0;
} }
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanDi: case pwr_cClass_ChanDi:
chan_di = (pwr_sClass_ChanDi*)chanp->cop; chan_di = (pwr_sClass_ChanDi*)chanp->cop;
if (chan_di->Number == 0) { if (chan_di->Number == 0)
{
input_counter += latent_input_count; input_counter += latent_input_count;
latent_input_count = 0; latent_input_count = 0;
} }
chanp->offset = input_counter; chanp->offset = input_counter;
chanp->mask = 1 << chan_di->Number; chanp->mask = 1 << chan_di->Number;
if (chan_di->Representation == pwr_eDataRepEnum_Bit16 if (chan_di->Representation == pwr_eDataRepEnum_Bit16 &&
&& op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
chanp->mask = swap16(chanp->mask); chanp->mask = swap16(chanp->mask);
if (chan_di->Representation == pwr_eDataRepEnum_Bit32 if (chan_di->Representation == pwr_eDataRepEnum_Bit32 &&
&& op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
chanp->mask = swap32(chanp->mask); chanp->mask = swap32(chanp->mask);
if (chan_di->Number == 0) if (chan_di->Number == 0)
latent_input_count = GetChanSize(chan_di->Representation); latent_input_count = GetChanSize(chan_di->Representation);
...@@ -269,18 +278,19 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -269,18 +278,19 @@ static pwr_tStatus IoRackInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
case pwr_cClass_ChanDo: case pwr_cClass_ChanDo:
chan_do = (pwr_sClass_ChanDo*)chanp->cop; chan_do = (pwr_sClass_ChanDo*)chanp->cop;
if (chan_do->Number == 0) { if (chan_do->Number == 0)
{
output_counter += latent_output_count; output_counter += latent_output_count;
latent_output_count = 0; latent_output_count = 0;
} }
chanp->offset = output_counter; chanp->offset = output_counter;
chan_size = GetChanSize(chan_do->Representation); chan_size = GetChanSize(chan_do->Representation);
chanp->mask = 1 << chan_do->Number; chanp->mask = 1 << chan_do->Number;
if (chan_do->Representation == pwr_eDataRepEnum_Bit16 if (chan_do->Representation == pwr_eDataRepEnum_Bit16 &&
&& op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
chanp->mask = swap16(chanp->mask); chanp->mask = swap16(chanp->mask);
if (chan_do->Representation == pwr_eDataRepEnum_Bit32 if (chan_do->Representation == pwr_eDataRepEnum_Bit32 &&
&& op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) op->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
chanp->mask = swap32(chanp->mask); chanp->mask = swap32(chanp->mask);
if (chan_do->Number == 0) if (chan_do->Number == 0)
latent_output_count = GetChanSize(chan_do->Representation); latent_output_count = GetChanSize(chan_do->Representation);
...@@ -342,35 +352,45 @@ static pwr_tStatus IoRackRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -342,35 +352,45 @@ static pwr_tStatus IoRackRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
/* The reading of the process image is now performed at the agent level, /* The reading of the process image is now performed at the agent level,
this eliminates the need for board specific code at the rack level. */ this eliminates the need for board specific code at the rack level. */
if (sp->DisableSlave != 1 && mp->DisableBus != 1) { if (sp->DisableSlave != 1 && mp->DisableBus != 1)
if (sp->Status == PB__NORMAL) { {
if (sp->Status == PB__NORMAL)
{
sp->ErrorCount = 0; sp->ErrorCount = 0;
} else { }
else
{
if (local->start_cnt >= local->start_time) if (local->start_cnt >= local->start_time)
sp->ErrorCount++; sp->ErrorCount++;
} }
if (sp->ErrorCount == sp->ErrorSoftLimit) { if (sp->ErrorCount == sp->ErrorSoftLimit)
{
errh_Error("IO Error soft limit reached on card '%s'", rp->Name); errh_Error("IO Error soft limit reached on card '%s'", rp->Name);
ctx->IOHandler->CardErrorSoftLimit = 1; ctx->IOHandler->CardErrorSoftLimit = 1;
ctx->IOHandler->ErrorSoftLimitObject = cdh_ObjidToAref(rp->Objid); ctx->IOHandler->ErrorSoftLimitObject = cdh_ObjidToAref(rp->Objid);
} }
if (sp->ErrorCount == sp->ErrorHardLimit) { if (sp->ErrorCount == sp->ErrorHardLimit)
{
errh_Error("IO Error hard limit reached on card '%s', stall action %d", errh_Error("IO Error hard limit reached on card '%s', stall action %d",
rp->Name, sp->StallAction); rp->Name, sp->StallAction);
ctx->IOHandler->CardErrorHardLimit = 1; ctx->IOHandler->CardErrorHardLimit = 1;
ctx->IOHandler->ErrorHardLimitObject = cdh_ObjidToAref(rp->Objid); ctx->IOHandler->ErrorHardLimitObject = cdh_ObjidToAref(rp->Objid);
} }
if (sp->ErrorCount > sp->ErrorHardLimit if (sp->ErrorCount > sp->ErrorHardLimit &&
&& sp->StallAction == pwr_ePbStallAction_ResetInputs) { sp->StallAction == pwr_ePbStallAction_ResetInputs)
{
memset(&sp->Inputs, 0, sp->BytesOfInput); memset(&sp->Inputs, 0, sp->BytesOfInput);
} }
if (sp->ErrorCount > sp->ErrorHardLimit if (sp->ErrorCount > sp->ErrorHardLimit &&
&& sp->StallAction == pwr_ePbStallAction_EmergencyBreak) { sp->StallAction == pwr_ePbStallAction_EmergencyBreak)
{
ctx->Node->EmergBreakTrue = 1; ctx->Node->EmergBreakTrue = 1;
} }
} else { }
else
{
sp->ErrorCount = 0; sp->ErrorCount = 0;
sp->Status = PB__DISABLED; sp->Status = PB__DISABLED;
} }
...@@ -410,6 +430,7 @@ static pwr_tStatus IoRackClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -410,6 +430,7 @@ static pwr_tStatus IoRackClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_DP_Slave) = { pwr_BindIoMethod(IoRackInit), pwr_dExport pwr_BindIoMethods(Pb_DP_Slave) = {
pwr_BindIoMethod(IoRackRead), pwr_BindIoMethod(IoRackWrite), pwr_BindIoMethod(IoRackInit), pwr_BindIoMethod(IoRackRead),
pwr_BindIoMethod(IoRackClose), pwr_NullMethod }; pwr_BindIoMethod(IoRackWrite), pwr_BindIoMethod(IoRackClose),
pwr_NullMethod};
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
static unsigned char req_res_buffer[512]; static unsigned char req_res_buffer[512];
static short fdlif_sda_sdn_sdr_req(io_sAgentLocal* local_agent, static short fdlif_sda_sdn_sdr_req(io_sAgentLocal* local_agent,
pwr_sClass_Pb_FDL_SAP* sap, pwr_sClass_Pb_FDL_DataTransfer* op, pwr_sClass_Pb_FDL_SAP* sap,
pwr_sClass_Pb_FDL_DataTransfer* op,
io_sFDLCardLocal* local) io_sFDLCardLocal* local)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
...@@ -106,16 +107,20 @@ possible return values: ...@@ -106,16 +107,20 @@ possible return values:
*/ */
sdb.comm_ref = 0; sdb.comm_ref = 0;
sdb.layer = FDLIF; sdb.layer = FDLIF;
switch (op->Type) { switch (op->Type)
case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SDA: { {
case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SDA:
{
sdb.service = FDLIF_SDA; sdb.service = FDLIF_SDA;
break; break;
} }
case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SDN: { case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SDN:
{
sdb.service = FDLIF_SDN; sdb.service = FDLIF_SDN;
break; break;
} }
case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SRD: { case pwr_ePbFDLDataTransferTypeEnum_FDLIF_SRD:
{
sdb.service = FDLIF_SRD; sdb.service = FDLIF_SRD;
break; break;
} }
...@@ -128,14 +133,16 @@ possible return values: ...@@ -128,14 +133,16 @@ possible return values:
sdb.invoke_id = local->invoke_id = local_agent->invoke_id; sdb.invoke_id = local->invoke_id = local_agent->invoke_id;
local_agent->invoke_id = (local_agent->invoke_id + 1) % 128; local_agent->invoke_id = (local_agent->invoke_id + 1) % 128;
result = profi_snd_req_res( // result = profi_snd_req_res(
(T_PROFI_DEVICE_HANDLE*)local_agent, &sdb, (void*)req, PB_FALSE); // (T_PROFI_DEVICE_HANDLE*)local_agent, &sdb, (void*)req, PB_FALSE);
result = profi_snd_req_res(&sdb, (void*)req, PB_FALSE);
return ((pwr_tBoolean)(result == E_OK)); return ((pwr_tBoolean)(result == E_OK));
} }
static short fdlif_reply_update_mult_req(io_sAgentLocal* local_agent, static short fdlif_reply_update_mult_req(io_sAgentLocal* local_agent,
pwr_sClass_Pb_FDL_SAP* sap, pwr_sClass_Pb_FDL_DataTransfer* op, pwr_sClass_Pb_FDL_SAP* sap,
pwr_sClass_Pb_FDL_DataTransfer* op,
io_sFDLCardLocal* local) io_sFDLCardLocal* local)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
...@@ -179,8 +186,9 @@ possible return values: ...@@ -179,8 +186,9 @@ possible return values:
sdb.invoke_id = local->invoke_id = local_agent->invoke_id; sdb.invoke_id = local->invoke_id = local_agent->invoke_id;
local_agent->invoke_id = (local_agent->invoke_id + 1) % 128; local_agent->invoke_id = (local_agent->invoke_id + 1) % 128;
result = profi_snd_req_res( // result = profi_snd_req_res((T_PROFI_DEVICE_HANDLE*)local_agent, &sdb,
(T_PROFI_DEVICE_HANDLE*)local_agent, &sdb, (void*)req, PB_FALSE); // (void*)req, PB_FALSE);
result = profi_snd_req_res(&sdb, (void*)req, PB_FALSE);
return ((pwr_tBoolean)(result == E_OK)); return ((pwr_tBoolean)(result == E_OK));
} }
...@@ -188,8 +196,8 @@ possible return values: ...@@ -188,8 +196,8 @@ possible return values:
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Init method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sFDLCardLocal* local; io_sFDLCardLocal* local;
pwr_sClass_Pb_FDL_DataTransfer* op = (pwr_sClass_Pb_FDL_DataTransfer*)cp->op; pwr_sClass_Pb_FDL_DataTransfer* op = (pwr_sClass_Pb_FDL_DataTransfer*)cp->op;
...@@ -206,8 +214,8 @@ static pwr_tStatus IoCardInit( ...@@ -206,8 +214,8 @@ static pwr_tStatus IoCardInit(
local->byte_ordering = ((pwr_sClass_Pb_FDL_SAP*)rp->op)->ByteOrdering; local->byte_ordering = ((pwr_sClass_Pb_FDL_SAP*)rp->op)->ByteOrdering;
io_bus_card_init(ctx, cp, &input_area_offset, &input_area_chansize, io_bus_card_init(ctx, cp, &input_area_offset, &input_area_chansize,
&output_area_offset, &output_area_chansize, local->byte_ordering, &output_area_offset, &output_area_chansize,
io_eAlignment_Packed); local->byte_ordering, io_eAlignment_Packed);
local->input_area_size = input_area_offset + input_area_chansize; local->input_area_size = input_area_offset + input_area_chansize;
local->output_area_size = output_area_offset + output_area_chansize; local->output_area_size = output_area_offset + output_area_chansize;
...@@ -227,8 +235,8 @@ static pwr_tStatus IoCardInit( ...@@ -227,8 +235,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Read method for the Pb FDL Data transfer module Read method for the Pb FDL Data transfer module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead( static pwr_tStatus IoCardRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sFDLCardLocal* local = (io_sFDLCardLocal*)cp->Local; io_sFDLCardLocal* local = (io_sFDLCardLocal*)cp->Local;
...@@ -241,8 +249,8 @@ static pwr_tStatus IoCardRead( ...@@ -241,8 +249,8 @@ static pwr_tStatus IoCardRead(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Write method for the Pb FDL Data transfer module Write method for the Pb FDL Data transfer module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardWrite( static pwr_tStatus IoCardWrite(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sAgentLocal* local_agent = (io_sAgentLocal*)ap->Local; io_sAgentLocal* local_agent = (io_sAgentLocal*)ap->Local;
pwr_sClass_Pb_FDL_DataTransfer* op = (pwr_sClass_Pb_FDL_DataTransfer*)cp->op; pwr_sClass_Pb_FDL_DataTransfer* op = (pwr_sClass_Pb_FDL_DataTransfer*)cp->op;
...@@ -251,16 +259,21 @@ static pwr_tStatus IoCardWrite( ...@@ -251,16 +259,21 @@ static pwr_tStatus IoCardWrite(
op->Status = sap->Status; op->Status = sap->Status;
if (op->Status == PB__NORMAL) { if (op->Status == PB__NORMAL)
{
io_bus_card_write(ctx, cp, local->output_area, local->byte_ordering, io_bus_card_write(ctx, cp, local->output_area, local->byte_ordering,
local->float_representation); local->float_representation);
if (op->SendReq) { if (op->SendReq)
{
pthread_mutex_lock(&local_agent->mutex); pthread_mutex_lock(&local_agent->mutex);
if (sap->Responder) { if (sap->Responder)
{
fdlif_reply_update_mult_req(local_agent, sap, op, local); fdlif_reply_update_mult_req(local_agent, sap, op, local);
} else { }
else
{
fdlif_sda_sdn_sdr_req(local_agent, sap, op, local); fdlif_sda_sdn_sdr_req(local_agent, sap, op, local);
} }
op->SendReq = 0; op->SendReq = 0;
...@@ -274,8 +287,8 @@ static pwr_tStatus IoCardWrite( ...@@ -274,8 +287,8 @@ static pwr_tStatus IoCardWrite(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Close method for the Pb module Close method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -290,7 +303,7 @@ static pwr_tStatus IoCardClose( ...@@ -290,7 +303,7 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_FDL_DataTransfer) pwr_dExport pwr_BindIoMethods(Pb_FDL_DataTransfer) = {
= { pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead), pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardClose), pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardClose),
pwr_NullMethod }; pwr_NullMethod};
...@@ -85,5 +85,6 @@ static pwr_tStatus IoRackClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp) ...@@ -85,5 +85,6 @@ static pwr_tStatus IoRackClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp)
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_FDL_SAP) = { pwr_BindIoMethod(IoRackInit), pwr_dExport pwr_BindIoMethods(Pb_FDL_SAP) = {pwr_BindIoMethod(IoRackInit),
pwr_BindIoMethod(IoRackClose), pwr_NullMethod }; pwr_BindIoMethod(IoRackClose),
pwr_NullMethod};
...@@ -86,7 +86,8 @@ board. ...@@ -86,7 +86,8 @@ board.
#include "rt_io_pb_locals.h" #include "rt_io_pb_locals.h"
typedef struct { typedef struct
{
/* Board number. */ /* Board number. */
unsigned short dev_number; unsigned short dev_number;
/* Number of occupied bytes in the input area of the dual port ram. */ /* Number of occupied bytes in the input area of the dual port ram. */
...@@ -114,7 +115,8 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap); ...@@ -114,7 +115,8 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap);
/* Start segment of the database, shall be 8 for /* Start segment of the database, shall be 8 for
CIF30-DPM, CIF104-DPM, COM-DPM, COM-PB, CIF104-PB and CIF 50-PB. CIF30-DPM, CIF104-DPM, COM-DPM, COM-PB, CIF104-PB and CIF 50-PB.
Shall be 0 for CIF 30-PB and CIF 60-PB. */ Shall be 0 for CIF 30-PB and CIF 60-PB. */
typedef struct { typedef struct
{
/* Used to terminate the table, se to 1 for every entry but the /* Used to terminate the table, se to 1 for every entry but the
last (dummy entry), which should be 0. */ last (dummy entry), which should be 0. */
unsigned char entry; unsigned char entry;
...@@ -129,15 +131,14 @@ typedef struct { ...@@ -129,15 +131,14 @@ typedef struct {
/* Table of known boards, consists of four fields according to the board type. /* Table of known boards, consists of four fields according to the board type.
The last entry must be a null termination (entry == 0). The last entry must be a null termination (entry == 0).
*/ */
boards known_boards[] boards known_boards[] = {
= { { 1, { 8, 50, 66, { 'C', 'I', 'F' } }, 8, "Hilscher CIF 50-PB" }, {1, {8, 50, 66, {'C', 'I', 'F'}}, 8, "Hilscher CIF 50-PB"}, {0, {}, 0, ""}};
{ 0, {}, 0, "" } };
#endif /* FLASH_WRITE_ENABLE */ #endif /* FLASH_WRITE_ENABLE */
/* Initializes Profibus DP interface on the CIF board referred to by local. /* Initializes Profibus DP interface on the CIF board referred to by local.
DRV_NO_ERROR is returned upon success. */ DRV_NO_ERROR is returned upon success. */
static short dpm_init_master( static short dpm_init_master(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, pwr_sClass_Pb_Hilscher* op, io_sAgent* ap) pwr_sClass_Pb_Hilscher* op, io_sAgent* ap)
{ {
short rv; short rv;
DPM_PLC_PARAMETER prm; DPM_PLC_PARAMETER prm;
...@@ -166,8 +167,9 @@ static short dpm_init_master( ...@@ -166,8 +167,9 @@ static short dpm_init_master(
/* Writes parameters to the board local->dev_number, task 2, size is /* Writes parameters to the board local->dev_number, task 2, size is
* hardcoded to 16 as specified in dpm_pie.pdf, page 9. */ * hardcoded to 16 as specified in dpm_pie.pdf, page 9. */
if ((rv = DevPutTaskParameter(local->dev_number, 2, 16, &prm)) if ((rv = DevPutTaskParameter(local->dev_number, 2, 16, &prm)) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevPutTaskParameter() failed with return code %d", " DevPutTaskParameter() failed with return code %d",
ap->Name, rv); ap->Name, rv);
...@@ -175,7 +177,8 @@ static short dpm_init_master( ...@@ -175,7 +177,8 @@ static short dpm_init_master(
} }
/* Resets board to put new master parameters into effect. */ /* Resets board to put new master parameters into effect. */
if ((rv = DevReset(local->dev_number, WARMSTART, 8000)) != DRV_NO_ERROR) { if ((rv = DevReset(local->dev_number, WARMSTART, 8000)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevReset() failed with return code %d", " DevReset() failed with return code %d",
ap->Name, rv); ap->Name, rv);
...@@ -191,12 +194,15 @@ static short dpm_init(io_sAgentLocalHilscher* local, io_sAgent* ap) ...@@ -191,12 +194,15 @@ static short dpm_init(io_sAgentLocalHilscher* local, io_sAgent* ap)
{ {
short rv; short rv;
if ((rv = DevOpenDriver()) != DRV_NO_ERROR) { if ((rv = DevOpenDriver()) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevOpenDriver() failed with return code %d", " DevOpenDriver() failed with return code %d",
ap->Name, rv); ap->Name, rv);
return rv; return rv;
} else if ((rv = DevInitBoard(local->dev_number)) != DRV_NO_ERROR) { }
else if ((rv = DevInitBoard(local->dev_number)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevInitBoard() failed with return code %d", " DevInitBoard() failed with return code %d",
ap->Name, rv); ap->Name, rv);
...@@ -213,13 +219,15 @@ static short dpm_exit(io_sAgentLocalHilscher* local, io_sAgent* ap) ...@@ -213,13 +219,15 @@ static short dpm_exit(io_sAgentLocalHilscher* local, io_sAgent* ap)
short rv; short rv;
short rv_ret = DRV_NO_ERROR; short rv_ret = DRV_NO_ERROR;
if ((rv = DevExitBoard(local->dev_number)) != DRV_NO_ERROR) { if ((rv = DevExitBoard(local->dev_number)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevExitBoard() failed with return code %d", " DevExitBoard() failed with return code %d",
ap->Name, rv); ap->Name, rv);
rv_ret = rv; rv_ret = rv;
} }
if ((rv = DevCloseDriver()) != DRV_NO_ERROR) { if ((rv = DevCloseDriver()) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" DevCloseDriver() failed with return code %d", " DevCloseDriver() failed with return code %d",
ap->Name, rv); ap->Name, rv);
...@@ -251,29 +259,35 @@ static short module_cnt_inputs(io_sCard* cp) ...@@ -251,29 +259,35 @@ static short module_cnt_inputs(io_sCard* cp)
for (cid = cp->Class; ODD(gdh_GetSuperClass(cid, &cid, cp->Objid));) for (cid = cp->Class; ODD(gdh_GetSuperClass(cid, &cid, cp->Objid));)
; ;
if (cid == pwr_cClass_Pb_Module) { if (cid == pwr_cClass_Pb_Module)
{
/* New style configuring (from v4.1.3) with Pb_Module objects or /* New style configuring (from v4.1.3) with Pb_Module objects or
subclass. Loop all channels in the module and set channel size and subclass. Loop all channels in the module and set channel size and
offset. */ offset. */
for (i = 0; i < cp->ChanListSize; ++i) { for (i = 0; i < cp->ChanListSize; ++i)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (is_diag(&chanp->ChanAref)) { if (is_diag(&chanp->ChanAref))
{
chanp->udata |= PB_UDATA_DIAG; chanp->udata |= PB_UDATA_DIAG;
if (chanp->ChanClass != pwr_cClass_ChanIi) if (chanp->ChanClass != pwr_cClass_ChanIi)
errh_Error("Diagnostic channel class, card %s", cp->Name); errh_Error("Diagnostic channel class, card %s", cp->Name);
continue; continue;
} }
if (chanp->ChanClass != pwr_cClass_ChanDi) { if (chanp->ChanClass != pwr_cClass_ChanDi)
{
input_counter += latent_input_count; input_counter += latent_input_count;
latent_input_count = 0; latent_input_count = 0;
} }
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanDi: case pwr_cClass_ChanDi:
chan_di = (pwr_sClass_ChanDi*)chanp->cop; chan_di = (pwr_sClass_ChanDi*)chanp->cop;
if (chan_di->Number == 0) { if (chan_di->Number == 0)
{
input_counter += latent_input_count; input_counter += latent_input_count;
latent_input_count = 0; latent_input_count = 0;
} }
...@@ -326,29 +340,35 @@ static short module_cnt_outputs(io_sCard* cp) ...@@ -326,29 +340,35 @@ static short module_cnt_outputs(io_sCard* cp)
for (cid = cp->Class; ODD(gdh_GetSuperClass(cid, &cid, cp->Objid));) for (cid = cp->Class; ODD(gdh_GetSuperClass(cid, &cid, cp->Objid));)
; ;
if (cid == pwr_cClass_Pb_Module) { if (cid == pwr_cClass_Pb_Module)
{
/* New style configuring (from v4.1.3) with Pb_Module objects or /* New style configuring (from v4.1.3) with Pb_Module objects or
subclass. Loop all channels in the module and set channel size and subclass. Loop all channels in the module and set channel size and
offset. */ offset. */
for (i = 0; i < cp->ChanListSize; i++) { for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (is_diag(&chanp->ChanAref)) { if (is_diag(&chanp->ChanAref))
{
chanp->udata |= PB_UDATA_DIAG; chanp->udata |= PB_UDATA_DIAG;
if (chanp->ChanClass != pwr_cClass_ChanIi) if (chanp->ChanClass != pwr_cClass_ChanIi)
errh_Error("Diagnostic channel class, card %s", cp->Name); errh_Error("Diagnostic channel class, card %s", cp->Name);
continue; continue;
} }
if (chanp->ChanClass != pwr_cClass_ChanDo) { if (chanp->ChanClass != pwr_cClass_ChanDo)
{
output_counter += latent_output_count; output_counter += latent_output_count;
latent_output_count = 0; latent_output_count = 0;
} }
switch (chanp->ChanClass) { switch (chanp->ChanClass)
{
case pwr_cClass_ChanDo: case pwr_cClass_ChanDo:
chan_do = (pwr_sClass_ChanDo*)chanp->cop; chan_do = (pwr_sClass_ChanDo*)chanp->cop;
if (chan_do->Number == 0) { if (chan_do->Number == 0)
{
output_counter += latent_output_count; output_counter += latent_output_count;
latent_output_count = 0; latent_output_count = 0;
} }
...@@ -385,7 +405,8 @@ The function will also set up the required fields in op so that Proview ...@@ -385,7 +405,8 @@ The function will also set up the required fields in op so that Proview
may perform IO operations using the IoAgentRead() and IoAgentWrite() functions may perform IO operations using the IoAgentRead() and IoAgentWrite() functions
in this module. */ in this module. */
static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
io_sRack* rp, DPM_SL_PRM_ADD_TAB* add_tab, int add_tab_len) io_sRack* rp, DPM_SL_PRM_ADD_TAB* add_tab,
int add_tab_len)
{ {
io_sCard* cardp; io_sCard* cardp;
short input_counter; short input_counter;
...@@ -400,10 +421,10 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -400,10 +421,10 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
slaves/modules have occupied so far. */ slaves/modules have occupied so far. */
unsigned short* input_size; unsigned short* input_size;
unsigned short* output_size; unsigned short* output_size;
input_size input_size =
= (unsigned short*)&((io_sAgentLocalHilscher*)ap->Local)->input_size; (unsigned short*)&((io_sAgentLocalHilscher*)ap->Local)->input_size;
output_size output_size =
= (unsigned short*)&((io_sAgentLocalHilscher*)ap->Local)->output_size; (unsigned short*)&((io_sAgentLocalHilscher*)ap->Local)->output_size;
/* This lets Proview find the IO-area for this module (in this case it is /* This lets Proview find the IO-area for this module (in this case it is
actually handled at the agent level, thus in this file). The offsets actually handled at the agent level, thus in this file). The offsets
...@@ -415,12 +436,14 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -415,12 +436,14 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
op->BytesOfOutput = 0; op->BytesOfOutput = 0;
/* Finds our rack (slave). */ /* Finds our rack (slave). */
for (sl = rp; sl != NULL for (sl = rp;
&& ((pwr_sClass_Pb_DP_Slave*)sl->op)->SlaveAddress != op->SlaveAddress; sl != NULL &&
((pwr_sClass_Pb_DP_Slave*)sl->op)->SlaveAddress != op->SlaveAddress;
sl = sl->next) sl = sl->next)
; ;
if (sl == NULL if (sl == NULL ||
|| ((pwr_sClass_Pb_DP_Slave*)sl->op)->SlaveAddress != op->SlaveAddress) { ((pwr_sClass_Pb_DP_Slave*)sl->op)->SlaveAddress != op->SlaveAddress)
{
errh_Error("Profibus DP Master %s - " errh_Error("Profibus DP Master %s - "
" Can't find rack for slave %d", " Can't find rack for slave %d",
ap->Name, op->SlaveAddress); ap->Name, op->SlaveAddress);
...@@ -429,7 +452,8 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -429,7 +452,8 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
/* Iterates through the cards (modules in Profibus terminology) of /* Iterates through the cards (modules in Profibus terminology) of
the current rack, counting the length of the input area as we go. */ the current rack, counting the length of the input area as we go. */
for (cardp = sl->cardlist; cardp; cardp = cardp->next) { for (cardp = sl->cardlist; cardp; cardp = cardp->next)
{
/* Gets the size of the input area for this module. */ /* Gets the size of the input area for this module. */
input_counter = module_cnt_inputs(cardp); input_counter = module_cnt_inputs(cardp);
...@@ -438,19 +462,21 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -438,19 +462,21 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
/* Only modules with and input or output area are required to /* Only modules with and input or output area are required to
have an entry in the add tab. */ have an entry in the add tab. */
if (input_counter > 0) { if (input_counter > 0)
{
assert(add_tab->bInput_Count + 4 < add_tab_len); assert(add_tab->bInput_Count + 4 < add_tab_len);
/* The MSB tells the Hilscher board whether to treat the address /* The MSB tells the Hilscher board whether to treat the address
as a byte (set) or word (unset) offset as a byte (set) or word (unset) offset
(see dpm_pie.pdf, page 45). */ (see dpm_pie.pdf, page 45). */
add_tab->ausEA_Offset[add_tab->bInput_Count++] add_tab->ausEA_Offset[add_tab->bInput_Count++] =
= *input_size | EA_OFFSET_BYTE; *input_size | EA_OFFSET_BYTE;
*input_size += input_counter; *input_size += input_counter;
} }
} }
/* Now process the output areas. */ /* Now process the output areas. */
for (cardp = sl->cardlist; cardp; cardp = cardp->next) { for (cardp = sl->cardlist; cardp; cardp = cardp->next)
{
/* Gets the size of the output area for this module. */ /* Gets the size of the output area for this module. */
output_counter = module_cnt_outputs(cardp); output_counter = module_cnt_outputs(cardp);
...@@ -459,14 +485,15 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -459,14 +485,15 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
/* Only modules with and input or output area are required to /* Only modules with and input or output area are required to
have an entry in the add tab. */ have an entry in the add tab. */
if (output_counter > 0) { if (output_counter > 0)
{
assert(add_tab->bInput_Count + add_tab->bOutput_Count + 4 < add_tab_len); assert(add_tab->bInput_Count + add_tab->bOutput_Count + 4 < add_tab_len);
/* The MSB tells the Hilscher board whether to treat the address /* The MSB tells the Hilscher board whether to treat the address
as a byte (set) or word (unset) offset as a byte (set) or word (unset) offset
(see dpm_pie.pdf, page 45). */ (see dpm_pie.pdf, page 45). */
/* The input offsets precedes the output offsets. */ /* The input offsets precedes the output offsets. */
add_tab->ausEA_Offset[add_tab->bInput_Count + add_tab->bOutput_Count++] add_tab->ausEA_Offset[add_tab->bInput_Count + add_tab->bOutput_Count++] =
= *output_size | EA_OFFSET_BYTE; *output_size | EA_OFFSET_BYTE;
*output_size += output_counter; *output_size += output_counter;
} }
} }
...@@ -474,9 +501,10 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, ...@@ -474,9 +501,10 @@ static void dpm_set_add_tab(pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
assert(add_tab->bInput_Count + add_tab->bOutput_Count <= MAX_EA_OFFSET_LEN); assert(add_tab->bInput_Count + add_tab->bOutput_Count <= MAX_EA_OFFSET_LEN);
/* Updates the length of the add_tab struct. */ /* Updates the length of the add_tab struct. */
add_tab->usAdd_Tab_Len = sizeof(add_tab->usAdd_Tab_Len) add_tab->usAdd_Tab_Len =
+ sizeof(add_tab->bInput_Count) + sizeof(add_tab->bOutput_Count) sizeof(add_tab->usAdd_Tab_Len) + sizeof(add_tab->bInput_Count) +
+ 2 * add_tab->bInput_Count + 2 * add_tab->bOutput_Count; sizeof(add_tab->bOutput_Count) + 2 * add_tab->bInput_Count +
2 * add_tab->bOutput_Count;
} }
/* Writes instructions for reflashing the board to the error log. */ /* Writes instructions for reflashing the board to the error log. */
...@@ -499,9 +527,11 @@ static void dpm_ddlm_answer_msg_print_error(RCS_MESSAGE* msg, io_sAgent* ap) ...@@ -499,9 +527,11 @@ static void dpm_ddlm_answer_msg_print_error(RCS_MESSAGE* msg, io_sAgent* ap)
if (msg == NULL) if (msg == NULL)
return; return;
switch (msg->a) { switch (msg->a)
{
case DDLM_Download: case DDLM_Download:
switch (msg->f) { switch (msg->f)
{
case 0: case 0:
return; return;
case CON_NO: case CON_NO:
...@@ -551,7 +581,8 @@ static void dpm_ddlm_answer_msg_print_error(RCS_MESSAGE* msg, io_sAgent* ap) ...@@ -551,7 +581,8 @@ static void dpm_ddlm_answer_msg_print_error(RCS_MESSAGE* msg, io_sAgent* ap)
break; break;
case DDLM_Slave_Diag: case DDLM_Slave_Diag:
switch (msg->f) { switch (msg->f)
{
case 0: case 0:
return; return;
case CON_NA: case CON_NA:
...@@ -582,7 +613,8 @@ or 127 to set master bus parameters. The bus parameters are read from ...@@ -582,7 +613,8 @@ or 127 to set master bus parameters. The bus parameters are read from
the buffer prmdata and shall be of length prmlen. DRV_NO_ERROR is returned the buffer prmdata and shall be of length prmlen. DRV_NO_ERROR is returned
if successful. */ if successful. */
static short dpm_ddlm_download(io_sAgentLocalHilscher* local, static short dpm_ddlm_download(io_sAgentLocalHilscher* local,
unsigned char address, unsigned int prmlen, void* prmdata, io_sAgent* ap) unsigned char address, unsigned int prmlen,
void* prmdata, io_sAgent* ap)
{ {
short rv; short rv;
int got_response = 0; int got_response = 0;
...@@ -613,8 +645,9 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local, ...@@ -613,8 +645,9 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local,
assert(prmlen <= 240); assert(prmlen <= 240);
memcpy(&(msg.d[4]), prmdata, prmlen); memcpy(&(msg.d[4]), prmdata, prmlen);
if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 5000)) if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 5000)) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - DDLM_Download - DevPutMessage()" errh_Error("Profibus DP Master %s - DDLM_Download - DevPutMessage()"
" returned %d", " returned %d",
ap->Name, rv); ap->Name, rv);
...@@ -622,23 +655,30 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local, ...@@ -622,23 +655,30 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local,
} }
/* Checks confirmation message. */ /* Checks confirmation message. */
while (!got_response) { while (!got_response)
if ((rv = DevGetMessage( {
local->dev_number, sizeof(rcv_msg), (MSG_STRUC*)&rcv_msg, 5000)) if ((rv = DevGetMessage(local->dev_number, sizeof(rcv_msg),
!= DRV_NO_ERROR) { (MSG_STRUC*)&rcv_msg, 5000)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - DDLM_Download - DevGetMessage()" errh_Error("Profibus DP Master %s - DDLM_Download - DevGetMessage()"
" returned %d", " returned %d",
ap->Name, rv); ap->Name, rv);
return rv; return rv;
} else if (rcv_msg.nr != local->cif_msgcnt || rcv_msg.rx != 16 }
|| rcv_msg.tx != 3 || rcv_msg.a != DDLM_Download) { else if (rcv_msg.nr != local->cif_msgcnt || rcv_msg.rx != 16 ||
rcv_msg.tx != 3 || rcv_msg.a != DDLM_Download)
{
/* Discards all messages prior to our response. */ /* Discards all messages prior to our response. */
memset(&rcv_msg, 0, sizeof(rcv_msg)); memset(&rcv_msg, 0, sizeof(rcv_msg));
continue; continue;
} else if (rcv_msg.f != 0) { }
else if (rcv_msg.f != 0)
{
dpm_ddlm_answer_msg_print_error(&rcv_msg, ap); dpm_ddlm_answer_msg_print_error(&rcv_msg, ap);
return rcv_msg.f; return rcv_msg.f;
} else { }
else
{
got_response = 1; got_response = 1;
} }
} }
...@@ -648,8 +688,8 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local, ...@@ -648,8 +688,8 @@ static short dpm_ddlm_download(io_sAgentLocalHilscher* local,
/* Configures the master bus parameters of the board referred to by /* Configures the master bus parameters of the board referred to by
local, the struct containing the parameters should be passed in op. */ local, the struct containing the parameters should be passed in op. */
static short dpm_download_master_prm( static short dpm_download_master_prm(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, pwr_sClass_Pb_Hilscher* op, io_sAgent* ap) pwr_sClass_Pb_Hilscher* op, io_sAgent* ap)
{ {
DPM_BUS_DP prm; DPM_BUS_DP prm;
...@@ -661,10 +701,13 @@ static short dpm_download_master_prm( ...@@ -661,10 +701,13 @@ static short dpm_download_master_prm(
prm.usBus_Para_Len = 32; prm.usBus_Para_Len = 32;
/* The master's address is hardcoded to 0. */ /* The master's address is hardcoded to 0. */
prm.bFDL_Add = 0; prm.bFDL_Add = 0;
prm.bBaudrate = ((op->BaudRate == 500) ? (DP_BAUD_500) prm.bBaudrate =
((op->BaudRate == 500)
? (DP_BAUD_500)
: (op->BaudRate == 1500) : (op->BaudRate == 1500)
? (DP_BAUD_1500) ? (DP_BAUD_1500)
: (op->BaudRate == 3000) ? (DP_BAUD_3000) : (op->BaudRate == 3000)
? (DP_BAUD_3000)
: (op->BaudRate == 6000) : (op->BaudRate == 6000)
? (DP_BAUD_6000) ? (DP_BAUD_6000)
: (op->BaudRate == 12000) ? (DP_BAUD_12000) : (op->BaudRate == 12000) ? (DP_BAUD_12000)
...@@ -696,7 +739,8 @@ is passed in local. op holds the slave to configure, the corresponding ...@@ -696,7 +739,8 @@ is passed in local. op holds the slave to configure, the corresponding
agent pointer and rack pointer must be passed in ap and rp respectively. agent pointer and rack pointer must be passed in ap and rp respectively.
DRV_NO_ERROR will be returned upon success. */ DRV_NO_ERROR will be returned upon success. */
static short dpm_download_slave_prm(io_sAgentLocalHilscher* local, static short dpm_download_slave_prm(io_sAgentLocalHilscher* local,
pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap, io_sRack* rp) pwr_sClass_Pb_DP_Slave* op, io_sAgent* ap,
io_sRack* rp)
{ {
unsigned char buf[DPM_MAX_LEN_DATA_UNIT]; unsigned char buf[DPM_MAX_LEN_DATA_UNIT];
unsigned int bufcnt = 0; unsigned int bufcnt = 0;
...@@ -790,8 +834,8 @@ static short dpm_download_slave_prm(io_sAgentLocalHilscher* local, ...@@ -790,8 +834,8 @@ static short dpm_download_slave_prm(io_sAgentLocalHilscher* local,
board referred to by local. The function will return DRV_NO_ERROR if board referred to by local. The function will return DRV_NO_ERROR if
the request was sent without error, however, it tells us nothing the request was sent without error, however, it tells us nothing
about whether any diagnostics data was sent back. */ about whether any diagnostics data was sent back. */
static short dpm_req_slave_diag( static short dpm_req_slave_diag(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, unsigned char address, io_sAgent* ap) unsigned char address, io_sAgent* ap)
{ {
short rv; short rv;
RCS_MESSAGETELEGRAM_10 msg; RCS_MESSAGETELEGRAM_10 msg;
...@@ -819,8 +863,9 @@ static short dpm_req_slave_diag( ...@@ -819,8 +863,9 @@ static short dpm_req_slave_diag(
msg.function = TASK_TFC_READ; msg.function = TASK_TFC_READ;
/* Requests diagnostic data from slave. */ /* Requests diagnostic data from slave. */
if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 0)) if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 0)) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Info("Profibus DP Master %s - DDLM_Slave_Diag - DevPutMessage()" errh_Info("Profibus DP Master %s - DDLM_Slave_Diag - DevPutMessage()"
" returned %d", " returned %d",
ap->Name, rv); ap->Name, rv);
...@@ -834,8 +879,8 @@ static short dpm_req_slave_diag( ...@@ -834,8 +879,8 @@ static short dpm_req_slave_diag(
to gather diagnostics data asynchronously. The desired agent's local to gather diagnostics data asynchronously. The desired agent's local
struct is passed via local and the associated rack list (Profibus slaves) is struct is passed via local and the associated rack list (Profibus slaves) is
passed in slave_list. */ passed in slave_list. */
static void dpm_update_slave_diag( static void dpm_update_slave_diag(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, io_sRack* slave_list, io_sAgent* ap) io_sRack* slave_list, io_sAgent* ap)
{ {
short rv; short rv;
RCS_MESSAGETELEGRAM_10 rcv_msg; RCS_MESSAGETELEGRAM_10 rcv_msg;
...@@ -846,30 +891,37 @@ static void dpm_update_slave_diag( ...@@ -846,30 +891,37 @@ static void dpm_update_slave_diag(
memset(&rcv_msg, 0, sizeof(rcv_msg)); memset(&rcv_msg, 0, sizeof(rcv_msg));
/* Gets pending diagnostic messages, discards all other messages. */ /* Gets pending diagnostic messages, discards all other messages. */
while ((rv = DevGetMessage( while ((rv = DevGetMessage(local->dev_number, sizeof(rcv_msg),
local->dev_number, sizeof(rcv_msg), (MSG_STRUC*)&rcv_msg, 0)) (MSG_STRUC*)&rcv_msg, 0)) == DRV_NO_ERROR)
== DRV_NO_ERROR) { {
if (rcv_msg.rx != 16 || rcv_msg.tx != 3 || rcv_msg.a != DDLM_Slave_Diag) { if (rcv_msg.rx != 16 || rcv_msg.tx != 3 || rcv_msg.a != DDLM_Slave_Diag)
{
/* Discards received message. */ /* Discards received message. */
memset(&rcv_msg, 0, sizeof(rcv_msg)); memset(&rcv_msg, 0, sizeof(rcv_msg));
continue; continue;
} else if (rcv_msg.f != 0) { }
else if (rcv_msg.f != 0)
{
dpm_ddlm_answer_msg_print_error((RCS_MESSAGE*)&rcv_msg, ap); dpm_ddlm_answer_msg_print_error((RCS_MESSAGE*)&rcv_msg, ap);
/* Discards received message. */ /* Discards received message. */
memset(&rcv_msg, 0, sizeof(rcv_msg)); memset(&rcv_msg, 0, sizeof(rcv_msg));
continue; continue;
} else { }
else
{
/*** Updates Proview's structs with the acquired diagnostics. ***/ /*** Updates Proview's structs with the acquired diagnostics. ***/
/* Finds our slave. */ /* Finds our slave. */
for (sl = slave_list; sl != NULL; sl = sl->next) { for (sl = slave_list; sl != NULL; sl = sl->next)
{
sp = (pwr_sClass_Pb_DP_Slave*)sl->op; sp = (pwr_sClass_Pb_DP_Slave*)sl->op;
if (sp->SlaveAddress == rcv_msg.device_adr) if (sp->SlaveAddress == rcv_msg.device_adr)
break; break;
} }
/* The slave from which we were to read diagnostic data could not /* The slave from which we were to read diagnostic data could not
be found -- abort. */ be found -- abort. */
if (sp->SlaveAddress != rcv_msg.device_adr) { if (sp->SlaveAddress != rcv_msg.device_adr)
{
errh_Error("Profibus DP Master %s - Received diagnostic message" errh_Error("Profibus DP Master %s - Received diagnostic message"
" from unknown slave %d", " from unknown slave %d",
ap->Name, rcv_msg.device_adr); ap->Name, rcv_msg.device_adr);
...@@ -888,22 +940,30 @@ static void dpm_update_slave_diag( ...@@ -888,22 +940,30 @@ static void dpm_update_slave_diag(
/* Updates the slave's status */ /* Updates the slave's status */
if (!(sp->StationStatus1 & ~pwr_mPbStationStatus1Mask_ExternalDiag) if (!(sp->StationStatus1 & ~pwr_mPbStationStatus1Mask_ExternalDiag) &&
&& !(sp->StationStatus2 !(sp->StationStatus2 &
& ~(pwr_mPbStationStatus2Mask_Default ~(pwr_mPbStationStatus2Mask_Default |
| pwr_mPbStationStatus2Mask_ResponseMonitoringOn))) { pwr_mPbStationStatus2Mask_ResponseMonitoringOn)))
{
sp->Status = PB__NORMAL; sp->Status = PB__NORMAL;
} else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent) { }
else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent)
{
sp->Status = PB__NOCONN; sp->Status = PB__NOCONN;
} else if ((sp->StationStatus1 }
& (pwr_mPbStationStatus1Mask_ConfigFault else if ((sp->StationStatus1 & (pwr_mPbStationStatus1Mask_ConfigFault |
| pwr_mPbStationStatus1Mask_ParamFault)) pwr_mPbStationStatus1Mask_ParamFault)) ||
|| (sp->StationStatus2 (sp->StationStatus2 &
& pwr_mPbStationStatus2Mask_NewParamsRequested)) { pwr_mPbStationStatus2Mask_NewParamsRequested))
{
sp->Status = PB__CONFIGERR; sp->Status = PB__CONFIGERR;
} else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_MasterLock) { }
else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_MasterLock)
{
sp->Status = PB__MASTERLOCK; sp->Status = PB__MASTERLOCK;
} else { /* if (sp->StationStatus1 }
else
{ /* if (sp->StationStatus1
& pwr_mPbStationStatus1Mask_NotReady) */ & pwr_mPbStationStatus1Mask_NotReady) */
sp->Status = PB__NOTREADY; sp->Status = PB__NOTREADY;
} }
...@@ -917,10 +977,14 @@ static void dpm_print_diag(io_sAgent* ap, DPM_DIAGNOSTICS* diag) ...@@ -917,10 +977,14 @@ static void dpm_print_diag(io_sAgent* ap, DPM_DIAGNOSTICS* diag)
{ {
char* s; char* s;
if (diag->tError.bErr_Event == 0) { if (diag->tError.bErr_Event == 0)
{
return; return;
} else if (diag->tError.bErr_Rem_Adr == 255) { }
switch (diag->tError.bErr_Event) { else if (diag->tError.bErr_Rem_Adr == 255)
{
switch (diag->tError.bErr_Event)
{
case TASK_F_NO_USR_TASK: case TASK_F_NO_USR_TASK:
s = "usr task not found"; s = "usr task not found";
break; break;
...@@ -993,8 +1057,11 @@ static void dpm_print_diag(io_sAgent* ap, DPM_DIAGNOSTICS* diag) ...@@ -993,8 +1057,11 @@ static void dpm_print_diag(io_sAgent* ap, DPM_DIAGNOSTICS* diag)
errh_Info("Profibus DP Master %s - %s", ap->Name, s); errh_Info("Profibus DP Master %s - %s", ap->Name, s);
return; return;
} else { }
switch (diag->tError.bErr_Event) { else
{
switch (diag->tError.bErr_Event)
{
case CON_NA: case CON_NA:
s = "no reaction of the remote station"; s = "no reaction of the remote station";
break; break;
...@@ -1035,8 +1102,9 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap, ...@@ -1035,8 +1102,9 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap,
assert(DRV_NO_ERROR == 0); assert(DRV_NO_ERROR == 0);
/* Gets device information from the board. */ /* Gets device information from the board. */
if ((rv = DevGetInfo(local->dev_number, GET_DEV_INFO, sizeof(info), &info)) if ((rv = DevGetInfo(local->dev_number, GET_DEV_INFO, sizeof(info), &info)) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s - Error %d while checking board type.", errh_Error("Profibus DP Master %s - Error %d while checking board type.",
ap->Name, rv); ap->Name, rv);
return rv; return rv;
...@@ -1055,7 +1123,8 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap, ...@@ -1055,7 +1123,8 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap,
if (memcmp(&known_boards[i].info, &info, sizeof(info)) == 0) if (memcmp(&known_boards[i].info, &info, sizeof(info)) == 0)
break; break;
if (known_boards[i].entry == 0) { if (known_boards[i].entry == 0)
{
/* Board was not found in table. */ /* Board was not found in table. */
errh_Error("Profibus DP Master %s - Unknown board.", ap->Name); errh_Error("Profibus DP Master %s - Unknown board.", ap->Name);
errh_Error("To add support for this board, look up its database start"); errh_Error("To add support for this board, look up its database start");
...@@ -1067,8 +1136,9 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap, ...@@ -1067,8 +1136,9 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap,
errh_Error("in the above mentioned documentation."); errh_Error("in the above mentioned documentation.");
errh_Error("{ 1, { %d, %d, %d, { '%c', '%c', '%c'} }, " errh_Error("{ 1, { %d, %d, %d, { '%c', '%c', '%c'} }, "
"<db start segment>, \"<board name>\" },", "<db start segment>, \"<board name>\" },",
info.bDpmSize, info.bDevType, info.bDevModel, info.abDevIdentifier[0], info.bDpmSize, info.bDevType, info.bDevModel,
info.abDevIdentifier[1], info.abDevIdentifier[2]); info.abDevIdentifier[0], info.abDevIdentifier[1],
info.abDevIdentifier[2]);
return BOARD_INIT_ERROR; return BOARD_INIT_ERROR;
} }
...@@ -1084,8 +1154,8 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap, ...@@ -1084,8 +1154,8 @@ static short dpm_check_board_type(io_sAgentLocalHilscher* local, io_sAgent* ap,
/* Deletes the "PROFIBUS" protocol settings database from the card referred /* Deletes the "PROFIBUS" protocol settings database from the card referred
to by local, this procedure is described on page 32 -- 33 in dpm_pie.pdf. */ to by local, this procedure is described on page 32 -- 33 in dpm_pie.pdf. */
static short dpm_delete_flash_prmdb( static short dpm_delete_flash_prmdb(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, io_sAgent* ap) io_sAgent* ap)
{ {
unsigned char db_startsegment; unsigned char db_startsegment;
int s = 3; int s = 3;
...@@ -1114,11 +1184,12 @@ static short dpm_delete_flash_prmdb( ...@@ -1114,11 +1184,12 @@ static short dpm_delete_flash_prmdb(
msg.d[0] = 4; /* mode = delete data base */ msg.d[0] = 4; /* mode = delete data base */
msg.d[1] = db_startsegment; msg.d[1] = db_startsegment;
errh_Info( errh_Info("Profibus DP Master %s - Sending delete database request...",
"Profibus DP Master %s - Sending delete database request...", ap->Name); ap->Name);
/* Sends delete database request. */ /* Sends delete database request. */
if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 5000)) if ((rv = DevPutMessage(local->dev_number, (MSG_STRUC*)&msg, 5000)) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s -" errh_Error("Profibus DP Master %s -"
" DevPutMessage failed with return code %d", " DevPutMessage failed with return code %d",
ap->Name, rv); ap->Name, rv);
...@@ -1136,20 +1207,25 @@ static short dpm_delete_flash_prmdb( ...@@ -1136,20 +1207,25 @@ static short dpm_delete_flash_prmdb(
memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg));
/* Gets response message. */ /* Gets response message. */
while (!got_response) { while (!got_response)
if ((rv = DevGetMessage( {
local->dev_number, sizeof(msg), (MSG_STRUC*)&msg, 10000)) if ((rv = DevGetMessage(local->dev_number, sizeof(msg), (MSG_STRUC*)&msg,
!= DRV_NO_ERROR) { 10000)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s -" errh_Error("Profibus DP Master %s -"
" DevGetMessage failed with return code %d\n", " DevGetMessage failed with return code %d\n",
ap->Name, rv); ap->Name, rv);
return rv; return rv;
} else if (msg.nr != local->cif_msgcnt || msg.rx != 16 || msg.tx != 0 }
|| msg.a != 6) { else if (msg.nr != local->cif_msgcnt || msg.rx != 16 || msg.tx != 0 ||
msg.a != 6)
{
/* Discards all messages prior to our response. */ /* Discards all messages prior to our response. */
memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg));
continue; continue;
} else { }
else
{
if (msg.f != 0) if (msg.f != 0)
errh_Error("Profibus DP Master %s -" errh_Error("Profibus DP Master %s -"
" Delete db confirmation message f-flag set to %d", " Delete db confirmation message f-flag set to %d",
...@@ -1173,8 +1249,9 @@ static short dpm_delete_flash_prmdb( ...@@ -1173,8 +1249,9 @@ static short dpm_delete_flash_prmdb(
/* Wrapper for dpm_init_master(), takes care of checking for (and optionally /* Wrapper for dpm_init_master(), takes care of checking for (and optionally
removing) the sycon database if present. */ removing) the sycon database if present. */
static short dpm_init_master_check_sycon_db( static short dpm_init_master_check_sycon_db(io_sAgentLocalHilscher* local,
io_sAgentLocalHilscher* local, pwr_sClass_Pb_Hilscher* op, io_sAgent* ap) pwr_sClass_Pb_Hilscher* op,
io_sAgent* ap)
{ {
short rv; short rv;
DRIVERINFO di; DRIVERINFO di;
...@@ -1182,26 +1259,32 @@ static short dpm_init_master_check_sycon_db( ...@@ -1182,26 +1259,32 @@ static short dpm_init_master_check_sycon_db(
assert(DRV_NO_ERROR == 0); assert(DRV_NO_ERROR == 0);
/* Initializes DP Master. */ /* Initializes DP Master. */
if ((rv = dpm_init_master(local, op, ap)) != DRV_NO_ERROR) { if ((rv = dpm_init_master(local, op, ap)) != DRV_NO_ERROR)
{
return rv; return rv;
} else if ((rv = DevGetInfo( }
local->dev_number, GET_DRIVER_INFO, sizeof(di), &di)) else if ((rv = DevGetInfo(local->dev_number, GET_DRIVER_INFO, sizeof(di),
!= DRV_NO_ERROR) { &di)) != DRV_NO_ERROR)
{
errh_Error("Profibus DP Master %s -" errh_Error("Profibus DP Master %s -"
" DevGetInfo failed with return code %d", " DevGetInfo failed with return code %d",
ap->Name, rv); ap->Name, rv);
return rv; return rv;
} else if ((di.bHostFlags & (READY_FLAG | RUN_FLAG)) }
== (READY_FLAG | RUN_FLAG)) { else if ((di.bHostFlags & (READY_FLAG | RUN_FLAG)) == (READY_FLAG | RUN_FLAG))
{
/* RUN and RDY bits set */ /* RUN and RDY bits set */
errh_Info( errh_Info("Profibus DP Master %s - Hostflags: 0x%X", ap->Name,
"Profibus DP Master %s - Hostflags: 0x%X", ap->Name, di.bHostFlags); di.bHostFlags);
errh_Info("Device is configured by SyCon."); errh_Info("Device is configured by SyCon.");
#ifdef FLASH_WRITE_ENABLE #ifdef FLASH_WRITE_ENABLE
errh_Info("Deleting SyCon database from board's flash."); errh_Info("Deleting SyCon database from board's flash.");
if ((rv = dpm_delete_flash_prmdb(local, ap)) != DRV_NO_ERROR) { if ((rv = dpm_delete_flash_prmdb(local, ap)) != DRV_NO_ERROR)
{
return rv; return rv;
} else { }
else
{
/* Reinitializes DP Master. */ /* Reinitializes DP Master. */
rv = dpm_init_master(local, op, ap); rv = dpm_init_master(local, op, ap);
} }
...@@ -1231,13 +1314,14 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1231,13 +1314,14 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
pwr_sClass_Pb_DP_Slave* sop; pwr_sClass_Pb_DP_Slave* sop;
char name[196]; char name[196];
struct timespec rqtp = { 0, 20000000 }; /* 20 ms */ struct timespec rqtp = {0, 20000000}; /* 20 ms */
int retry; int retry;
/* Allocates area for local data structure */ /* Allocates area for local data structure */
ap->Local = calloc(1, sizeof(io_sAgentLocalHilscher)); ap->Local = calloc(1, sizeof(io_sAgentLocalHilscher));
if (!ap->Local) { if (!ap->Local)
{
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, "calloc"); errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, "calloc");
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} }
...@@ -1249,7 +1333,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1249,7 +1333,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
/* Initializes interface. */ /* Initializes interface. */
if (ctx->Node->Restarts > 0) { if (ctx->Node->Restarts > 0)
{
nanosleep(&rqtp, NULL); nanosleep(&rqtp, NULL);
} }
...@@ -1263,42 +1348,49 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1263,42 +1348,49 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
local->watchdog = 0; local->watchdog = 0;
/* Initializes Profibus driver API. */ /* Initializes Profibus driver API. */
if (dpm_init(local, ap) != DRV_NO_ERROR) { if (dpm_init(local, ap) != DRV_NO_ERROR)
{
/* Cannot open driver */ /* Cannot open driver */
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error( errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"ERROR config Profibus DP Master %s - %s", ap->Name, "open device"); "open device");
ctx->Node->EmergBreakTrue = 1; ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE; return IO__ERRDEVICE;
} }
/* If this is not the Profibus I/O process, return */ /* If this is not the Profibus I/O process, return */
if ((op->Process & io_mProcess_Profibus) if ((op->Process & io_mProcess_Profibus) &&
&& (ctx->Process != io_mProcess_Profibus)) { (ctx->Process != io_mProcess_Profibus))
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
errh_Info("Init template I/O agent for Profibus DP Master %s, %d", ap->Name, errh_Info("Init template I/O agent for Profibus DP Master %s, %d", ap->Name,
ctx->Process); ctx->Process);
return IO__SUCCESS; return IO__SUCCESS;
} }
if (ctx->Node->Restarts > 0) { if (ctx->Node->Restarts > 0)
errh_Info( {
"Warm restart - Skipping config of Profibus DP Master %s", ap->Name); errh_Info("Warm restart - Skipping config of Profibus DP Master %s",
ap->Name);
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
return IO__SUCCESS; return IO__SUCCESS;
} }
errh_Info("Config of Profibus DP Master %s", ap->Name); errh_Info("Config of Profibus DP Master %s", ap->Name);
if (op->DisableBus != 1) { if (op->DisableBus != 1)
{
ok = FALSE; ok = FALSE;
if (ctx->Node->Restarts == 0) { if (ctx->Node->Restarts == 0)
{
retry = 0; retry = 0;
while (!ok) { while (!ok)
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
/* Sets DP master parameters and checks for sycon database. */ /* Sets DP master parameters and checks for sycon database. */
if (dpm_init_master_check_sycon_db(local, op, ap) != DRV_NO_ERROR) { if (dpm_init_master_check_sycon_db(local, op, ap) != DRV_NO_ERROR)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"dp init master"); "dp init master");
...@@ -1309,18 +1401,20 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1309,18 +1401,20 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
and initializes them. */ and initializes them. */
op->NumberSlaves = 0; op->NumberSlaves = 0;
status = gdh_GetChild(ap->Objid, &slave_objid); status = gdh_GetChild(ap->Objid, &slave_objid);
while (ODD(status)) { while (ODD(status))
{
status = gdh_GetObjectClass(slave_objid, &slave_class); status = gdh_GetObjectClass(slave_objid, &slave_class);
status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop); status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop);
status = gdh_ObjidToName( status = gdh_ObjidToName(slave_objid, (char*)&name, sizeof(name),
slave_objid, (char*)&name, sizeof(name), cdh_mNName); cdh_mNName);
errh_Info("Download Profibus DP Slave config - %s", name); errh_Info("Download Profibus DP Slave config - %s", name);
/* Calculates IO offsets and configures the slave. */ /* Calculates IO offsets and configures the slave. */
if (dpm_download_slave_prm(local, sop, ap, ap->racklist) if (dpm_download_slave_prm(local, sop, ap, ap->racklist) !=
!= DRV_NO_ERROR) { DRV_NO_ERROR)
{
errh_Error("ERROR Init Profibus DP slave %s", name); errh_Error("ERROR Init Profibus DP slave %s", name);
} }
errh_Info("Profibus DP slave %d: in offs %d, input size %d," errh_Info("Profibus DP slave %d: in offs %d, input size %d,"
...@@ -1333,7 +1427,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1333,7 +1427,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
/* Downloads the DP bus parameters -- this initiates the /* Downloads the DP bus parameters -- this initiates the
cyclic data exchange. */ cyclic data exchange. */
if (dpm_download_master_prm(local, op, ap) != DRV_NO_ERROR) { if (dpm_download_master_prm(local, op, ap) != DRV_NO_ERROR)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"dp download bus"); "dp download bus");
...@@ -1344,7 +1439,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1344,7 +1439,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
} /* End - While !ok */ } /* End - While !ok */
} /* End - Initialization only if not restart */ } /* End - Initialization only if not restart */
} else }
else
op->Status = PB__DISABLED; op->Status = PB__DISABLED;
return IO__SUCCESS; return IO__SUCCESS;
...@@ -1376,12 +1472,14 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1376,12 +1472,14 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
however, keeping this code here enables us to confine all the Profibus however, keeping this code here enables us to confine all the Profibus
board specific code at the agent level. */ board specific code at the agent level. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
mp = (pwr_sClass_Pb_Hilscher*)ap->op; mp = (pwr_sClass_Pb_Hilscher*)ap->op;
if (sp->Status == PB__NORMAL && mp->Status == PB__NORMAL if (sp->Status == PB__NORMAL && mp->Status == PB__NORMAL &&
&& sp->DisableSlave != 1 && mp->DisableBus != 1) { sp->DisableSlave != 1 && mp->DisableBus != 1)
{
/* Triggers the board's watchdog. */ /* Triggers the board's watchdog. */
DevTriggerWatchDog(local->dev_number, WATCHDOG_START, &local->watchdog); DevTriggerWatchDog(local->dev_number, WATCHDOG_START, &local->watchdog);
/* Reads process image from the slave. */ /* Reads process image from the slave. */
...@@ -1399,8 +1497,8 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1399,8 +1497,8 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
Make a poll to see if there are diagnostics, the answer also tells us Make a poll to see if there are diagnostics, the answer also tells us
if there are any hardware faults. */ if there are any hardware faults. */
if ((op->Process & io_mProcess_Profibus) if ((op->Process & io_mProcess_Profibus) &&
&& (ctx->Process != io_mProcess_Profibus)) (ctx->Process != io_mProcess_Profibus))
return IO__SUCCESS; return IO__SUCCESS;
if (op->DisableBus == 1) if (op->DisableBus == 1)
...@@ -1409,27 +1507,32 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1409,27 +1507,32 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
/* Reads the protocol states and checks for errors. */ /* Reads the protocol states and checks for errors. */
DevGetTaskState(local->dev_number, 2, 64, &diag); DevGetTaskState(local->dev_number, 2, 64, &diag);
/* Checks if master is in state OPERATE. */ /* Checks if master is in state OPERATE. */
switch (diag.bDPM_state) { switch (diag.bDPM_state)
{
case OPERATE: case OPERATE:
if (op->Status != PB__NORMAL) { if (op->Status != PB__NORMAL)
{
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
errh_Info("Profibus DP Master %s - Mode changed to OPERATE", ap->Name); errh_Info("Profibus DP Master %s - Mode changed to OPERATE", ap->Name);
} }
break; break;
case CLEAR: case CLEAR:
if (op->Status != PB__CLEARED) { if (op->Status != PB__CLEARED)
{
op->Status = PB__CLEARED; op->Status = PB__CLEARED;
errh_Info("Profibus DP Master %s - Mode changed to CLEAR", ap->Name); errh_Info("Profibus DP Master %s - Mode changed to CLEAR", ap->Name);
} }
break; break;
case STOP: case STOP:
if (op->Status != PB__STOPPED) { if (op->Status != PB__STOPPED)
{
op->Status = PB__STOPPED; op->Status = PB__STOPPED;
errh_Info("Profibus DP Master %s - Mode changed to STOP", ap->Name); errh_Info("Profibus DP Master %s - Mode changed to STOP", ap->Name);
} }
break; break;
case OFFLINE: case OFFLINE:
if (op->Status != PB__NOTINIT) { if (op->Status != PB__NOTINIT)
{
errh_Info("Profibus DP Master %s - Mode changed to OFFLINE", ap->Name); errh_Info("Profibus DP Master %s - Mode changed to OFFLINE", ap->Name);
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
} }
...@@ -1443,10 +1546,12 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1443,10 +1546,12 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
/* Checks if there are any new diagnostics data that we should read from /* Checks if there are any new diagnostics data that we should read from
any of our slaves. */ any of our slaves. */
for (i = 0; i <= 127; ++i) { for (i = 0; i <= 127; ++i)
{
/* The abSl_diag data structure is described on page 22 in /* The abSl_diag data structure is described on page 22 in
dpm_pie.pdf. */ dpm_pie.pdf. */
if (diag.abSl_diag[i >> 3] & (1 << (i & 7))) { if (diag.abSl_diag[i >> 3] & (1 << (i & 7)))
{
/* Request diagnostics from slaves with unread diagnostic data. */ /* Request diagnostics from slaves with unread diagnostic data. */
dpm_req_slave_diag(local, i, ap); dpm_req_slave_diag(local, i, ap);
} }
...@@ -1457,12 +1562,12 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1457,12 +1562,12 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
before its watchdog times out the diagnostics would not be updated. The before its watchdog times out the diagnostics would not be updated. The
following code covers that case, it is a bit ugly, but works. */ following code covers that case, it is a bit ugly, but works. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
/* The abSl_state has the same layout as the abSl_diag bitmap. */ /* The abSl_state has the same layout as the abSl_diag bitmap. */
if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent &&
&& diag.abSl_state[sp->SlaveAddress >> 3] diag.abSl_state[sp->SlaveAddress >> 3] & (1 << (sp->SlaveAddress & 7)))
& (1 << (sp->SlaveAddress & 7)))
dpm_req_slave_diag(local, sp->SlaveAddress, ap); dpm_req_slave_diag(local, sp->SlaveAddress, ap);
} }
/* Collects requested slave diagnostics. */ /* Collects requested slave diagnostics. */
...@@ -1489,20 +1594,23 @@ static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap) ...@@ -1489,20 +1594,23 @@ static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap)
however, keeping this code here enables us to confine all the Profibus however, keeping this code here enables us to confine all the Profibus
board specific code at the agent level. */ board specific code at the agent level. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
mp = (pwr_sClass_Pb_Hilscher*)ap->op; mp = (pwr_sClass_Pb_Hilscher*)ap->op;
if ((sp->Status == PB__NORMAL || sp->Status == PB__NOCONN) if ((sp->Status == PB__NORMAL || sp->Status == PB__NOCONN) &&
&& mp->Status == PB__NORMAL && (sp->DisableSlave != 1) mp->Status == PB__NORMAL && (sp->DisableSlave != 1) &&
&& (mp->DisableBus != 1)) { (mp->DisableBus != 1))
if (sp->BytesOfOutput > 0) { {
if (sp->BytesOfOutput > 0)
{
/* Trigger the board's watchdog. */ /* Trigger the board's watchdog. */
DevTriggerWatchDog(local->dev_number, WATCHDOG_START, &local->watchdog); DevTriggerWatchDog(local->dev_number, WATCHDOG_START, &local->watchdog);
/* Writes process image to the slave. */ /* Writes process image to the slave. */
if (DevExchangeIO(local->dev_number, sp->OffsetOutputs, if (DevExchangeIO(local->dev_number, sp->OffsetOutputs,
sp->BytesOfOutput, sp->Outputs, 0, 0, NULL, 100) sp->BytesOfOutput, sp->Outputs, 0, 0, NULL,
!= DRV_NO_ERROR) 100) != DRV_NO_ERROR)
sp->ErrorCount++; sp->ErrorCount++;
} }
} }
...@@ -1530,6 +1638,7 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap) ...@@ -1530,6 +1638,7 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap)
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Hilscher) = { pwr_BindIoMethod(IoAgentInit), pwr_dExport pwr_BindIoMethods(Pb_Hilscher) = {
pwr_BindIoMethod(IoAgentRead), pwr_BindIoMethod(IoAgentWrite), pwr_BindIoMethod(IoAgentInit), pwr_BindIoMethod(IoAgentRead),
pwr_BindIoMethod(IoAgentClose), pwr_NullMethod }; pwr_BindIoMethod(IoAgentWrite), pwr_BindIoMethod(IoAgentClose),
pwr_NullMethod};
...@@ -51,8 +51,8 @@ ...@@ -51,8 +51,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Ii Init method for the Pb module Ii
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ii* op; pwr_sClass_Pb_Ii* op;
...@@ -60,7 +60,8 @@ static pwr_tStatus IoCardInit( ...@@ -60,7 +60,8 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Ii*)cp->op; op = (pwr_sClass_Pb_Ii*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
if (rp->Class != pwr_cClass_Pb_DP_Slave) { if (rp->Class != pwr_cClass_Pb_DP_Slave)
{
errh_Info("Illegal object type %s", cp->Name); errh_Info("Illegal object type %s", cp->Name);
return IO__SUCCESS; return IO__SUCCESS;
} }
...@@ -74,8 +75,8 @@ static pwr_tStatus IoCardInit( ...@@ -74,8 +75,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Read method for the Pb Ii card Read method for the Pb Ii card
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead( static pwr_tStatus IoCardRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Ii* op; pwr_sClass_Pb_Ii* op;
...@@ -95,8 +96,10 @@ static pwr_tStatus IoCardRead( ...@@ -95,8 +96,10 @@ static pwr_tStatus IoCardRead(
op = (pwr_sClass_Pb_Ii*)cp->op; op = (pwr_sClass_Pb_Ii*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
for (i = 0; i < cp->ChanListSize; i++) { {
for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop || !chanp->sop) if (!chanp->cop || !chanp->sop)
continue; continue;
...@@ -104,54 +107,76 @@ static pwr_tStatus IoCardRead( ...@@ -104,54 +107,76 @@ static pwr_tStatus IoCardRead(
cop = (pwr_sClass_ChanIi*)chanp->cop; cop = (pwr_sClass_ChanIi*)chanp->cop;
sop = (pwr_sClass_Ii*)chanp->sop; sop = (pwr_sClass_Ii*)chanp->sop;
if (cop->ConversionOn) { if (cop->ConversionOn)
if (op->BytesPerChannel == 4) { {
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { if (op->BytesPerChannel == 4)
{
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
memcpy(&udata32, local->input_area + op->OffsetInputs + 4 * i, 4); memcpy(&udata32, local->input_area + op->OffsetInputs + 4 * i, 4);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata32 = swap32(udata32); udata32 = swap32(udata32);
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata32; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata32;
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
memcpy(&data32, local->input_area + op->OffsetInputs + 4 * i, 4); memcpy(&data32, local->input_area + op->OffsetInputs + 4 * i, 4);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data32 = swap32(data32); data32 = swap32(data32);
*(pwr_tInt32*)chanp->vbp = data32; *(pwr_tInt32*)chanp->vbp = data32;
} }
} else if (op->BytesPerChannel == 3) { }
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { else if (op->BytesPerChannel == 3)
{
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
udata32 = 0; udata32 = 0;
memcpy(&udata32, local->input_area + op->OffsetInputs + 3 * i, 3); memcpy(&udata32, local->input_area + op->OffsetInputs + 3 * i, 3);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) { if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
{
udata32 = swap32(udata32); udata32 = swap32(udata32);
udata32 = udata32 >> 8; udata32 = udata32 >> 8;
} }
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata32; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata32;
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
data32 = 0; data32 = 0;
memcpy(&data32, local->input_area + op->OffsetInputs + 3 * i, 3); memcpy(&data32, local->input_area + op->OffsetInputs + 3 * i, 3);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) { if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
{
data32 = swap32(data32); data32 = swap32(data32);
data32 = data32 >> 8; data32 = data32 >> 8;
} }
*(pwr_tInt32*)chanp->vbp = data32; *(pwr_tInt32*)chanp->vbp = data32;
} }
} else if (op->BytesPerChannel == 2) { }
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { else if (op->BytesPerChannel == 2)
{
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
memcpy(&udata16, local->input_area + op->OffsetInputs + 2 * i, 2); memcpy(&udata16, local->input_area + op->OffsetInputs + 2 * i, 2);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
udata16 = swap16(udata16); udata16 = swap16(udata16);
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata16; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata16;
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
memcpy(&data16, local->input_area + op->OffsetInputs + 2 * i, 2); memcpy(&data16, local->input_area + op->OffsetInputs + 2 * i, 2);
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data16 = swap16(data16); data16 = swap16(data16);
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)data16; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)data16;
} }
} else if (op->BytesPerChannel == 1) { }
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT) { else if (op->BytesPerChannel == 1)
{
if (op->NumberRepresentation == PB_NUMREP_UNSIGNEDINT)
{
memcpy(&udata8, local->input_area + op->OffsetInputs + i, 1); memcpy(&udata8, local->input_area + op->OffsetInputs + i, 1);
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata8; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)udata8;
} else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT) { }
else if (op->NumberRepresentation == PB_NUMREP_SIGNEDINT)
{
memcpy(&data8, local->input_area + op->OffsetInputs + i, 1); memcpy(&data8, local->input_area + op->OffsetInputs + i, 1);
*(pwr_tInt32*)chanp->vbp = (pwr_tInt32)data8; *(pwr_tInt32*)chanp->vbp = (pwr_tInt32)data8;
} }
...@@ -166,8 +191,8 @@ static pwr_tStatus IoCardRead( ...@@ -166,8 +191,8 @@ static pwr_tStatus IoCardRead(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Close method for the Pb Ii card Close method for the Pb Ii card
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -181,5 +206,6 @@ static pwr_tStatus IoCardClose( ...@@ -181,5 +206,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Ii) = { pwr_BindIoMethod(IoCardInit), pwr_dExport pwr_BindIoMethods(Pb_Ii) = {
pwr_BindIoMethod(IoCardRead), pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Io Init method for the Pb module Io
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Io* op; pwr_sClass_Pb_Io* op;
...@@ -58,12 +58,14 @@ static pwr_tStatus IoCardInit( ...@@ -58,12 +58,14 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Io*)cp->op; op = (pwr_sClass_Pb_Io*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
if (rp->Class != pwr_cClass_Pb_DP_Slave) { if (rp->Class != pwr_cClass_Pb_DP_Slave)
{
errh_Info("Illegal object type %s", cp->Name); errh_Info("Illegal object type %s", cp->Name);
return IO__SUCCESS; return IO__SUCCESS;
} }
if (op->Status < PB_MODULE_STATE_OPERATE) { if (op->Status < PB_MODULE_STATE_OPERATE)
{
errh_Info("Error initializing Pb module Io %s", cp->Name); errh_Info("Error initializing Pb module Io %s", cp->Name);
} }
...@@ -73,8 +75,8 @@ static pwr_tStatus IoCardInit( ...@@ -73,8 +75,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Write method for the Pb module Io Write method for the Pb module Io
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardWrite( static pwr_tStatus IoCardWrite(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Io* op; pwr_sClass_Pb_Io* op;
...@@ -91,8 +93,10 @@ static pwr_tStatus IoCardWrite( ...@@ -91,8 +93,10 @@ static pwr_tStatus IoCardWrite(
op = (pwr_sClass_Pb_Io*)cp->op; op = (pwr_sClass_Pb_Io*)cp->op;
slave = (pwr_sClass_Pb_DP_Slave*)rp->op; slave = (pwr_sClass_Pb_DP_Slave*)rp->op;
if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1) { if (op->Status >= PB_MODULE_STATE_OPERATE && slave->DisableSlave != 1)
for (i = 0; i < cp->ChanListSize; i++) { {
for (i = 0; i < cp->ChanListSize; i++)
{
chanp = &cp->chanlist[i]; chanp = &cp->chanlist[i];
if (!chanp->cop || !chanp->sop) if (!chanp->cop || !chanp->sop)
continue; continue;
...@@ -105,20 +109,27 @@ static pwr_tStatus IoCardWrite( ...@@ -105,20 +109,27 @@ static pwr_tStatus IoCardWrite(
data32 = *(pwr_tInt32*)chanp->vbp; data32 = *(pwr_tInt32*)chanp->vbp;
if (op->BytesPerChannel == 4) { if (op->BytesPerChannel == 4)
{
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data32 = swap32(data32); data32 = swap32(data32);
memcpy(local->output_area + op->OffsetOutputs + 4 * i, &data32, 4); memcpy(local->output_area + op->OffsetOutputs + 4 * i, &data32, 4);
} else if (op->BytesPerChannel == 3) { }
else if (op->BytesPerChannel == 3)
{
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data32 = swap32(data32); data32 = swap32(data32);
memcpy(local->output_area + op->OffsetOutputs + 3 * i, &data32, 3); memcpy(local->output_area + op->OffsetOutputs + 3 * i, &data32, 3);
} else if (op->BytesPerChannel == 2) { }
else if (op->BytesPerChannel == 2)
{
data16 = (pwr_tInt16)data32; data16 = (pwr_tInt16)data32;
if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian) if (slave->ByteOrdering == pwr_eByteOrderingEnum_BigEndian)
data16 = swap16(data16); data16 = swap16(data16);
memcpy(local->output_area + op->OffsetOutputs + 2 * i, &data16, 2); memcpy(local->output_area + op->OffsetOutputs + 2 * i, &data16, 2);
} else if (op->BytesPerChannel == 1) { }
else if (op->BytesPerChannel == 1)
{
data8 = (pwr_tInt8)data32; data8 = (pwr_tInt8)data32;
memcpy(local->output_area + op->OffsetOutputs + i, &data8, 1); memcpy(local->output_area + op->OffsetOutputs + i, &data8, 1);
} }
...@@ -130,8 +141,8 @@ static pwr_tStatus IoCardWrite( ...@@ -130,8 +141,8 @@ static pwr_tStatus IoCardWrite(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -145,6 +156,6 @@ static pwr_tStatus IoCardClose( ...@@ -145,6 +156,6 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Io) pwr_dExport pwr_BindIoMethods(Pb_Io) = {
= { pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardWrite),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardClose), pwr_NullMethod};
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Init method for the Pb module Init method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardInit( static pwr_tStatus IoCardInit(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Module* op; pwr_sClass_Pb_Module* op;
...@@ -62,7 +62,8 @@ static pwr_tStatus IoCardInit( ...@@ -62,7 +62,8 @@ static pwr_tStatus IoCardInit(
op = (pwr_sClass_Pb_Module*)cp->op; op = (pwr_sClass_Pb_Module*)cp->op;
local = (io_sCardLocal*)cp->Local; local = (io_sCardLocal*)cp->Local;
for (i = 0; i < IO_MAXCHAN; i++) { for (i = 0; i < IO_MAXCHAN; i++)
{
local->scancount[i] = 0; local->scancount[i] = 0;
} }
...@@ -74,8 +75,8 @@ static pwr_tStatus IoCardInit( ...@@ -74,8 +75,8 @@ static pwr_tStatus IoCardInit(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Read method for the Pb module Read method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardRead( static pwr_tStatus IoCardRead(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Module* op; pwr_sClass_Pb_Module* op;
...@@ -101,8 +102,8 @@ static pwr_tStatus IoCardRead( ...@@ -101,8 +102,8 @@ static pwr_tStatus IoCardRead(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Write method for the Pb module Write method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardWrite( static pwr_tStatus IoCardWrite(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
pwr_sClass_Pb_Module* op; pwr_sClass_Pb_Module* op;
...@@ -114,7 +115,8 @@ static pwr_tStatus IoCardWrite( ...@@ -114,7 +115,8 @@ static pwr_tStatus IoCardWrite(
op->Status = slave->Status; op->Status = slave->Status;
if (op->Status == PB__NORMAL) { if (op->Status == PB__NORMAL)
{
io_bus_card_write(ctx, cp, local->output_area, slave->ByteOrdering, io_bus_card_write(ctx, cp, local->output_area, slave->ByteOrdering,
slave->FloatRepresentation); slave->FloatRepresentation);
} }
...@@ -125,8 +127,8 @@ static pwr_tStatus IoCardWrite( ...@@ -125,8 +127,8 @@ static pwr_tStatus IoCardWrite(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Close method for the Pb module Close method for the Pb module
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus IoCardClose( static pwr_tStatus IoCardClose(io_tCtx ctx, io_sAgent* ap, io_sRack* rp,
io_tCtx ctx, io_sAgent* ap, io_sRack* rp, io_sCard* cp) io_sCard* cp)
{ {
io_sCardLocal* local; io_sCardLocal* local;
local = cp->Local; local = cp->Local;
...@@ -141,6 +143,7 @@ static pwr_tStatus IoCardClose( ...@@ -141,6 +143,7 @@ static pwr_tStatus IoCardClose(
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Module) = { pwr_BindIoMethod(IoCardInit), pwr_dExport pwr_BindIoMethods(Pb_Module) = {
pwr_BindIoMethod(IoCardRead), pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardInit), pwr_BindIoMethod(IoCardRead),
pwr_BindIoMethod(IoCardClose), pwr_NullMethod }; pwr_BindIoMethod(IoCardWrite), pwr_BindIoMethod(IoCardClose),
pwr_NullMethod};
...@@ -78,23 +78,23 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap); ...@@ -78,23 +78,23 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap);
static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap); static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap);
static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap); static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap);
static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap); static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap);
static pwr_tStatus IoAgentSwap(io_tCtx ctx, io_sAgent* ap, io_eEvent event);
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request to Profiboard for setting FMB parameters Sends request to Profiboard for setting FMB parameters
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static short try_profi_rcv_con_ind(T_PROFI_DEVICE_HANDLE* hDevice, static short try_profi_rcv_con_ind(T_PROFI_SERVICE_DESCR* con_ind_sdb,
T_PROFI_SERVICE_DESCR* con_ind_sdb, USIGN8* con_ind_buffer, USIGN8* con_ind_buffer,
USIGN16* con_ind_buffer_len, INT16* result) USIGN16* con_ind_buffer_len, INT16* result)
{ {
int retry_counter; int retry_counter;
struct timespec rqtp = { 0, 10000000 }; // 10 ms struct timespec rqtp = {0, 10000000}; // 10 ms
retry_counter = DP_MAX_SERVICE_RETRY; retry_counter = DP_MAX_SERVICE_RETRY;
do { do
{
nanosleep(&rqtp, NULL); nanosleep(&rqtp, NULL);
*result = profi_rcv_con_ind( *result =
hDevice, con_ind_sdb, con_ind_buffer, con_ind_buffer_len); profi_rcv_con_ind(con_ind_sdb, con_ind_buffer, con_ind_buffer_len);
} while ((*result == NO_CON_IND_RECEIVED) && (retry_counter-- > 0)); } while ((*result == NO_CON_IND_RECEIVED) && (retry_counter-- > 0));
if (*result == E_IF_FATAL_ERROR) if (*result == E_IF_FATAL_ERROR)
...@@ -105,8 +105,7 @@ static short try_profi_rcv_con_ind(T_PROFI_DEVICE_HANDLE* hDevice, ...@@ -105,8 +105,7 @@ static short try_profi_rcv_con_ind(T_PROFI_DEVICE_HANDLE* hDevice,
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request to Profiboard for setting FMB parameters Sends request to Profiboard for setting FMB parameters
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static short fmb_set_configuration( static short fmb_set_configuration(io_sAgent* ap)
T_PROFI_DEVICE_HANDLE* hDevice, io_sAgent* ap)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_FMB_SET_CONFIGURATION_REQ data; T_FMB_SET_CONFIGURATION_REQ data;
...@@ -126,7 +125,8 @@ static short fmb_set_configuration( ...@@ -126,7 +125,8 @@ static short fmb_set_configuration(
/* Iterate over the slaves. */ /* Iterate over the slaves. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
{
cid = slave_list->Class; cid = slave_list->Class;
while (ODD(gdh_GetSuperClass(cid, &cid, pwr_cNOid))) while (ODD(gdh_GetSuperClass(cid, &cid, pwr_cNOid)))
...@@ -167,13 +167,14 @@ static short fmb_set_configuration( ...@@ -167,13 +167,14 @@ static short fmb_set_configuration(
data.fdlif.receive_credits = 20; data.fdlif.receive_credits = 20;
data.fdlif.max_no_resp_saps = 20; data.fdlif.max_no_resp_saps = 20;
profi_snd_req_res(hDevice, &sdb, &data, PB_FALSE); profi_snd_req_res(&sdb, &data, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == FMB_SET_CONFIGURATION) if ((con_ind_sdb.service == FMB_SET_CONFIGURATION) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -183,7 +184,7 @@ static short fmb_set_configuration( ...@@ -183,7 +184,7 @@ static short fmb_set_configuration(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request to Profiboard for setting DP master parameters Sends request to Profiboard for setting DP master parameters
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static short dp_init_master(T_PROFI_DEVICE_HANDLE* hDevice) static short dp_init_master()
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_DP_INIT_MASTER_REQ data; T_DP_INIT_MASTER_REQ data;
...@@ -203,19 +204,20 @@ static short dp_init_master(T_PROFI_DEVICE_HANDLE* hDevice) ...@@ -203,19 +204,20 @@ static short dp_init_master(T_PROFI_DEVICE_HANDLE* hDevice)
data.master_default_address = 0; data.master_default_address = 0;
data.master_class2 = PB_FALSE; data.master_class2 = PB_FALSE;
data.lowest_slave_address = 2; data.lowest_slave_address = 2;
data.slave_io_address_mode data.slave_io_address_mode =
= DP_AAM_IO_BLOCKS; // only mode possible with Linux-driver DP_AAM_ARRAY; DP_AAM_IO_BLOCKS; // only mode possible with Linux-driver DP_AAM_ARRAY;
data.clear_outputs = PB_TRUE; data.clear_outputs = PB_TRUE;
data.auto_remote_services = DP_AUTO_REMOTE_SERVICES; data.auto_remote_services = DP_AUTO_REMOTE_SERVICES;
data.cyclic_data_transfer = PB_TRUE; data.cyclic_data_transfer = PB_TRUE;
profi_snd_req_res(hDevice, &sdb, &data, PB_FALSE); profi_snd_req_res(&sdb, &data, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_INIT_MASTER) && (con_ind_sdb.primitive == CON) if ((con_ind_sdb.service == DP_INIT_MASTER) &&
&& (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -225,11 +227,11 @@ static short dp_init_master(T_PROFI_DEVICE_HANDLE* hDevice) ...@@ -225,11 +227,11 @@ static short dp_init_master(T_PROFI_DEVICE_HANDLE* hDevice)
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request to Profiboard for setting DP bus parameters Sends request to Profiboard for setting DP bus parameters
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static short dp_download_bus( static short dp_download_bus(pwr_sClass_Pb_Profiboard* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_Profiboard* op)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
struct { struct
{
T_DP_DOWNLOAD_REQ drp; T_DP_DOWNLOAD_REQ drp;
T_DP_BUS_PARA_SET dbp; T_DP_BUS_PARA_SET dbp;
} data; } data;
...@@ -255,7 +257,8 @@ static short dp_download_bus( ...@@ -255,7 +257,8 @@ static short dp_download_bus(
data.dbp.bus_para_len = swap16(66); data.dbp.bus_para_len = swap16(66);
data.dbp.fdl_add = 0; data.dbp.fdl_add = 0;
switch (op->BaudRate) { switch (op->BaudRate)
{
case 500: case 500:
data.dbp.baud_rate = DP_KBAUD_500; data.dbp.baud_rate = DP_KBAUD_500;
break; break;
...@@ -298,13 +301,14 @@ static short dp_download_bus( ...@@ -298,13 +301,14 @@ static short dp_download_bus(
for (i = 0; i < 32; i++) for (i = 0; i < 32; i++)
data.dbp.master_class2_name[i] = 0; data.dbp.master_class2_name[i] = 0;
profi_snd_req_res(hDevice, &sdb, &data, PB_FALSE); profi_snd_req_res(&sdb, &data, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_DOWNLOAD_LOC) && (con_ind_sdb.primitive == CON) if ((con_ind_sdb.service == DP_DOWNLOAD_LOC) &&
&& (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -313,8 +317,7 @@ static short dp_download_bus( ...@@ -313,8 +317,7 @@ static short dp_download_bus(
/*********************** FMB_SET_BUSPARAMETER ******************************/ /*********************** FMB_SET_BUSPARAMETER ******************************/
static short fmb_set_busparameter( static short fmb_set_busparameter(pwr_sClass_Pb_Profiboard* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_Profiboard* op)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* FUNCTIONAL_DESCRIPTION: */ /* FUNCTIONAL_DESCRIPTION: */
/* */ /* */
...@@ -337,7 +340,8 @@ static short fmb_set_busparameter( ...@@ -337,7 +340,8 @@ static short fmb_set_busparameter(
bus_par_req.loc_segm = 255; bus_par_req.loc_segm = 255;
bus_par_req.medium_red = 0; bus_par_req.medium_red = 0;
switch (op->BaudRate) { switch (op->BaudRate)
{
case 500: case 500:
bus_par_req.baud_rate = DP_KBAUD_500; bus_par_req.baud_rate = DP_KBAUD_500;
break; break;
...@@ -381,13 +385,14 @@ static short fmb_set_busparameter( ...@@ -381,13 +385,14 @@ static short fmb_set_busparameter(
/* Send Request */ /* Send Request */
profi_snd_req_res(hDevice, &sdb, &bus_par_req, PB_FALSE); profi_snd_req_res(&sdb, &bus_par_req, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == FMB_SET_BUSPARAMETER) if ((con_ind_sdb.service == FMB_SET_BUSPARAMETER) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -397,8 +402,7 @@ static short fmb_set_busparameter( ...@@ -397,8 +402,7 @@ static short fmb_set_busparameter(
/*********************** DP_SET_BUSPARAMETER ******************************/ /*********************** DP_SET_BUSPARAMETER ******************************/
static short dp_set_busparameter( static short dp_set_busparameter(pwr_sClass_Pb_Profiboard* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_Profiboard* op)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* FUNCTIONAL_DESCRIPTION: */ /* FUNCTIONAL_DESCRIPTION: */
/* */ /* */
...@@ -432,15 +436,16 @@ static short dp_set_busparameter( ...@@ -432,15 +436,16 @@ static short dp_set_busparameter(
/* Send Request */ /* Send Request */
profi_snd_req_res(hDevice, &sdb, &bus_par_req, PB_FALSE); profi_snd_req_res(&sdb, &bus_par_req, PB_FALSE);
con_ind_sdb.service = 0; con_ind_sdb.service = 0;
while (con_ind_sdb.service != DP_SET_BUSPARAMETER) while (con_ind_sdb.service != DP_SET_BUSPARAMETER)
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_SET_BUSPARAMETER) if ((con_ind_sdb.service == DP_SET_BUSPARAMETER) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -448,8 +453,7 @@ static short dp_set_busparameter( ...@@ -448,8 +453,7 @@ static short dp_set_busparameter(
} /* dp_set_busparameter */ } /* dp_set_busparameter */
static short fdlif_sap_activate_req( static short fdlif_sap_activate_req(pwr_sClass_Pb_FDL_SAP* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_FDL_SAP* op)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -498,24 +502,24 @@ possible return values: ...@@ -498,24 +502,24 @@ possible return values:
/* Send Request */ /* Send Request */
profi_snd_req_res(hDevice, &sdb, &sap, PB_FALSE); profi_snd_req_res(&sdb, &sap, PB_FALSE);
con_ind_sdb.service = 0; con_ind_sdb.service = 0;
while (con_ind_sdb.service != FDLIF_SAP_ACTIVATE) while (con_ind_sdb.service != FDLIF_SAP_ACTIVATE)
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == FDLIF_SAP_ACTIVATE) if ((con_ind_sdb.service == FDLIF_SAP_ACTIVATE) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
return (PB_FALSE); return (PB_FALSE);
} }
static short fdlif_rsap_activate_req( static short fdlif_rsap_activate_req(pwr_sClass_Pb_FDL_SAP* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_FDL_SAP* op)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -560,16 +564,17 @@ possible return values: ...@@ -560,16 +564,17 @@ possible return values:
/* Send Request */ /* Send Request */
profi_snd_req_res(hDevice, &sdb, &rsap, PB_FALSE); profi_snd_req_res(&sdb, &rsap, PB_FALSE);
con_ind_sdb.service = 0; con_ind_sdb.service = 0;
while (con_ind_sdb.service != FDLIF_RSAP_ACTIVATE) while (con_ind_sdb.service != FDLIF_RSAP_ACTIVATE)
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == FDLIF_RSAP_ACTIVATE) if ((con_ind_sdb.service == FDLIF_RSAP_ACTIVATE) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -579,7 +584,7 @@ possible return values: ...@@ -579,7 +584,7 @@ possible return values:
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request for selecting operation mode to the Profiboard Sends request for selecting operation mode to the Profiboard
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static short dp_act_param_loc(T_PROFI_DEVICE_HANDLE* hDevice, short arg) static short dp_act_param_loc(short arg)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_DP_ACT_PARAM_REQ apr; T_DP_ACT_PARAM_REQ apr;
...@@ -598,7 +603,7 @@ static short dp_act_param_loc(T_PROFI_DEVICE_HANDLE* hDevice, short arg) ...@@ -598,7 +603,7 @@ static short dp_act_param_loc(T_PROFI_DEVICE_HANDLE* hDevice, short arg)
apr.activate = arg; apr.activate = arg;
apr.dummy = 0; apr.dummy = 0;
retval = profi_snd_req_res(hDevice, &sdb, &apr, PB_FALSE); retval = profi_snd_req_res(&sdb, &apr, PB_FALSE);
return retval; return retval;
} }
...@@ -606,7 +611,7 @@ static short dp_act_param_loc(T_PROFI_DEVICE_HANDLE* hDevice, short arg) ...@@ -606,7 +611,7 @@ static short dp_act_param_loc(T_PROFI_DEVICE_HANDLE* hDevice, short arg)
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Sends request for getting slave diagnostics Sends request for getting slave diagnostics
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tBoolean dp_get_slave_diag(T_PROFI_DEVICE_HANDLE* hDevice) static pwr_tBoolean dp_get_slave_diag()
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
pwr_tUInt16 retval; pwr_tUInt16 retval;
...@@ -619,7 +624,7 @@ static pwr_tBoolean dp_get_slave_diag(T_PROFI_DEVICE_HANDLE* hDevice) ...@@ -619,7 +624,7 @@ static pwr_tBoolean dp_get_slave_diag(T_PROFI_DEVICE_HANDLE* hDevice)
sdb.invoke_id = 0; sdb.invoke_id = 0;
sdb.result = 0; sdb.result = 0;
retval = profi_snd_req_res(hDevice, &sdb, &sdb, PB_FALSE); retval = profi_snd_req_res(&sdb, &sdb, PB_FALSE);
return ((pwr_tBoolean)(retval == E_OK)); return ((pwr_tBoolean)(retval == E_OK));
} }
...@@ -627,50 +632,62 @@ static pwr_tBoolean dp_get_slave_diag(T_PROFI_DEVICE_HANDLE* hDevice) ...@@ -627,50 +632,62 @@ static pwr_tBoolean dp_get_slave_diag(T_PROFI_DEVICE_HANDLE* hDevice)
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Get slave diagnostics Get slave diagnostics
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static void dp_get_slave_diag_con( static void
T_DP_GET_SLAVE_DIAG_CON* get_slave_diag_con_ptr, io_sRack* slave_list, dp_get_slave_diag_con(T_DP_GET_SLAVE_DIAG_CON* get_slave_diag_con_ptr,
char log) io_sRack* slave_list, char log)
{ {
T_DP_DIAG_DATA FAR* diag_data_ptr; T_DP_DIAG_DATA FAR* diag_data_ptr;
char s[128]; char s[128];
pwr_sClass_Pb_DP_Slave* sp; pwr_sClass_Pb_DP_Slave* sp;
if (get_slave_diag_con_ptr->diag_data_len >= DP_MIN_SLAVE_DIAG_LEN) { if (get_slave_diag_con_ptr->diag_data_len >= DP_MIN_SLAVE_DIAG_LEN)
{
diag_data_ptr = (T_DP_DIAG_DATA FAR*)(get_slave_diag_con_ptr + 1); diag_data_ptr = (T_DP_DIAG_DATA FAR*)(get_slave_diag_con_ptr + 1);
while (slave_list != NULL) { while (slave_list != NULL)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
if (sp->SlaveAddress == get_slave_diag_con_ptr->rem_add) { if (sp->SlaveAddress == get_slave_diag_con_ptr->rem_add)
{
sp->StationStatus1 = diag_data_ptr->station_status_1; sp->StationStatus1 = diag_data_ptr->station_status_1;
sp->StationStatus2 = diag_data_ptr->station_status_2; sp->StationStatus2 = diag_data_ptr->station_status_2;
sp->StationStatus3 = diag_data_ptr->station_status_3; sp->StationStatus3 = diag_data_ptr->station_status_3;
sp->BytesOfDiag sp->BytesOfDiag =
= get_slave_diag_con_ptr->diag_data_len - DP_MIN_SLAVE_DIAG_LEN; get_slave_diag_con_ptr->diag_data_len - DP_MIN_SLAVE_DIAG_LEN;
memcpy(sp->Diag, diag_data_ptr + 1, memcpy(
sp->Diag, diag_data_ptr + 1,
MIN(get_slave_diag_con_ptr->diag_data_len - DP_MIN_SLAVE_DIAG_LEN, MIN(get_slave_diag_con_ptr->diag_data_len - DP_MIN_SLAVE_DIAG_LEN,
DP_MAX_EXT_DIAG_DATA_LEN)); DP_MAX_EXT_DIAG_DATA_LEN));
/* Update slave status */ /* Update slave status */
if (!(sp->StationStatus1 & ~pwr_mPbStationStatus1Mask_ExternalDiag) if (!(sp->StationStatus1 & ~pwr_mPbStationStatus1Mask_ExternalDiag) &&
&& !(sp->StationStatus2 !(sp->StationStatus2 &
& ~(pwr_mPbStationStatus2Mask_Default ~(pwr_mPbStationStatus2Mask_Default |
| pwr_mPbStationStatus2Mask_ResponseMonitoringOn))) { pwr_mPbStationStatus2Mask_ResponseMonitoringOn)))
{
sp->Status = PB__NORMAL; sp->Status = PB__NORMAL;
} else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent) { }
else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NonExistent)
{
sp->Status = PB__NOCONN; sp->Status = PB__NOCONN;
} else if ((sp->StationStatus1 }
& (pwr_mPbStationStatus1Mask_ConfigFault else if ((sp->StationStatus1 &
| pwr_mPbStationStatus1Mask_ParamFault)) (pwr_mPbStationStatus1Mask_ConfigFault |
|| (sp->StationStatus2 pwr_mPbStationStatus1Mask_ParamFault)) ||
& pwr_mPbStationStatus2Mask_NewParamsRequested)) { (sp->StationStatus2 &
pwr_mPbStationStatus2Mask_NewParamsRequested))
{
sp->Status = PB__CONFIGERR; sp->Status = PB__CONFIGERR;
} else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_MasterLock) { }
else if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_MasterLock)
{
sp->Status = PB__MASTERLOCK; sp->Status = PB__MASTERLOCK;
} else // if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NotReady) }
else // if (sp->StationStatus1 & pwr_mPbStationStatus1Mask_NotReady)
{ {
sp->Status = PB__NOTREADY; sp->Status = PB__NOTREADY;
} }
...@@ -681,9 +698,10 @@ static void dp_get_slave_diag_con( ...@@ -681,9 +698,10 @@ static void dp_get_slave_diag_con(
slave_list = slave_list->next; slave_list = slave_list->next;
} }
if (log) { if (log)
sprintf(s, {
"Slave [%3hhu] [0x%04hX]: Status = 0x%02hhX 0x%02hhX 0x%02hhX, " sprintf(
s, "Slave [%3hhu] [0x%04hX]: Status = 0x%02hhX 0x%02hhX 0x%02hhX, "
"Master = %3hhu, Ext = %u, Diags = %hu", "Master = %3hhu, Ext = %u, Diags = %hu",
get_slave_diag_con_ptr->rem_add, swap16(diag_data_ptr->ident_number), get_slave_diag_con_ptr->rem_add, swap16(diag_data_ptr->ident_number),
diag_data_ptr->station_status_1, diag_data_ptr->station_status_2, diag_data_ptr->station_status_1, diag_data_ptr->station_status_2,
...@@ -697,8 +715,9 @@ static void dp_get_slave_diag_con( ...@@ -697,8 +715,9 @@ static void dp_get_slave_diag_con(
} /* diag_data_len */ } /* diag_data_len */
} }
static void fdlif_sda_sdn_srd_ind( static void fdlif_sda_sdn_srd_ind(INT8 invoke_id,
INT8 invoke_id, T_FDLIF_SDN_SDA_SRD_REQ* ind_ptr, io_sRack* slave_list) T_FDLIF_SDN_SDA_SRD_REQ* ind_ptr,
io_sRack* slave_list)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -713,20 +732,25 @@ possible return values: ...@@ -713,20 +732,25 @@ possible return values:
USIGN8* data_ptr; USIGN8* data_ptr;
pwr_sClass_Pb_FDL_SAP* sp; pwr_sClass_Pb_FDL_SAP* sp;
if (ind_ptr->length > 0) { if (ind_ptr->length > 0)
{
data_ptr = (USIGN8*)(ind_ptr + 1); data_ptr = (USIGN8*)(ind_ptr + 1);
// print_data (data_ptr, cnf_ptr->length); // print_data (data_ptr, cnf_ptr->length);
while (slave_list != NULL) { while (slave_list != NULL)
if (((io_sRackLocal*)slave_list->Local)->fdl) { {
if (((io_sRackLocal*)slave_list->Local)->fdl)
{
sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op; sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op;
if (sp->SAP_Nr == ind_ptr->ssap) { if (sp->SAP_Nr == ind_ptr->ssap)
{
io_sCard* card_list = slave_list->cardlist; io_sCard* card_list = slave_list->cardlist;
pwr_sClass_Pb_FDL_DataTransfer* cp; pwr_sClass_Pb_FDL_DataTransfer* cp;
io_sFDLCardLocal* local_card; io_sFDLCardLocal* local_card;
if (card_list != NULL) { if (card_list != NULL)
{
cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op; cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op;
local_card = (io_sFDLCardLocal*)card_list->Local; local_card = (io_sFDLCardLocal*)card_list->Local;
...@@ -764,29 +788,37 @@ possible return values: ...@@ -764,29 +788,37 @@ possible return values:
pwr_sClass_Pb_FDL_SAP* sp; pwr_sClass_Pb_FDL_SAP* sp;
USIGN8 res; USIGN8 res;
if (result == POS) { if (result == POS)
{
res = 0; res = 0;
} else { }
else
{
res = cnf_ptr->status; res = cnf_ptr->status;
} }
data_ptr = (USIGN8*)(cnf_ptr + 1); data_ptr = (USIGN8*)(cnf_ptr + 1);
while (slave_list != NULL) { while (slave_list != NULL)
if (((io_sRackLocal*)slave_list->Local)->fdl) { {
if (((io_sRackLocal*)slave_list->Local)->fdl)
{
sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op; sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op;
if (!sp->Responder) { if (!sp->Responder)
{
io_sCard* card_list = slave_list->cardlist; io_sCard* card_list = slave_list->cardlist;
pwr_sClass_Pb_FDL_DataTransfer* cp; pwr_sClass_Pb_FDL_DataTransfer* cp;
io_sFDLCardLocal* local_card; io_sFDLCardLocal* local_card;
while (card_list != NULL) { while (card_list != NULL)
{
cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op; cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op;
local_card = (io_sFDLCardLocal*)card_list->Local; local_card = (io_sFDLCardLocal*)card_list->Local;
if ((local_card->invoke_id == invoke_id) if ((local_card->invoke_id == invoke_id) &&
&& (cp->Type == pwr_ePbFDLDataTransferTypeEnum_FDLIF_SRD)) { (cp->Type == pwr_ePbFDLDataTransferTypeEnum_FDLIF_SRD))
{
cp->Result = res; cp->Result = res;
if (cnf_ptr->length > 0) if (cnf_ptr->length > 0)
memcpy(local_card->input_area, data_ptr, memcpy(local_card->input_area, data_ptr,
...@@ -806,33 +838,41 @@ possible return values: ...@@ -806,33 +838,41 @@ possible return values:
return; return;
} }
static void fdlif_sda_sdn_con( static void fdlif_sda_sdn_con(INT8 invoke_id, INT16 result,
INT8 invoke_id, INT16 result, T_FDLIF_ERROR* err_ptr, io_sRack* slave_list) T_FDLIF_ERROR* err_ptr, io_sRack* slave_list)
{ {
pwr_sClass_Pb_FDL_SAP* sp; pwr_sClass_Pb_FDL_SAP* sp;
USIGN8 res; USIGN8 res;
if (result == POS) { if (result == POS)
{
res = 0; res = 0;
} else { }
else
{
res = err_ptr->result; res = err_ptr->result;
} }
// print_data (data_ptr, cnf_ptr->length); // print_data (data_ptr, cnf_ptr->length);
while (slave_list != NULL) { while (slave_list != NULL)
if (((io_sRackLocal*)slave_list->Local)->fdl) { {
if (((io_sRackLocal*)slave_list->Local)->fdl)
{
sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op; sp = (pwr_sClass_Pb_FDL_SAP*)slave_list->op;
if (!sp->Responder) { if (!sp->Responder)
{
io_sCard* card_list = slave_list->cardlist; io_sCard* card_list = slave_list->cardlist;
pwr_sClass_Pb_FDL_DataTransfer* cp; pwr_sClass_Pb_FDL_DataTransfer* cp;
io_sFDLCardLocal* local_card; io_sFDLCardLocal* local_card;
while (card_list != NULL) { while (card_list != NULL)
{
cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op; cp = (pwr_sClass_Pb_FDL_DataTransfer*)card_list->op;
local_card = (io_sFDLCardLocal*)card_list->Local; local_card = (io_sFDLCardLocal*)card_list->Local;
if (local_card->invoke_id == invoke_id) { if (local_card->invoke_id == invoke_id)
{
cp->Result = res; cp->Result = res;
break; break;
} }
...@@ -852,8 +892,7 @@ static void fdlif_sda_sdn_con( ...@@ -852,8 +892,7 @@ static void fdlif_sda_sdn_con(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Starts download sequence of prm data to one slave Starts download sequence of prm data to one slave
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus start_download_seq( static pwr_tStatus start_download_seq(pwr_sClass_Pb_DP_Slave* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_DP_Slave* op)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_DP_START_SEQ_REQ ssrp; T_DP_START_SEQ_REQ ssrp;
...@@ -875,13 +914,14 @@ static pwr_tStatus start_download_seq( ...@@ -875,13 +914,14 @@ static pwr_tStatus start_download_seq(
ssrp.area_code = op->SlaveAddress; ssrp.area_code = op->SlaveAddress;
ssrp.timeout = timeout; ssrp.timeout = timeout;
profi_snd_req_res(hDevice, &sdb, &ssrp, PB_FALSE); profi_snd_req_res(&sdb, &ssrp, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_START_SEQ_LOC) if ((con_ind_sdb.service == DP_START_SEQ_LOC) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
op->Status = PB__NOCONN; op->Status = PB__NOCONN;
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -894,8 +934,7 @@ static pwr_tStatus start_download_seq( ...@@ -894,8 +934,7 @@ static pwr_tStatus start_download_seq(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Starts download sequence of prm data to one slave Starts download sequence of prm data to one slave
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus end_download_seq( static pwr_tStatus end_download_seq(pwr_sClass_Pb_DP_Slave* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_DP_Slave* op)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_DP_END_SEQ_REQ esrp; T_DP_END_SEQ_REQ esrp;
...@@ -915,13 +954,14 @@ static pwr_tStatus end_download_seq( ...@@ -915,13 +954,14 @@ static pwr_tStatus end_download_seq(
esrp.rem_add = 0; esrp.rem_add = 0;
esrp.dummy = 0; esrp.dummy = 0;
profi_snd_req_res(hDevice, &sdb, &esrp, PB_FALSE); profi_snd_req_res(&sdb, &esrp, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_END_SEQ_LOC) && (con_ind_sdb.primitive == CON) if ((con_ind_sdb.service == DP_END_SEQ_LOC) &&
&& (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
op->Status = PB__NOCONN; op->Status = PB__NOCONN;
return (PB_TRUE); return (PB_TRUE);
} }
...@@ -934,12 +974,12 @@ static pwr_tStatus end_download_seq( ...@@ -934,12 +974,12 @@ static pwr_tStatus end_download_seq(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Initializes one DP slave in the master card Initializes one DP slave in the master card
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus dp_download_slave( static pwr_tStatus dp_download_slave(pwr_sClass_Pb_DP_Slave* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_DP_Slave* op)
{ {
int i; int i;
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
struct { struct
{
T_DP_DOWNLOAD_REQ drp; T_DP_DOWNLOAD_REQ drp;
unsigned char param[512]; unsigned char param[512];
} slave_data; } slave_data;
...@@ -961,8 +1001,9 @@ static pwr_tStatus dp_download_slave( ...@@ -961,8 +1001,9 @@ static pwr_tStatus dp_download_slave(
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
download_data_size = sizeof(prm_head) + sizeof(prm_data) + op->PrmUserDataLen download_data_size = sizeof(prm_head) + sizeof(prm_data) +
+ op->ConfigDataLen + sizeof(aat_data) + sizeof(user_data); op->PrmUserDataLen + op->ConfigDataLen +
sizeof(aat_data) + sizeof(user_data);
data_len = download_data_size; data_len = download_data_size;
...@@ -1020,42 +1061,53 @@ static pwr_tStatus dp_download_slave( ...@@ -1020,42 +1061,53 @@ static pwr_tStatus dp_download_slave(
send_buf = (char*)slave_data.param; send_buf = (char*)slave_data.param;
if (data_len > DP_MAX_DOWNLOAD_DATA_LEN) { if (data_len > DP_MAX_DOWNLOAD_DATA_LEN)
if (!start_download_seq(hDevice, op)) { {
if (!start_download_seq(op))
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
return (PB_FALSE); return (PB_FALSE);
} }
} }
while (download_data_size > 0) { while (download_data_size > 0)
{
slave_data.drp.data_len = MIN(download_data_size, DP_MAX_DOWNLOAD_DATA_LEN); slave_data.drp.data_len = MIN(download_data_size, DP_MAX_DOWNLOAD_DATA_LEN);
profi_snd_req_res(hDevice, &sdb, &slave_data, PB_FALSE); profi_snd_req_res(&sdb, &slave_data, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if (con_ind_sdb.service == DP_DOWNLOAD_LOC) { if (con_ind_sdb.service == DP_DOWNLOAD_LOC)
if ((con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { {
if ((con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
op->Status = PB__NOCONN; op->Status = PB__NOCONN;
} else { }
else
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
failure = TRUE; failure = TRUE;
break; break;
} }
} }
if (download_data_size > DP_MAX_DOWNLOAD_DATA_LEN) { if (download_data_size > DP_MAX_DOWNLOAD_DATA_LEN)
{
download_data_size -= DP_MAX_DOWNLOAD_DATA_LEN; download_data_size -= DP_MAX_DOWNLOAD_DATA_LEN;
slave_data.drp.add_offset += DP_MAX_DOWNLOAD_DATA_LEN; slave_data.drp.add_offset += DP_MAX_DOWNLOAD_DATA_LEN;
send_buf += DP_MAX_DOWNLOAD_DATA_LEN; send_buf += DP_MAX_DOWNLOAD_DATA_LEN;
memcpy(slave_data.param, send_buf, memcpy(slave_data.param, send_buf,
MIN(download_data_size, DP_MAX_DOWNLOAD_DATA_LEN)); MIN(download_data_size, DP_MAX_DOWNLOAD_DATA_LEN));
} else }
else
download_data_size = 0; download_data_size = 0;
} }
if (data_len > DP_MAX_DOWNLOAD_DATA_LEN) { if (data_len > DP_MAX_DOWNLOAD_DATA_LEN)
if (!end_download_seq(hDevice, op)) { {
if (!end_download_seq(op))
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
return (PB_FALSE); return (PB_FALSE);
} }
...@@ -1070,8 +1122,7 @@ static pwr_tStatus dp_download_slave( ...@@ -1070,8 +1122,7 @@ static pwr_tStatus dp_download_slave(
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Calculate offsets of inputs and outputs for a slave Calculate offsets of inputs and outputs for a slave
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
static pwr_tStatus dp_io_offsets( static pwr_tStatus dp_io_offsets(pwr_sClass_Pb_DP_Slave* op)
T_PROFI_DEVICE_HANDLE* hDevice, pwr_sClass_Pb_DP_Slave* op)
{ {
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
T_DP_GET_SLAVE_PARAM_REQ get_slave_param_req; T_DP_GET_SLAVE_PARAM_REQ get_slave_param_req;
...@@ -1093,20 +1144,21 @@ static pwr_tStatus dp_io_offsets( ...@@ -1093,20 +1144,21 @@ static pwr_tStatus dp_io_offsets(
get_slave_param_req.identifier = DP_SLAVE_PARAM_SLAVE_INFO; get_slave_param_req.identifier = DP_SLAVE_PARAM_SLAVE_INFO;
get_slave_param_req.rem_add = op->SlaveAddress; get_slave_param_req.rem_add = op->SlaveAddress;
result = profi_snd_req_res(hDevice, &sdb, &get_slave_param_req, PB_FALSE); result = profi_snd_req_res(&sdb, &get_slave_param_req, PB_FALSE);
if (result != E_OK) if (result != E_OK)
return (result); return (result);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
get_slave_param_con_ptr = (T_DP_GET_SLAVE_PARAM_CON FAR*)con_ind_buffer; get_slave_param_con_ptr = (T_DP_GET_SLAVE_PARAM_CON FAR*)con_ind_buffer;
if ((con_ind_sdb.service == DP_GET_SLAVE_PARAM) if ((con_ind_sdb.service == DP_GET_SLAVE_PARAM) &&
&& (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
slave_info_ptr {
= (T_DP_SLAVE_PARAM_SLAVE_INFO FAR*)(get_slave_param_con_ptr + 1); slave_info_ptr =
(T_DP_SLAVE_PARAM_SLAVE_INFO FAR*)(get_slave_param_con_ptr + 1);
op->BytesOfInput = slave_info_ptr->number_inputs; op->BytesOfInput = slave_info_ptr->number_inputs;
op->BytesOfOutput = slave_info_ptr->number_outputs; op->BytesOfOutput = slave_info_ptr->number_outputs;
...@@ -1127,7 +1179,6 @@ void* handle_events(void* ptr) ...@@ -1127,7 +1179,6 @@ void* handle_events(void* ptr)
io_sAgentLocal* local; io_sAgentLocal* local;
io_sAgent* ap; io_sAgent* ap;
short sts; short sts;
T_PROFI_DEVICE_HANDLE* hDevice;
pwr_sClass_Pb_Profiboard* op; pwr_sClass_Pb_Profiboard* op;
char s[128]; char s[128];
...@@ -1135,13 +1186,12 @@ void* handle_events(void* ptr) ...@@ -1135,13 +1186,12 @@ void* handle_events(void* ptr)
USIGN16 con_ind_buffer_len = 256; USIGN16 con_ind_buffer_len = 256;
T_PROFI_SERVICE_DESCR con_ind_sdb; T_PROFI_SERVICE_DESCR con_ind_sdb;
T_DP_GET_SLAVE_DIAG_CON* get_slave_diag_con_ptr; T_DP_GET_SLAVE_DIAG_CON* get_slave_diag_con_ptr;
struct timespec rqtp = { 0, 10000000 }; // 10 ms struct timespec rqtp = {0, 10000000}; // 10 ms
args = (agent_args*)ptr; args = (agent_args*)ptr;
local = (io_sAgentLocal*)args->local; local = (io_sAgentLocal*)args->local;
ap = args->ap; ap = args->ap;
hDevice = (T_PROFI_DEVICE_HANDLE*)ap->Local;
op = (pwr_sClass_Pb_Profiboard*)ap->op; op = (pwr_sClass_Pb_Profiboard*)ap->op;
/* If everything is fine we should be in state OPERATE /* If everything is fine we should be in state OPERATE
...@@ -1149,39 +1199,53 @@ void* handle_events(void* ptr) ...@@ -1149,39 +1199,53 @@ void* handle_events(void* ptr)
if there are any hardware faults. In that case, make a reset and a new if there are any hardware faults. In that case, make a reset and a new
init. */ init. */
while (1) { while (1)
{
if (op->DisableBus) if (op->DisableBus)
exit(0); exit(0);
pthread_mutex_lock(&local->mutex); pthread_mutex_lock(&local->mutex);
con_ind_buffer_len = 256; con_ind_buffer_len = 256;
sts = profi_rcv_con_ind( sts = profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len);
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len);
if (sts == CON_IND_RECEIVED)
if (sts == CON_IND_RECEIVED) { {
switch (con_ind_sdb.layer) { switch (con_ind_sdb.layer)
case DP_USR: { {
if (con_ind_sdb.primitive == CON) { case DP_USR:
if (con_ind_sdb.result == POS) { {
switch (con_ind_sdb.service) { if (con_ind_sdb.primitive == CON)
{
if (con_ind_sdb.result == POS)
{
switch (con_ind_sdb.service)
{
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
case DP_ACT_PARAM_LOC: { case DP_ACT_PARAM_LOC:
if (op->Status == PB__NOTINIT) { {
if (op->Status == PB__NOTINIT)
{
op->Status = PB__STOPPED; op->Status = PB__STOPPED;
errh_Info("Profibus DP Master %s to state STOPPED", ap->Name); errh_Info("Profibus DP Master %s to state STOPPED", ap->Name);
dp_act_param_loc(hDevice, DP_OP_MODE_CLEAR); dp_act_param_loc(DP_OP_MODE_CLEAR);
} else if (op->Status == PB__STOPPED) { }
else if (op->Status == PB__STOPPED)
{
op->Status = PB__CLEARED; op->Status = PB__CLEARED;
errh_Info("Profibus DP Master %s to state CLEARED", ap->Name); errh_Info("Profibus DP Master %s to state CLEARED", ap->Name);
dp_act_param_loc(hDevice, DP_OP_MODE_OPERATE); dp_act_param_loc(DP_OP_MODE_OPERATE);
} else if (op->Status == PB__CLEARED) { }
else if (op->Status == PB__CLEARED)
{
errh_Info("Profibus DP Master %s to state OPERATE", ap->Name); errh_Info("Profibus DP Master %s to state OPERATE", ap->Name);
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
if (!local->slave_diag_requested && local->parallel_service) { if (!local->slave_diag_requested && local->parallel_service)
if (dp_get_slave_diag(hDevice)) { {
if (dp_get_slave_diag())
{
local->slave_diag_requested = op->Diag[3] = PB_TRUE; local->slave_diag_requested = op->Diag[3] = PB_TRUE;
local->parallel_service = PB_FALSE; local->parallel_service = PB_FALSE;
} }
...@@ -1193,61 +1257,74 @@ void* handle_events(void* ptr) ...@@ -1193,61 +1257,74 @@ void* handle_events(void* ptr)
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
case DP_GET_SLAVE_DIAG: { case DP_GET_SLAVE_DIAG:
get_slave_diag_con_ptr {
= (T_DP_GET_SLAVE_DIAG_CON FAR*)con_ind_buffer; get_slave_diag_con_ptr =
(T_DP_GET_SLAVE_DIAG_CON FAR*)con_ind_buffer;
dp_get_slave_diag_con( dp_get_slave_diag_con(get_slave_diag_con_ptr, ap->racklist,
get_slave_diag_con_ptr, ap->racklist, op->Diag[1]); op->Diag[1]);
op->Diag[2]++; op->Diag[2]++;
local->slave_diag_requested = op->Diag[3] = PB_FALSE; local->slave_diag_requested = op->Diag[3] = PB_FALSE;
if (get_slave_diag_con_ptr->diag_entries < 0) { if (get_slave_diag_con_ptr->diag_entries < 0)
{
errh_Warning("Profibus - diagnostic circular buffer owerflow."); errh_Warning("Profibus - diagnostic circular buffer owerflow.");
} }
if (get_slave_diag_con_ptr->diag_entries) { if (get_slave_diag_con_ptr->diag_entries)
{
local->slave_diag_requested = op->Diag[3] = PB_TRUE; local->slave_diag_requested = op->Diag[3] = PB_TRUE;
dp_get_slave_diag(hDevice); dp_get_slave_diag();
} }
break; break;
} /* case DP_GET_SLAVE_DIAG */ } /* case DP_GET_SLAVE_DIAG */
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
default: { default:
{
break; break;
} /* deafult service */ } /* deafult service */
} /* switch */ } /* switch */
} /* if POS */ } /* if POS */
else { else
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
errh_Error("Profibus DP Master %s - %x neg con rec", ap->Name, errh_Error("Profibus DP Master %s - %x neg con rec", ap->Name,
*((unsigned short*)con_ind_buffer)); *((unsigned short*)con_ind_buffer));
} /* else POS */ } /* else POS */
} /* if CON */ } /* if CON */
else if (con_ind_sdb.primitive == IND) { else if (con_ind_sdb.primitive == IND)
if (con_ind_sdb.result == POS) { {
switch (con_ind_sdb.service) { if (con_ind_sdb.result == POS)
{
switch (con_ind_sdb.service)
{
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
case DP_ACT_PARAM_LOC: { case DP_ACT_PARAM_LOC:
{
USIGN8 usif_state; USIGN8 usif_state;
usif_state = ((T_DP_ACT_PARAM_IND FAR*)con_ind_buffer)->activate; usif_state = ((T_DP_ACT_PARAM_IND FAR*)con_ind_buffer)->activate;
switch (usif_state) { switch (usif_state)
case DP_OP_MODE_STOP: { {
case DP_OP_MODE_STOP:
{
op->Status = PB__STOPPED; op->Status = PB__STOPPED;
sprintf(s, "Mode changed to STOP"); sprintf(s, "Mode changed to STOP");
break; break;
} }
case DP_OP_MODE_CLEAR: { case DP_OP_MODE_CLEAR:
{
op->Status = PB__CLEARED; op->Status = PB__CLEARED;
sprintf(s, "Mode changed to CLEAR"); sprintf(s, "Mode changed to CLEAR");
break; break;
} }
case DP_OP_MODE_OPERATE: { case DP_OP_MODE_OPERATE:
{
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
sprintf(s, "Mode changed to OPERATE"); sprintf(s, "Mode changed to OPERATE");
break; break;
...@@ -1256,14 +1333,17 @@ void* handle_events(void* ptr) ...@@ -1256,14 +1333,17 @@ void* handle_events(void* ptr)
errh_Info("Profibus DP Master %s - %s", ap->Name, s); errh_Info("Profibus DP Master %s - %s", ap->Name, s);
if (usif_state == DP_OP_MODE_STOP) { if (usif_state == DP_OP_MODE_STOP)
{
usif_state = DP_OP_MODE_CLEAR; usif_state = DP_OP_MODE_CLEAR;
dp_act_param_loc(hDevice, DP_OP_MODE_CLEAR); dp_act_param_loc(DP_OP_MODE_CLEAR);
} else if (usif_state == DP_OP_MODE_CLEAR) { }
else if (usif_state == DP_OP_MODE_CLEAR)
{
usif_state = DP_OP_MODE_OPERATE; usif_state = DP_OP_MODE_OPERATE;
dp_act_param_loc(hDevice, DP_OP_MODE_OPERATE); dp_act_param_loc(DP_OP_MODE_OPERATE);
} }
break; break;
...@@ -1271,28 +1351,37 @@ void* handle_events(void* ptr) ...@@ -1271,28 +1351,37 @@ void* handle_events(void* ptr)
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
case DP_GET_SLAVE_DIAG: { case DP_GET_SLAVE_DIAG:
get_slave_diag_con_ptr {
= (T_DP_GET_SLAVE_DIAG_CON FAR*)con_ind_buffer; get_slave_diag_con_ptr =
(T_DP_GET_SLAVE_DIAG_CON FAR*)con_ind_buffer;
dp_get_slave_diag_con( dp_get_slave_diag_con(get_slave_diag_con_ptr, ap->racklist,
get_slave_diag_con_ptr, ap->racklist, op->Diag[1]); op->Diag[1]);
op->Diag[0]++; op->Diag[0]++;
if (get_slave_diag_con_ptr->diag_entries < 0) { if (get_slave_diag_con_ptr->diag_entries < 0)
{
errh_Warning("Profibus - diagnostic circular buffer owerflow."); errh_Warning("Profibus - diagnostic circular buffer owerflow.");
} }
if ((get_slave_diag_con_ptr->diag_entries) if ((get_slave_diag_con_ptr->diag_entries) &&
&& (!local->slave_diag_requested)) { (!local->slave_diag_requested))
if (op->Status == PB__NORMAL) { {
if (dp_get_slave_diag(hDevice)) { if (op->Status == PB__NORMAL)
{
if (dp_get_slave_diag())
{
local->slave_diag_requested = op->Diag[3] = PB_TRUE; local->slave_diag_requested = op->Diag[3] = PB_TRUE;
} else { }
else
{
errh_Warning("Profibus - Request for diag failed."); errh_Warning("Profibus - Request for diag failed.");
} }
} else { }
else
{
local->parallel_service = PB_TRUE; local->parallel_service = PB_TRUE;
} }
} }
...@@ -1302,12 +1391,14 @@ void* handle_events(void* ptr) ...@@ -1302,12 +1391,14 @@ void* handle_events(void* ptr)
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
default: { default:
{
break; break;
} /* deafult service */ } /* deafult service */
} /* switch */ } /* switch */
} /* if POS */ } /* if POS */
else { else
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
errh_Error("Profibus DP Master %s - %x neg ind rec", ap->Name, errh_Error("Profibus DP Master %s - %x neg ind rec", ap->Name,
*((unsigned short*)con_ind_buffer)); *((unsigned short*)con_ind_buffer));
...@@ -1316,17 +1407,22 @@ void* handle_events(void* ptr) ...@@ -1316,17 +1407,22 @@ void* handle_events(void* ptr)
break; break;
} }
case FMB_USR: { case FMB_USR:
switch (con_ind_sdb.service) { {
switch (con_ind_sdb.service)
{
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
case FMB_SET_CONFIGURATION: case FMB_SET_CONFIGURATION:
case FMB_EXIT: case FMB_EXIT:
case FMB_RESET: { case FMB_RESET:
{
break; break;
} }
case FMB_FM2_EVENT: { case FMB_FM2_EVENT:
switch (((T_FMB_FM2_EVENT_IND FAR*)con_ind_buffer)->reason) { {
switch (((T_FMB_FM2_EVENT_IND FAR*)con_ind_buffer)->reason)
{
case FM2_FAULT_ADDRESS: case FM2_FAULT_ADDRESS:
sprintf(s, "Duplicate address recognized"); sprintf(s, "Duplicate address recognized");
break; break;
...@@ -1356,7 +1452,8 @@ void* handle_events(void* ptr) ...@@ -1356,7 +1452,8 @@ void* handle_events(void* ptr)
break; break;
} /* case FMB_FM2_EVENT */ } /* case FMB_FM2_EVENT */
default: { default:
{
printf("\nnot supported FMB service received\n"); printf("\nnot supported FMB service received\n");
printf("service: %d primitive: %d\n", con_ind_sdb.service, printf("service: %d primitive: %d\n", con_ind_sdb.service,
con_ind_sdb.primitive); con_ind_sdb.primitive);
...@@ -1365,8 +1462,10 @@ void* handle_events(void* ptr) ...@@ -1365,8 +1462,10 @@ void* handle_events(void* ptr)
} /* switch */ } /* switch */
break; break;
} }
case FDLIF_USR: { case FDLIF_USR:
switch (con_ind_sdb.service) { {
switch (con_ind_sdb.service)
{
case FDLIF_EVENT: case FDLIF_EVENT:
case FDLIF_SET_BUSPARAMETER: case FDLIF_SET_BUSPARAMETER:
case FDLIF_READ_BUSPARAMETER: case FDLIF_READ_BUSPARAMETER:
...@@ -1380,30 +1479,42 @@ void* handle_events(void* ptr) ...@@ -1380,30 +1479,42 @@ void* handle_events(void* ptr)
break; break;
case FDLIF_SDN: case FDLIF_SDN:
if (con_ind_sdb.primitive == IND) { if (con_ind_sdb.primitive == IND)
{
fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id, fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id,
(T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer, ap->racklist); (T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer,
} else { ap->racklist);
}
else
{
fdlif_sda_sdn_con(con_ind_sdb.invoke_id, con_ind_sdb.result, fdlif_sda_sdn_con(con_ind_sdb.invoke_id, con_ind_sdb.result,
(T_FDLIF_ERROR*)con_ind_buffer, ap->racklist); (T_FDLIF_ERROR*)con_ind_buffer, ap->racklist);
} }
break; break;
case FDLIF_SDA: case FDLIF_SDA:
if (con_ind_sdb.primitive == IND) { if (con_ind_sdb.primitive == IND)
{
fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id, fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id,
(T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer, ap->racklist); (T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer,
} else { ap->racklist);
}
else
{
fdlif_sda_sdn_con(con_ind_sdb.invoke_id, con_ind_sdb.result, fdlif_sda_sdn_con(con_ind_sdb.invoke_id, con_ind_sdb.result,
(T_FDLIF_ERROR*)con_ind_buffer, ap->racklist); (T_FDLIF_ERROR*)con_ind_buffer, ap->racklist);
} }
break; break;
case FDLIF_SRD: case FDLIF_SRD:
if (con_ind_sdb.primitive == IND) { if (con_ind_sdb.primitive == IND)
{
fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id, fdlif_sda_sdn_srd_ind(con_ind_sdb.invoke_id,
(T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer, ap->racklist); (T_FDLIF_SDN_SDA_SRD_REQ FAR*)con_ind_buffer,
} else { ap->racklist);
}
else
{
fdlif_srd_con(con_ind_sdb.result, con_ind_sdb.invoke_id, fdlif_srd_con(con_ind_sdb.result, con_ind_sdb.invoke_id,
(T_FDLIF_SRD_CNF*)con_ind_buffer, ap->racklist); (T_FDLIF_SRD_CNF*)con_ind_buffer, ap->racklist);
} }
...@@ -1423,11 +1534,15 @@ void* handle_events(void* ptr) ...@@ -1423,11 +1534,15 @@ void* handle_events(void* ptr)
con_ind_sdb.service, con_ind_sdb.primitive); con_ind_sdb.service, con_ind_sdb.primitive);
break; break;
} }
}
} else if (sts != NO_CON_IND_RECEIVED) { else if (sts != NO_CON_IND_RECEIVED)
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
} else { }
if (local->slave_diag_requested) { else
{
if (local->slave_diag_requested)
{
// errh_Info( "Profibus - Diag re-request"); // errh_Info( "Profibus - Diag re-request");
// dp_get_slave_diag(hDevice); // dp_get_slave_diag(hDevice);
} }
...@@ -1445,7 +1560,6 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1445,7 +1560,6 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
pwr_sClass_Pb_Profiboard* op; pwr_sClass_Pb_Profiboard* op;
pwr_tUInt16 sts; pwr_tUInt16 sts;
pwr_tStatus status; pwr_tStatus status;
T_PROFI_DEVICE_HANDLE* hDevice;
io_sAgentLocal* local; io_sAgentLocal* local;
pwr_tCid cid; pwr_tCid cid;
...@@ -1459,7 +1573,7 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1459,7 +1573,7 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
char name[196]; char name[196];
struct timespec rqtp = { 0, 20000000 }; // 20 ms struct timespec rqtp = {0, 20000000}; // 20 ms
int retry; int retry;
...@@ -1467,13 +1581,12 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1467,13 +1581,12 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
/* Allocate area for local data structure */ /* Allocate area for local data structure */
ap->Local = calloc(1, sizeof(io_sAgentLocal)); ap->Local = calloc(1, sizeof(io_sAgentLocal));
if (!ap->Local) { if (!ap->Local)
{
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, "calloc"); errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, "calloc");
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} }
hDevice = (T_PROFI_DEVICE_HANDLE*)ap->Local;
local = (io_sAgentLocal*)ap->Local; local = (io_sAgentLocal*)ap->Local;
op = (pwr_sClass_Pb_Profiboard*)ap->op; op = (pwr_sClass_Pb_Profiboard*)ap->op;
...@@ -1482,58 +1595,67 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1482,58 +1595,67 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
/* Initialize interface */ /* Initialize interface */
if (ctx->Node->Restarts > 0) { if (ctx->Node->Restarts > 0)
{
nanosleep(&rqtp, NULL); nanosleep(&rqtp, NULL);
} }
errh_Info("Initializing interface for Profibus DP Master %s", ap->Name); errh_Info("Initializing interface for Profibus DP Master %s", ap->Name);
sts = profi_init(hDevice, (unsigned char)op->BusNumber - 1, 0, 0); sts = profi_init((unsigned char)op->BusNumber - 1, 0, 0);
if (sts != E_OK) { if (sts != E_OK)
{
/* Can't open driver */ /* Can't open driver */
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error( errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"ERROR config Profibus DP Master %s - %s", ap->Name, "open device"); "open device");
ctx->Node->EmergBreakTrue = 1; ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE; return IO__ERRDEVICE;
} }
/* If this is not the Profibus I/O process, return */ /* If this is not the Profibus I/O process, return */
if ((op->Process & io_mProcess_Profibus) if ((op->Process & io_mProcess_Profibus) &&
&& (ctx->Process != io_mProcess_Profibus)) { (ctx->Process != io_mProcess_Profibus))
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
errh_Info("Init template I/O agent for Profibus DP Master %s, %d", ap->Name, errh_Info("Init template I/O agent for Profibus DP Master %s, %d", ap->Name,
ctx->Process); ctx->Process);
return IO__SUCCESS; return IO__SUCCESS;
} }
if (ctx->Node->Restarts > 0) { if (ctx->Node->Restarts > 0)
errh_Info( {
"Warm restart - Skipping config of Profibus DP Master %s", ap->Name); errh_Info("Warm restart - Skipping config of Profibus DP Master %s",
ap->Name);
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
// return IO__SUCCESS; // return IO__SUCCESS;
} }
errh_Info("Config of Profibus DP Master %s", ap->Name); errh_Info("Config of Profibus DP Master %s", ap->Name);
if (op->DisableBus != 1) { if (op->DisableBus != 1)
{
ok = FALSE; ok = FALSE;
if (ctx->Node->Restarts == 0) { if (ctx->Node->Restarts == 0)
{
retry = 0; retry = 0;
while (!ok) { while (!ok)
{
op->Status = PB__NOTINIT; op->Status = PB__NOTINIT;
/* Set FMB configuration */ /* Set FMB configuration */
sts = fmb_set_configuration(hDevice, ap); sts = fmb_set_configuration(ap);
if (!sts) { if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"fmb set configuration"); "fmb set configuration");
retry++; retry++;
if (retry < 2) { if (retry < 2)
{
nanosleep(&rqtp, NULL); nanosleep(&rqtp, NULL);
continue; continue;
} }
...@@ -1542,9 +1664,11 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1542,9 +1664,11 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
/* Set DP master parameters */ /* Set DP master parameters */
if (local->dp) { if (local->dp)
sts = dp_init_master(hDevice); {
if (!sts) { sts = dp_init_master();
if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"dp init master"); "dp init master");
...@@ -1554,33 +1678,43 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1554,33 +1678,43 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
/* Download DP bus parameters */ /* Download DP bus parameters */
if (local->dp && !local->fdl) { if (local->dp && !local->fdl)
sts = dp_download_bus(hDevice, op); {
if (!sts) { sts = dp_download_bus(op);
if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"dp download bus"); "dp download bus");
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} }
} else if (!local->dp && local->fdl) { }
sts = fmb_set_busparameter(hDevice, op); else if (!local->dp && local->fdl)
if (!sts) { {
sts = fmb_set_busparameter(op);
if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus FDL Master %s - %s", ap->Name, errh_Error("ERROR config Profibus FDL Master %s - %s", ap->Name,
"fmb set busparam"); "fmb set busparam");
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} else }
else
op->Status = PB__NORMAL; op->Status = PB__NORMAL;
} else { }
sts = fmb_set_busparameter(hDevice, op); else
if (!sts) { {
sts = fmb_set_busparameter(op);
if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus Master %s - %s", ap->Name, errh_Error("ERROR config Profibus Master %s - %s", ap->Name,
"fmb set busparam"); "fmb set busparam");
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} }
sts = dp_set_busparameter(hDevice, op); sts = dp_set_busparameter(op);
if (!sts) { if (!sts)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"dp set busparam"); "dp set busparam");
...@@ -1594,7 +1728,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1594,7 +1728,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
op->NumberSlaves = 0; op->NumberSlaves = 0;
status = gdh_GetChild(ap->Objid, &slave_objid); status = gdh_GetChild(ap->Objid, &slave_objid);
while (ODD(status)) { while (ODD(status))
{
status = gdh_GetObjectClass(slave_objid, &slave_class); status = gdh_GetObjectClass(slave_objid, &slave_class);
cid = slave_class; cid = slave_class;
...@@ -1603,35 +1738,38 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1603,35 +1738,38 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
; ;
status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop); status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop);
status = gdh_ObjidToName( status = gdh_ObjidToName(slave_objid, (char*)&name, sizeof(name),
slave_objid, (char*)&name, sizeof(name), cdh_mNName); cdh_mNName);
if (cid == pwr_cClass_Pb_DP_Slave) { if (cid == pwr_cClass_Pb_DP_Slave)
{
errh_Info("Download Profibus DP Slave config - %s", name); errh_Info("Download Profibus DP Slave config - %s", name);
status = dp_download_slave(hDevice, (pwr_sClass_Pb_DP_Slave*)sop); status = dp_download_slave((pwr_sClass_Pb_DP_Slave*)sop);
if (!status) { if (!status)
{
errh_Error("ERROR Init Profibus DP slave %s", name); errh_Error("ERROR Init Profibus DP slave %s", name);
} }
op->NumberSlaves++; op->NumberSlaves++;
} }
if (cid == pwr_cClass_Pb_FDL_SAP) { if (cid == pwr_cClass_Pb_FDL_SAP)
{
errh_Info("Download Profibus FDL SAP config - %s", name); errh_Info("Download Profibus FDL SAP config - %s", name);
if (!((pwr_sClass_Pb_FDL_SAP*)sop)->Responder) if (!((pwr_sClass_Pb_FDL_SAP*)sop)->Responder)
status = fdlif_sap_activate_req( status = fdlif_sap_activate_req((pwr_sClass_Pb_FDL_SAP*)sop);
hDevice, (pwr_sClass_Pb_FDL_SAP*)sop);
else else
status = fdlif_rsap_activate_req( status = fdlif_rsap_activate_req((pwr_sClass_Pb_FDL_SAP*)sop);
hDevice, (pwr_sClass_Pb_FDL_SAP*)sop);
if (!status) { if (!status)
{
((pwr_sClass_Pb_FDL_SAP*)sop)->Status = PB__INITFAIL; ((pwr_sClass_Pb_FDL_SAP*)sop)->Status = PB__INITFAIL;
errh_Error("ERROR Init Profibus FDL SAP %s", name); errh_Error("ERROR Init Profibus FDL SAP %s", name);
} else }
else
((pwr_sClass_Pb_FDL_SAP*)sop)->Status = PB__NORMAL; ((pwr_sClass_Pb_FDL_SAP*)sop)->Status = PB__NORMAL;
} }
...@@ -1642,7 +1780,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1642,7 +1780,8 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
status = gdh_GetChild(ap->Objid, &slave_objid); status = gdh_GetChild(ap->Objid, &slave_objid);
while (ODD(status)) { while (ODD(status))
{
status = gdh_GetObjectClass(slave_objid, &slave_class); status = gdh_GetObjectClass(slave_objid, &slave_class);
cid = slave_class; cid = slave_class;
...@@ -1650,18 +1789,21 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1650,18 +1789,21 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
while (ODD(gdh_GetSuperClass(cid, &cid, pwr_cNOid))) while (ODD(gdh_GetSuperClass(cid, &cid, pwr_cNOid)))
; ;
if (cid == pwr_cClass_Pb_DP_Slave) { if (cid == pwr_cClass_Pb_DP_Slave)
{
status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop); status = gdh_ObjidToPointer(slave_objid, (pwr_tAddress*)&sop);
status = dp_io_offsets(hDevice, sop); status = dp_io_offsets(sop);
} }
status = gdh_GetNextSibling(slave_objid, &slave_objid); status = gdh_GetNextSibling(slave_objid, &slave_objid);
} }
/* Move to STOP mode, this will fix the DPRAM layout */ /* Move to STOP mode, this will fix the DPRAM layout */
if (local->dp) { if (local->dp)
sts = dp_act_param_loc(hDevice, DP_OP_MODE_STOP); {
if (sts != E_OK) { sts = dp_act_param_loc(DP_OP_MODE_STOP);
if (sts != E_OK)
{
op->Status = PB__INITFAIL; op->Status = PB__INITFAIL;
errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name, errh_Error("ERROR config Profibus DP Master %s - %s", ap->Name,
"act param loc to STOPPED"); "act param loc to STOPPED");
...@@ -1684,55 +1826,9 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap) ...@@ -1684,55 +1826,9 @@ static pwr_tStatus IoAgentInit(io_tCtx ctx, io_sAgent* ap)
return IO__ERRINIDEVICE; return IO__ERRINIDEVICE;
} }
} */ } */
} else
op->Status = PB__DISABLED;
return IO__SUCCESS;
}
/*----------------------------------------------------------------------------*\
Swap method for the Pb_profiboard agent
\*----------------------------------------------------------------------------*/
static pwr_tStatus IoAgentSwap(io_tCtx ctx, io_sAgent* ap, io_eEvent event)
{
switch (event) {
case io_eEvent_IoCommSwapInit:
case io_eEvent_IoCommSwap: {
pwr_sClass_Pb_Profiboard* op;
char DeviceName[64];
io_sAgentLocal* local;
if (ap->Local == NULL) {
/* Allocate area for local data structure */
ap->Local = calloc(1, sizeof(io_sAgentLocal));
if (!ap->Local) {
errh_Error(
"ERROR swap init Profibus DP Master %s - %s", ap->Name, "calloc");
return IO__ERRINIDEVICE;
}
local = (io_sAgentLocal*)ap->Local;
errh_Info("Swap init interface for Profibus DP Master %s", ap->Name);
op = (pwr_sClass_Pb_Profiboard*)ap->op;
sprintf(DeviceName, "/dev/pbboard%u", op->BusNumber - 1);
local->hDpsBoardDevice = open(DeviceName, O_RDONLY | O_NONBLOCK);
if (local->hDpsBoardDevice == -1) {
errh_Error(
"ERROR swap init Profibus DP Master %s - %s", ap->Name, "open");
return IO__ERRINIDEVICE;
}
}
break;
}
case io_eEvent_EmergencyBreak:
case io_eEvent_IoCommEmergencyBreak:
IoAgentClose(ctx, ap);
break;
} }
else
op->Status = PB__DISABLED;
return IO__SUCCESS; return IO__SUCCESS;
} }
...@@ -1743,7 +1839,6 @@ static pwr_tStatus IoAgentSwap(io_tCtx ctx, io_sAgent* ap, io_eEvent event) ...@@ -1743,7 +1839,6 @@ static pwr_tStatus IoAgentSwap(io_tCtx ctx, io_sAgent* ap, io_eEvent event)
static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
{ {
io_sAgentLocal* local; io_sAgentLocal* local;
T_PROFI_DEVICE_HANDLE* hDevice;
pwr_sClass_Pb_Profiboard* op; pwr_sClass_Pb_Profiboard* op;
pwr_tUInt16 sts; pwr_tUInt16 sts;
...@@ -1752,18 +1847,19 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1752,18 +1847,19 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
pwr_tUInt16 data_len; pwr_tUInt16 data_len;
io_sRack* slave_list; io_sRack* slave_list;
hDevice = (T_PROFI_DEVICE_HANDLE*)ap->Local;
local = (io_sAgentLocal*)ap->Local; local = (io_sAgentLocal*)ap->Local;
op = (pwr_sClass_Pb_Profiboard*)ap->op; op = (pwr_sClass_Pb_Profiboard*)ap->op;
/* Activate supervision thread, first cycle */ /* Activate supervision thread, first cycle */
if (!local->args.local) { if (!local->args.local)
{
pthread_attr_t attr; pthread_attr_t attr;
pthread_mutexattr_t mutexattr; pthread_mutexattr_t mutexattr;
local->args.local = local; local->args.local = local;
local->args.ap = ap; local->args.ap = ap;
local->args.ctx = ctx;
pthread_mutexattr_init(&mutexattr); pthread_mutexattr_init(&mutexattr);
pthread_mutex_init(&local->mutex, &mutexattr); pthread_mutex_init(&local->mutex, &mutexattr);
...@@ -1777,17 +1873,20 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1777,17 +1873,20 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
/* Iterate over the slaves. */ /* Iterate over the slaves. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
if (((io_sRackLocal*)slave_list->Local)->dp) { {
if (((io_sRackLocal*)slave_list->Local)->dp)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
mp = (pwr_sClass_Pb_Profiboard*)ap->op; mp = (pwr_sClass_Pb_Profiboard*)ap->op;
/* Read process data. */ /* Read process data. */
if (sp->Status == PB__NORMAL && mp->Status == PB__NORMAL if (sp->Status == PB__NORMAL && mp->Status == PB__NORMAL &&
&& sp->DisableSlave != 1 && mp->DisableBus != 1) { sp->DisableSlave != 1 && mp->DisableBus != 1)
{
data_len = sp->BytesOfInput; data_len = sp->BytesOfInput;
sts = profi_get_data(hDevice, ID_DP_SLAVE_IO_IMAGE, sp->OffsetInputs, sts = profi_get_data(ID_DP_SLAVE_IO_IMAGE, sp->OffsetInputs, &data_len,
&data_len, &sp->Inputs); &sp->Inputs);
} }
} }
} }
...@@ -1803,32 +1902,34 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap) ...@@ -1803,32 +1902,34 @@ static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap) static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap)
{ {
io_sAgentLocal* local; io_sAgentLocal* local;
T_PROFI_DEVICE_HANDLE* hDevice;
pwr_tUInt16 sts; pwr_tUInt16 sts;
pwr_sClass_Pb_Profiboard* mp; pwr_sClass_Pb_Profiboard* mp;
pwr_sClass_Pb_DP_Slave* sp; pwr_sClass_Pb_DP_Slave* sp;
io_sRack* slave_list; io_sRack* slave_list;
hDevice = (T_PROFI_DEVICE_HANDLE*)ap->Local;
local = (io_sAgentLocal*)ap->Local; local = (io_sAgentLocal*)ap->Local;
pthread_mutex_lock(&local->mutex); pthread_mutex_lock(&local->mutex);
/* Iterate over the slaves. */ /* Iterate over the slaves. */
for (slave_list = ap->racklist; slave_list != NULL; for (slave_list = ap->racklist; slave_list != NULL;
slave_list = slave_list->next) { slave_list = slave_list->next)
if (((io_sRackLocal*)slave_list->Local)->dp) { {
if (((io_sRackLocal*)slave_list->Local)->dp)
{
sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op; sp = (pwr_sClass_Pb_DP_Slave*)slave_list->op;
mp = (pwr_sClass_Pb_Profiboard*)ap->op; mp = (pwr_sClass_Pb_Profiboard*)ap->op;
// Write the whole I/O output area from local area // Write the whole I/O output area from local area
if ((sp->Status == PB__NORMAL || sp->Status == PB__NOCONN) if ((sp->Status == PB__NORMAL || sp->Status == PB__NOCONN) &&
&& mp->Status == PB__NORMAL && (sp->DisableSlave != 1) mp->Status == PB__NORMAL && (sp->DisableSlave != 1) &&
&& (mp->DisableBus != 1)) { (mp->DisableBus != 1))
if (sp->BytesOfOutput > 0) { {
sts = profi_set_data(hDevice, ID_DP_SLAVE_IO_IMAGE, sp->OffsetOutputs, if (sp->BytesOfOutput > 0)
{
sts = profi_set_data(ID_DP_SLAVE_IO_IMAGE, sp->OffsetOutputs,
sp->BytesOfOutput, &sp->Outputs); sp->BytesOfOutput, &sp->Outputs);
if (sts != E_OK) if (sts != E_OK)
...@@ -1849,7 +1950,6 @@ static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap) ...@@ -1849,7 +1950,6 @@ static pwr_tStatus IoAgentWrite(io_tCtx ctx, io_sAgent* ap)
static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap) static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap)
{ {
io_sAgentLocal* local; io_sAgentLocal* local;
T_PROFI_DEVICE_HANDLE* hDevice;
pwr_tStatus sts = PB_FALSE; pwr_tStatus sts = PB_FALSE;
T_PROFI_SERVICE_DESCR sdb; T_PROFI_SERVICE_DESCR sdb;
...@@ -1867,7 +1967,6 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap) ...@@ -1867,7 +1967,6 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap)
pthread_mutex_lock(&local->mutex); pthread_mutex_lock(&local->mutex);
hDevice = (T_PROFI_DEVICE_HANDLE*)ap->Local;
sdb.comm_ref = 0; sdb.comm_ref = 0;
sdb.layer = DP; sdb.layer = DP;
sdb.service = DP_EXIT_MASTER; sdb.service = DP_EXIT_MASTER;
...@@ -1875,35 +1974,49 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap) ...@@ -1875,35 +1974,49 @@ static pwr_tStatus IoAgentClose(io_tCtx ctx, io_sAgent* ap)
sdb.invoke_id = 0; sdb.invoke_id = 0;
sdb.result = 0; sdb.result = 0;
profi_snd_req_res(hDevice, &sdb, &sdb, PB_FALSE); profi_snd_req_res(&sdb, &sdb, PB_FALSE);
try_profi_rcv_con_ind( try_profi_rcv_con_ind(&con_ind_sdb, con_ind_buffer, &con_ind_buffer_len,
hDevice, &con_ind_sdb, con_ind_buffer, &con_ind_buffer_len, &result); &result);
if ((con_ind_sdb.service == DP_EXIT_MASTER) && (con_ind_sdb.primitive == CON) if ((con_ind_sdb.service == DP_EXIT_MASTER) &&
&& (con_ind_sdb.result == POS)) { (con_ind_sdb.primitive == CON) && (con_ind_sdb.result == POS))
{
sts = PB_TRUE; sts = PB_TRUE;
} }
close(local->hServiceReadDevice); profi_end();
close(local->hServiceWriteDevice);
close(local->hDpDataDevice);
close(local->hDpsInputDataDevice);
close(local->hDpsOutputDataDevice);
close(local->hDpsBoardDevice);
pthread_mutex_unlock(&local->mutex); pthread_mutex_unlock(&local->mutex);
free((char*)local); free((char*)local);
if (ctx->Node->EmergBreakTrue == 1)
errh_Fatal("Emergency break detected shutting down profibus");
return sts; return sts;
} }
static pwr_tStatus IoAgentSwap(io_tCtx ctx, io_sAgent* ap, io_eEvent event)
{
switch (event) {
case io_eEvent_EmergencyBreak:
case io_eEvent_IoCommEmergencyBreak:
IoAgentClose(ctx, ap);
break;
default:
break;
}
return IO__SUCCESS;
}
/*----------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------*\
Every method to be exported to the workbench should be registred here. Every method to be exported to the workbench should be registred here.
\*----------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------*/
pwr_dExport pwr_BindIoMethods(Pb_Profiboard) pwr_dExport pwr_BindIoMethods(Pb_Profiboard) = {
= { pwr_BindIoMethod(IoAgentInit), pwr_BindIoMethod(IoAgentRead), pwr_BindIoMethod(IoAgentInit), pwr_BindIoMethod(IoAgentRead),
pwr_BindIoMethod(IoAgentWrite), pwr_BindIoMethod(IoAgentClose), pwr_BindIoMethod(IoAgentWrite), pwr_BindIoMethod(IoAgentClose),
pwr_BindIoMethod(IoAgentSwap), pwr_NullMethod }; pwr_BindIoMethod(IoAgentSwap), pwr_NullMethod};
...@@ -72,20 +72,23 @@ ...@@ -72,20 +72,23 @@
/* io_sAgentLocal now lives in the respective agent modules. */ /* io_sAgentLocal now lives in the respective agent modules. */
typedef struct _io_sRackLocal { typedef struct _io_sRackLocal
{
unsigned char fdl; unsigned char fdl;
unsigned char dp; unsigned char dp;
unsigned int start_time; unsigned int start_time;
unsigned int start_cnt; unsigned int start_cnt;
} io_sRackLocal; } io_sRackLocal;
typedef struct { typedef struct
{
void* input_area; void* input_area;
void* output_area; void* output_area;
int scancount[IO_MAXCHAN]; int scancount[IO_MAXCHAN];
} io_sCardLocal; } io_sCardLocal;
typedef struct { typedef struct
{
unsigned short invoke_id; unsigned short invoke_id;
unsigned short input_area_size; unsigned short input_area_size;
unsigned short output_area_size; unsigned short output_area_size;
...@@ -95,12 +98,15 @@ typedef struct { ...@@ -95,12 +98,15 @@ typedef struct {
unsigned short float_representation; unsigned short float_representation;
} io_sFDLCardLocal; } io_sFDLCardLocal;
typedef struct _agent_args { typedef struct _agent_args
{
void* local; void* local;
io_sAgent* ap; io_sAgent* ap;
io_tCtx ctx;
} agent_args; } agent_args;
typedef struct { typedef struct
{
int hServiceReadDevice; // Handle for Service device int hServiceReadDevice; // Handle for Service device
int hServiceWriteDevice; // Handle for Service device int hServiceWriteDevice; // Handle for Service device
int hDpDataDevice; // Handle for DP-Data device int hDpDataDevice; // Handle for DP-Data device
......
...@@ -39,7 +39,8 @@ ...@@ -39,7 +39,8 @@
/* rt_io_pn_locals.h -- Profinet io handling locals. */ /* rt_io_pn_locals.h -- Profinet io handling locals. */
typedef struct _io_sPnRackLocal { typedef struct _io_sPnRackLocal
{
unsigned short bytes_of_input; unsigned short bytes_of_input;
unsigned short bytes_of_output; unsigned short bytes_of_output;
unsigned char* inputs; unsigned char* inputs;
...@@ -49,7 +50,8 @@ typedef struct _io_sPnRackLocal { ...@@ -49,7 +50,8 @@ typedef struct _io_sPnRackLocal {
unsigned int start_cnt; unsigned int start_cnt;
} io_sPnRackLocal; } io_sPnRackLocal;
typedef struct _io_sPnCardLocal { typedef struct _io_sPnCardLocal
{
unsigned int input_area_size; unsigned int input_area_size;
unsigned int output_area_size; unsigned int output_area_size;
unsigned char* input_area; unsigned char* input_area;
......
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
/* rt_io_pnak_locals.h -- Profinet io handling locals. */ /* rt_io_pnak_locals.h -- Profinet io handling locals. */
typedef struct _PN_Alarm_Data { typedef struct _PN_Alarm_Data
{
unsigned short alarm_type; unsigned short alarm_type;
unsigned short alarm_prio; unsigned short alarm_prio;
unsigned short rem_alarms; unsigned short rem_alarms;
...@@ -58,12 +59,10 @@ typedef struct _PN_Alarm_Data { ...@@ -58,12 +59,10 @@ typedef struct _PN_Alarm_Data {
unsigned char* data; unsigned char* data;
} PN_Alarm_Data; } PN_Alarm_Data;
class PnApiData { class PnApiData
{
public: public:
PnApiData() PnApiData() : api(0) {}
: api(0)
{
}
unsigned int api; unsigned int api;
std::vector<unsigned int> module_index; std::vector<unsigned int> module_index;
...@@ -73,14 +72,12 @@ public: ...@@ -73,14 +72,12 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class PnIOCRData { class PnIOCRData
{
public: public:
PnIOCRData() PnIOCRData()
: type(0) : type(0), number_modules(0), identifier(0), io_data_length(0),
, number_modules(0) clean_io_data_length(0)
, identifier(0)
, io_data_length(0)
, clean_io_data_length(0)
{ {
} }
...@@ -97,16 +94,12 @@ public: ...@@ -97,16 +94,12 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class PnSubmoduleData { class PnSubmoduleData
{
public: public:
PnSubmoduleData() PnSubmoduleData()
: subslot_number(0) : subslot_number(0), subslot_idx(0), type(0), state(0), ident_number(0),
, subslot_idx(0) phys_ident_number(0), api(0)
, type(0)
, state(0)
, ident_number(0)
, phys_ident_number(0)
, api(0)
{ {
} }
...@@ -133,14 +126,12 @@ public: ...@@ -133,14 +126,12 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class PnModuleData { class PnModuleData
{
public: public:
PnModuleData() PnModuleData()
: slot_number(0) : slot_number(0), slot_idx(0), state(0), ident_number(0),
, slot_idx(0) phys_ident_number(0)
, state(0)
, ident_number(0)
, phys_ident_number(0)
{ {
} }
...@@ -161,13 +152,11 @@ public: ...@@ -161,13 +152,11 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class PnDeviceData { class PnDeviceData
{
public: public:
PnDeviceData() PnDeviceData()
: device_ref(0) : device_ref(0), alarm_ref(0), device_state(0), no_diff_modules(0)
, alarm_ref(0)
, device_state(0)
, no_diff_modules(0)
{ {
memset(&alarm_data, 0, sizeof(PN_Alarm_Data)); memset(&alarm_data, 0, sizeof(PN_Alarm_Data));
} }
...@@ -182,10 +171,7 @@ public: ...@@ -182,10 +171,7 @@ public:
std::vector<PnModuleData*> module_data; std::vector<PnModuleData*> module_data;
std::vector<PnIOCRData*> iocr_data; std::vector<PnIOCRData*> iocr_data;
~PnDeviceData() ~PnDeviceData() { device_reset(); }
{
device_reset();
}
void device_reset() void device_reset()
{ {
for (unsigned int i = 0; i < module_data.size(); i++) for (unsigned int i = 0; i < module_data.size(); i++)
...@@ -201,7 +187,8 @@ public: ...@@ -201,7 +187,8 @@ public:
int paste_slot(unsigned int slot_idx); int paste_slot(unsigned int slot_idx);
}; };
class PnDeviceInfo { class PnDeviceInfo
{
public: public:
PnDeviceInfo() {} PnDeviceInfo() {}
unsigned char ipaddress[4]; unsigned char ipaddress[4];
...@@ -212,12 +199,14 @@ public: ...@@ -212,12 +199,14 @@ public:
int deviceid; int deviceid;
}; };
typedef struct _agent_args { typedef struct _agent_args
{
void* local; void* local;
io_sAgent* ap; io_sAgent* ap;
} agent_args; } agent_args;
class io_sAgentLocal { class io_sAgentLocal
{
public: public:
io_sAgentLocal() {} io_sAgentLocal() {}
......
...@@ -43,15 +43,12 @@ ...@@ -43,15 +43,12 @@
#include "co_xml_parser.h" #include "co_xml_parser.h"
class GsdmlDataRecord { class GsdmlDataRecord
{
public: public:
GsdmlDataRecord() GsdmlDataRecord()
: record_idx(0) : record_idx(0), data(0), data_reversed_endianess(0), data_length(0),
, data(0) index(0), transfer_sequence(0)
, data_reversed_endianess(0)
, data_length(0)
, index(0)
, transfer_sequence(0)
{ {
} }
...@@ -74,14 +71,11 @@ public: ...@@ -74,14 +71,11 @@ public:
int print(std::ofstream& fp, bool reverse_endianess); int print(std::ofstream& fp, bool reverse_endianess);
}; };
class GsdmlIOCRData { class GsdmlIOCRData
{
public: public:
GsdmlIOCRData() GsdmlIOCRData()
: type(0) : type(0), properties(0), send_clock_factor(0), phase(0), api(0)
, properties(0)
, send_clock_factor(0)
, phase(0)
, api(0)
{ {
} }
...@@ -95,16 +89,13 @@ public: ...@@ -95,16 +89,13 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class GsdmlSubslotData { class GsdmlSubslotData
{
public: public:
GsdmlSubslotData() GsdmlSubslotData()
: subslot_number(0) : subslot_number(0), subslot_idx(0), submodule_enum_number(0),
, subslot_idx(0) submodule_ident_number(0), api(0), io_input_length(0),
, submodule_enum_number(0) io_output_length(0)
, submodule_ident_number(0)
, api(0)
, io_input_length(0)
, io_output_length(0)
{ {
} }
...@@ -123,24 +114,22 @@ public: ...@@ -123,24 +114,22 @@ public:
delete data_record[i]; delete data_record[i];
} }
GsdmlSubslotData(const GsdmlSubslotData& x) GsdmlSubslotData(const GsdmlSubslotData& x)
: subslot_number(x.subslot_number) : subslot_number(x.subslot_number), subslot_idx(x.subslot_idx)
, subslot_idx(x.subslot_idx) {
for (unsigned int i = 0; i < x.data_record.size(); i++)
{ {
for (unsigned int i = 0; i < x.data_record.size(); i++) {
data_record.push_back(new GsdmlDataRecord(*x.data_record[i])); data_record.push_back(new GsdmlDataRecord(*x.data_record[i]));
} }
} }
int print(std::ofstream& fp, bool reverse_endianess); int print(std::ofstream& fp, bool reverse_endianess);
}; };
class GsdmlSlotData { class GsdmlSlotData
{
public: public:
GsdmlSlotData() GsdmlSlotData()
: module_enum_number(0) : module_enum_number(0), module_class(0), module_oid(pwr_cNOid),
, module_class(0) slot_number(0), slot_idx(0)
, module_oid(pwr_cNOid)
, slot_number(0)
, slot_idx(0)
{ {
module_text[0] = 0; module_text[0] = 0;
} }
...@@ -165,20 +154,20 @@ public: ...@@ -165,20 +154,20 @@ public:
subslot_data.clear(); subslot_data.clear();
} }
GsdmlSlotData(const GsdmlSlotData& x) GsdmlSlotData(const GsdmlSlotData& x)
: module_enum_number(x.module_enum_number) : module_enum_number(x.module_enum_number), module_class(x.module_class),
, module_class(x.module_class) module_oid(pwr_cNObjid), slot_number(x.slot_number),
, module_oid(pwr_cNObjid) slot_idx(x.slot_idx)
, slot_number(x.slot_number) {
, slot_idx(x.slot_idx) for (unsigned int i = 0; i < x.subslot_data.size(); i++)
{ {
for (unsigned int i = 0; i < x.subslot_data.size(); i++) {
subslot_data.push_back(new GsdmlSubslotData(*x.subslot_data[i])); subslot_data.push_back(new GsdmlSubslotData(*x.subslot_data[i]));
} }
} }
int print(std::ofstream& fp, bool reverse_endianess); int print(std::ofstream& fp, bool reverse_endianess);
}; };
class GsdmlChannelDiag { class GsdmlChannelDiag
{
public: public:
GsdmlChannelDiag(); GsdmlChannelDiag();
unsigned short error_type; unsigned short error_type;
...@@ -189,15 +178,12 @@ public: ...@@ -189,15 +178,12 @@ public:
int print(std::ofstream& fp); int print(std::ofstream& fp);
}; };
class GsdmlDeviceData { class GsdmlDeviceData
{
public: public:
GsdmlDeviceData() GsdmlDeviceData()
: device_num(0) : device_num(0), vendor_id(0), device_id(0), byte_order(0),
, vendor_id(0) read_data_is_native_ordered(1), instance(0)
, device_id(0)
, byte_order(0)
, read_data_is_native_ordered(1)
, instance(0)
{ {
device_name[0] = 0; device_name[0] = 0;
ip_address[0] = 0; ip_address[0] = 0;
...@@ -254,13 +240,10 @@ public: ...@@ -254,13 +240,10 @@ public:
int get_value(const char* attr, char* buf, int bufsize); int get_value(const char* attr, char* buf, int bufsize);
}; };
class GsdmlDataReader : public co_xml_interpreter { class GsdmlDataReader : public co_xml_interpreter
{
public: public:
GsdmlDataReader(GsdmlDeviceData* d) GsdmlDataReader(GsdmlDeviceData* d) : data(d), new_filename(0) {}
: data(d)
, new_filename(0)
{
}
int tag(const char* name); int tag(const char* name);
int metatag(const char* name); int metatag(const char* name);
int tag_end(const char* name); int tag_end(const char* name);
......
...@@ -47,24 +47,24 @@ ...@@ -47,24 +47,24 @@
#define PN_MAX_MANU_SPEC_DIAGS 200 #define PN_MAX_MANU_SPEC_DIAGS 200
void pack_set_ip_settings_req( void pack_set_ip_settings_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
T_PNAK_SERVICE_REQ_RES* ServiceReqRes, PnDeviceInfo* dev_info); PnDeviceInfo* dev_info);
void pack_set_device_name_req( void pack_set_device_name_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
T_PNAK_SERVICE_REQ_RES* ServiceReqRes, PnDeviceInfo* dev_info); PnDeviceInfo* dev_info);
void pack_set_identification_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes); void pack_set_identification_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes);
void pack_get_device_state_req( void pack_get_device_state_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
T_PNAK_SERVICE_REQ_RES* ServiceReqRes, unsigned short device_ref); unsigned short device_ref);
void pack_write_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes, void pack_write_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
unsigned short device_ref, pwr_sClass_PnWriteReq* wr_req); unsigned short device_ref, pwr_sClass_PnWriteReq* wr_req);
void pack_get_los_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes); void pack_get_los_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes);
void pack_get_alarm_req( void pack_get_alarm_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
T_PNAK_SERVICE_REQ_RES* ServiceReqRes, unsigned short ref); unsigned short ref);
void pack_alarm_ack_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes, void pack_alarm_ack_req(T_PNAK_SERVICE_REQ_RES* ServiceReqRes,
unsigned short ref, unsigned short prio); unsigned short ref, unsigned short prio);
...@@ -76,13 +76,13 @@ int unpack_write_con(T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local); ...@@ -76,13 +76,13 @@ int unpack_write_con(T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local);
int unpack_get_los_con(T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local); int unpack_get_los_con(T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local);
int unpack_get_alarm_con( int unpack_get_alarm_con(T_PNAK_SERVICE_DESCRIPTION* pSdb,
T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local, io_sAgent* ap); io_sAgentLocal* local, io_sAgent* ap);
int unpack_get_device_state_con( int unpack_get_device_state_con(T_PNAK_SERVICE_DESCRIPTION* pSdb,
T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local, io_sAgent* ap); io_sAgentLocal* local, io_sAgent* ap);
int unpack_download_con( int unpack_download_con(T_PNAK_SERVICE_DESCRIPTION* pSdb,
T_PNAK_SERVICE_DESCRIPTION* pSdb, io_sAgentLocal* local); io_sAgentLocal* local);
int handle_service_con(io_sAgentLocal* local, io_sAgent* ap); int handle_service_con(io_sAgentLocal* local, io_sAgent* ap);
......
...@@ -174,7 +174,8 @@ typedef unsigned short T_PNAK_EXCEPTION_SOURCE; ...@@ -174,7 +174,8 @@ typedef unsigned short T_PNAK_EXCEPTION_SOURCE;
#define PNAK_EXCEPTION_SOURCE_IS_PNAK 1u #define PNAK_EXCEPTION_SOURCE_IS_PNAK 1u
#define PNAK_EXCEPTION_SOURCE_IS_APPL 2u #define PNAK_EXCEPTION_SOURCE_IS_APPL 2u
typedef struct _T_PNAK_EXCEPTION { typedef struct _T_PNAK_EXCEPTION
{
T_PNAK_EXCEPTION_SOURCE Source; T_PNAK_EXCEPTION_SOURCE Source;
unsigned short ChannelId; unsigned short ChannelId;
...@@ -204,7 +205,8 @@ typedef unsigned short T_PNAK_MODE_ID; ...@@ -204,7 +205,8 @@ typedef unsigned short T_PNAK_MODE_ID;
#define PNAK_VERSION_STRING_LENGTH 42 #define PNAK_VERSION_STRING_LENGTH 42
typedef struct _T_PNAK_VERSION { typedef struct _T_PNAK_VERSION
{
unsigned short IfId; unsigned short IfId;
unsigned short HostIfId; unsigned short HostIfId;
unsigned short HostConfigIfId; unsigned short HostConfigIfId;
...@@ -218,7 +220,8 @@ typedef struct _T_PNAK_VERSION { ...@@ -218,7 +220,8 @@ typedef struct _T_PNAK_VERSION {
} PACK_WORD_ALIGNMENT(T_PNAK_VERSION); } PACK_WORD_ALIGNMENT(T_PNAK_VERSION);
typedef struct _T_PNAK_VERSIONS { typedef struct _T_PNAK_VERSIONS
{
T_PNAK_VERSION Firmware; T_PNAK_VERSION Firmware;
T_PNAK_VERSION Pnak; T_PNAK_VERSION Pnak;
...@@ -264,32 +267,31 @@ typedef PN_U32 T_PNAK_WAIT_OBJECT; ...@@ -264,32 +267,31 @@ typedef PN_U32 T_PNAK_WAIT_OBJECT;
#define PNAK_WAIT_TIMEOUT ((T_PNAK_WAIT_OBJECT)0x80000000uL) #define PNAK_WAIT_TIMEOUT ((T_PNAK_WAIT_OBJECT)0x80000000uL)
#define PNAK_WAIT_OBJECTS_SERVICE \ #define PNAK_WAIT_OBJECTS_SERVICE \
(PNAK_WAIT_OBJECT_SERVICE_CON | PNAK_WAIT_OBJECT_SERVICE_IND \ (PNAK_WAIT_OBJECT_SERVICE_CON | PNAK_WAIT_OBJECT_SERVICE_IND | \
| PNAK_WAIT_OBJECT_SERVICE_REQ_RES_HANDLED) PNAK_WAIT_OBJECT_SERVICE_REQ_RES_HANDLED)
#define PNAK_WAIT_OBJECTS_EVENT_IND \ #define PNAK_WAIT_OBJECTS_EVENT_IND \
(PNAK_WAIT_OBJECT_STATE_CHANGED | PNAK_WAIT_OBJECT_ALARM \ (PNAK_WAIT_OBJECT_STATE_CHANGED | PNAK_WAIT_OBJECT_ALARM | \
| PNAK_WAIT_OBJECT_ALARM_ACK | PNAK_WAIT_OBJECT_DEVICE_STATE_CHANGED \ PNAK_WAIT_OBJECT_ALARM_ACK | PNAK_WAIT_OBJECT_DEVICE_STATE_CHANGED | \
| PNAK_WAIT_OBJECT_ETHERNET_STATE_CHANGED | PNAK_WAIT_OBJECT_PTCP \ PNAK_WAIT_OBJECT_ETHERNET_STATE_CHANGED | PNAK_WAIT_OBJECT_PTCP | \
| PNAK_WAIT_OBJECT_MRPD) PNAK_WAIT_OBJECT_MRPD)
#define PNAK_WAIT_OBJECTS_DATA_IND \ #define PNAK_WAIT_OBJECTS_DATA_IND \
(PNAK_WAIT_OBJECT_PROVIDER_DATA_UPDATED \ (PNAK_WAIT_OBJECT_PROVIDER_DATA_UPDATED | \
| PNAK_WAIT_OBJECT_CONSUMER_DATA_CHANGED) PNAK_WAIT_OBJECT_CONSUMER_DATA_CHANGED)
#define PNAK_WAIT_OBJECTS_SOCKET_IND \ #define PNAK_WAIT_OBJECTS_SOCKET_IND \
(PNAK_WAIT_OBJECT_SOCKET_STATE_CHANGED \ (PNAK_WAIT_OBJECT_SOCKET_STATE_CHANGED | \
| PNAK_WAIT_OBJECT_SOCKET_DATA_RECEIVED) PNAK_WAIT_OBJECT_SOCKET_DATA_RECEIVED)
#define PNAK_WAIT_OBJECTS_OTHER \ #define PNAK_WAIT_OBJECTS_OTHER \
(PNAK_WAIT_OBJECT_EXCEPTION | PNAK_WAIT_OBJECT_CHANNEL_CLOSED \ (PNAK_WAIT_OBJECT_EXCEPTION | PNAK_WAIT_OBJECT_CHANNEL_CLOSED | \
| PNAK_WAIT_OBJECT_INTERRUPTED) PNAK_WAIT_OBJECT_INTERRUPTED)
#define PNAK_WAIT_OBJECTS_USER \ #define PNAK_WAIT_OBJECTS_USER \
(PNAK_USER_WAIT_OBJECT_1 | PNAK_USER_WAIT_OBJECT_2 | PNAK_USER_WAIT_OBJECT_3 \ (PNAK_USER_WAIT_OBJECT_1 | PNAK_USER_WAIT_OBJECT_2 | \
| PNAK_USER_WAIT_OBJECT_4 | PNAK_USER_WAIT_OBJECT_5 \ PNAK_USER_WAIT_OBJECT_3 | PNAK_USER_WAIT_OBJECT_4 | \
| PNAK_USER_WAIT_OBJECT_6 | PNAK_USER_WAIT_OBJECT_7 \ PNAK_USER_WAIT_OBJECT_5 | PNAK_USER_WAIT_OBJECT_6 | \
| PNAK_USER_WAIT_OBJECT_8) PNAK_USER_WAIT_OBJECT_7 | PNAK_USER_WAIT_OBJECT_8)
#define PNAK_WAIT_OBJECTS_ALL \ #define PNAK_WAIT_OBJECTS_ALL \
(PNAK_WAIT_OBJECTS_OTHER | PNAK_WAIT_OBJECTS_EVENT_IND \ (PNAK_WAIT_OBJECTS_OTHER | PNAK_WAIT_OBJECTS_EVENT_IND | \
| PNAK_WAIT_OBJECTS_DATA_IND | PNAK_WAIT_OBJECTS_SERVICE \ PNAK_WAIT_OBJECTS_DATA_IND | PNAK_WAIT_OBJECTS_SERVICE | \
| PNAK_WAIT_OBJECTS_SOCKET_IND | PNAK_WAIT_OBJECTS_USER \ PNAK_WAIT_OBJECTS_SOCKET_IND | PNAK_WAIT_OBJECTS_USER | PNAK_WAIT_TIMEOUT)
| PNAK_WAIT_TIMEOUT)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -317,7 +319,8 @@ typedef unsigned char T_PNAK_SERVICE_RESULT; ...@@ -317,7 +319,8 @@ typedef unsigned char T_PNAK_SERVICE_RESULT;
#define PNAK_RESULT_POS (T_PNAK_SERVICE_RESULT)0x00u #define PNAK_RESULT_POS (T_PNAK_SERVICE_RESULT)0x00u
#define PNAK_RESULT_NEG (T_PNAK_SERVICE_RESULT)0x01u #define PNAK_RESULT_NEG (T_PNAK_SERVICE_RESULT)0x01u
typedef struct _T_PNAK_SERVICE_DESCRIPTION { typedef struct _T_PNAK_SERVICE_DESCRIPTION
{
unsigned short DeviceRef; unsigned short DeviceRef;
unsigned char Instance; unsigned char Instance;
...@@ -353,14 +356,16 @@ typedef struct _T_PNAK_SERVICE_DESCRIPTION { ...@@ -353,14 +356,16 @@ typedef struct _T_PNAK_SERVICE_DESCRIPTION {
/*=== SERVICE REQUEST/RESPONSE ==============================================*/ /*=== SERVICE REQUEST/RESPONSE ==============================================*/
typedef struct _T_PNAK_SERVICE_REQ_RES_ENTRY { typedef struct _T_PNAK_SERVICE_REQ_RES_ENTRY
{
unsigned short ServiceOffset; unsigned short ServiceOffset;
} PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_REQ_RES_ENTRY); } PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_REQ_RES_ENTRY);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_SERVICE_REQ_RES { typedef struct _T_PNAK_SERVICE_REQ_RES
{
unsigned short NumberEntries; unsigned short NumberEntries;
T_PNAK_SERVICE_REQ_RES_ENTRY ServiceEntry[PNAK_MAX_NUMBER_REQ_SERVICES]; T_PNAK_SERVICE_REQ_RES_ENTRY ServiceEntry[PNAK_MAX_NUMBER_REQ_SERVICES];
...@@ -370,14 +375,16 @@ typedef struct _T_PNAK_SERVICE_REQ_RES { ...@@ -370,14 +375,16 @@ typedef struct _T_PNAK_SERVICE_REQ_RES {
/*=== SERVICE CONFIRMATION ==================================================*/ /*=== SERVICE CONFIRMATION ==================================================*/
typedef struct _T_PNAK_SERVICE_CON_ENTRY { typedef struct _T_PNAK_SERVICE_CON_ENTRY
{
unsigned short ServiceOffset; unsigned short ServiceOffset;
} PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_CON_ENTRY); } PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_CON_ENTRY);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_SERVICE_CON { typedef struct _T_PNAK_SERVICE_CON
{
unsigned short NumberEntries; unsigned short NumberEntries;
T_PNAK_SERVICE_CON_ENTRY ServiceEntry[PNAK_MAX_NUMBER_CON_SERVICES]; T_PNAK_SERVICE_CON_ENTRY ServiceEntry[PNAK_MAX_NUMBER_CON_SERVICES];
...@@ -387,14 +394,16 @@ typedef struct _T_PNAK_SERVICE_CON { ...@@ -387,14 +394,16 @@ typedef struct _T_PNAK_SERVICE_CON {
/*=== SERVICE INDICATION ====================================================*/ /*=== SERVICE INDICATION ====================================================*/
typedef struct _T_PNAK_SERVICE_IND_ENTRY { typedef struct _T_PNAK_SERVICE_IND_ENTRY
{
unsigned short ServiceOffset; unsigned short ServiceOffset;
} PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_IND_ENTRY); } PACK_WORD_ALIGNMENT(T_PNAK_SERVICE_IND_ENTRY);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_SERVICE_IND { typedef struct _T_PNAK_SERVICE_IND
{
unsigned short NumberEntries; unsigned short NumberEntries;
T_PNAK_SERVICE_IND_ENTRY ServiceEntry[PNAK_MAX_NUMBER_IND_SERVICES]; T_PNAK_SERVICE_IND_ENTRY ServiceEntry[PNAK_MAX_NUMBER_IND_SERVICES];
...@@ -413,14 +422,16 @@ typedef unsigned short T_PNAK_MODE; ...@@ -413,14 +422,16 @@ typedef unsigned short T_PNAK_MODE;
/*=== EVENT REQUEST ==========================================================*/ /*=== EVENT REQUEST ==========================================================*/
typedef struct _T_PNAK_EVENT_SET_MODE { typedef struct _T_PNAK_EVENT_SET_MODE
{
T_PNAK_MODE Mode; T_PNAK_MODE Mode;
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_SET_MODE); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_SET_MODE);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_EVENT_SET_DEVICE_STATE { typedef struct _T_PNAK_EVENT_SET_DEVICE_STATE
{
T_BITSET_256 ActivateDeviceReference; T_BITSET_256 ActivateDeviceReference;
T_BITSET_256 DeactivateDeviceReference; T_BITSET_256 DeactivateDeviceReference;
...@@ -444,7 +455,8 @@ typedef enum _T_PNAK_STATE { ...@@ -444,7 +455,8 @@ typedef enum _T_PNAK_STATE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_EVENT_STATE { typedef struct _T_PNAK_EVENT_STATE
{
T_PNAK_MODE Mode; T_PNAK_MODE Mode;
T_PNAK_STATE State; T_PNAK_STATE State;
...@@ -452,14 +464,16 @@ typedef struct _T_PNAK_EVENT_STATE { ...@@ -452,14 +464,16 @@ typedef struct _T_PNAK_EVENT_STATE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_EVENT_ALARM { typedef struct _T_PNAK_EVENT_ALARM
{
T_BITSET_256 DeviceReference; T_BITSET_256 DeviceReference;
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_ALARM); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_ALARM);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_EVENT_ALARM_ACK { typedef struct _T_PNAK_EVENT_ALARM_ACK
{
T_BITSET_256 DeviceReference; T_BITSET_256 DeviceReference;
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_ALARM_ACK); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_ALARM_ACK);
...@@ -475,16 +489,16 @@ typedef struct _T_PNAK_EVENT_ALARM_ACK { ...@@ -475,16 +489,16 @@ typedef struct _T_PNAK_EVENT_ALARM_ACK {
#define PNAK_DEVICE_STATE_CONTROL_ERROR 0x40u #define PNAK_DEVICE_STATE_CONTROL_ERROR 0x40u
#define PNAK_DEVICE_STATE_CLOSE_PENDING 0x80u #define PNAK_DEVICE_STATE_CLOSE_PENDING 0x80u
#define PNAK_DEVICE_STATE_MASK \ #define PNAK_DEVICE_STATE_MASK \
(PNAK_DEVICE_STATE_DEACTIVATED | PNAK_DEVICE_STATE_FIND_DEVICE \ (PNAK_DEVICE_STATE_DEACTIVATED | PNAK_DEVICE_STATE_FIND_DEVICE | \
| PNAK_DEVICE_STATE_CONNECTION_ESTABLISHMENT \ PNAK_DEVICE_STATE_CONNECTION_ESTABLISHMENT | PNAK_DEVICE_STATE_CONNECTED)
| PNAK_DEVICE_STATE_CONNECTED)
#define PNAK_DEVICE_STATE_MASK_CONNECTING \ #define PNAK_DEVICE_STATE_MASK_CONNECTING \
(PNAK_DEVICE_STATE_FIND_DEVICE | PNAK_DEVICE_STATE_CONNECTION_ESTABLISHMENT) (PNAK_DEVICE_STATE_FIND_DEVICE | PNAK_DEVICE_STATE_CONNECTION_ESTABLISHMENT)
#define PNAK_DEVICE_STATE_ERROR_MASK \ #define PNAK_DEVICE_STATE_ERROR_MASK \
(PNAK_DEVICE_STATE_CONNECT_ERROR | PNAK_DEVICE_STATE_WRITE_ERROR \ (PNAK_DEVICE_STATE_CONNECT_ERROR | PNAK_DEVICE_STATE_WRITE_ERROR | \
| PNAK_DEVICE_STATE_CONTROL_ERROR) PNAK_DEVICE_STATE_CONTROL_ERROR)
typedef struct _T_PNAK_EVENT_DEVICE_STATE { typedef struct _T_PNAK_EVENT_DEVICE_STATE
{
unsigned char State[MAX_NUMBER_SUPPORTED_DEVICES]; unsigned char State[MAX_NUMBER_SUPPORTED_DEVICES];
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_DEVICE_STATE); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_DEVICE_STATE);
...@@ -500,12 +514,14 @@ typedef struct _T_PNAK_EVENT_DEVICE_STATE { ...@@ -500,12 +514,14 @@ typedef struct _T_PNAK_EVENT_DEVICE_STATE {
#define PNAK_MRPD_MISSING_APPEARS 0x8000u #define PNAK_MRPD_MISSING_APPEARS 0x8000u
#define PNAK_MRPD_MISSING_DISAPPEARS 0x0000u #define PNAK_MRPD_MISSING_DISAPPEARS 0x0000u
typedef struct _T_PNAK_EVENT_MRPD_IOCR { typedef struct _T_PNAK_EVENT_MRPD_IOCR
{
PN_U16 FrameId[PN_SERVICE_DOWNLOAD_MAX_NUMBER_IOCRS]; PN_U16 FrameId[PN_SERVICE_DOWNLOAD_MAX_NUMBER_IOCRS];
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_MRPD_IOCR); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_MRPD_IOCR);
typedef struct _T_PNAK_EVENT_MRPD { typedef struct _T_PNAK_EVENT_MRPD
{
T_PNAK_EVENT_MRPD_IOCR AR[MAX_NUMBER_CMDEV_CONNECTIONS]; T_PNAK_EVENT_MRPD_IOCR AR[MAX_NUMBER_CMDEV_CONNECTIONS];
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_MRPD); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_MRPD);
...@@ -520,13 +536,14 @@ typedef struct _T_PNAK_EVENT_MRPD { ...@@ -520,13 +536,14 @@ typedef struct _T_PNAK_EVENT_MRPD {
#define PNAK_EVENT_PTCP 0x00000020uL #define PNAK_EVENT_PTCP 0x00000020uL
#define PNAK_EVENT_MRPD 0x00000040uL #define PNAK_EVENT_MRPD 0x00000040uL
#define PNAK_EVENT_MASK \ #define PNAK_EVENT_MASK \
(PNAK_EVENT_STATE_CHANGED | PNAK_EVENT_DEVICE_STATE_CHANGED \ (PNAK_EVENT_STATE_CHANGED | PNAK_EVENT_DEVICE_STATE_CHANGED | \
| PNAK_EVENT_ALARM | PNAK_EVENT_ALARM_ACK \ PNAK_EVENT_ALARM | PNAK_EVENT_ALARM_ACK | \
| PNAK_EVENT_ETHERNET_STATE_CHANGED | PNAK_EVENT_PTCP | PNAK_EVENT_MRPD) PNAK_EVENT_ETHERNET_STATE_CHANGED | PNAK_EVENT_PTCP | PNAK_EVENT_MRPD)
typedef PN_U32 T_PNAK_EVENT_REG; typedef PN_U32 T_PNAK_EVENT_REG;
typedef struct _T_PNAK_EVENT_IND_MASK { typedef struct _T_PNAK_EVENT_IND_MASK
{
T_PNAK_EVENT_REG EventMaskReg; T_PNAK_EVENT_REG EventMaskReg;
} PACK_WORD_ALIGNMENT(T_PNAK_EVENT_IND_MASK); } PACK_WORD_ALIGNMENT(T_PNAK_EVENT_IND_MASK);
...@@ -553,7 +570,8 @@ STATISTIC INTERFACE ...@@ -553,7 +570,8 @@ STATISTIC INTERFACE
#define PNIO_STATUS_ENCODING_LITTLE_ENDIAN 0x10u #define PNIO_STATUS_ENCODING_LITTLE_ENDIAN 0x10u
#define PNIO_STATUS_ENCODING_MASK 0xF0u #define PNIO_STATUS_ENCODING_MASK 0xF0u
typedef struct _T_PNAK_CONNECTION_STATISTIC { typedef struct _T_PNAK_CONNECTION_STATISTIC
{
PN_U32 Coding; PN_U32 Coding;
PN_U8 Encoding; PN_U8 Encoding;
...@@ -563,7 +581,8 @@ typedef struct _T_PNAK_CONNECTION_STATISTIC { ...@@ -563,7 +581,8 @@ typedef struct _T_PNAK_CONNECTION_STATISTIC {
} T_PNAK_CONNECTION_STATISTIC; } T_PNAK_CONNECTION_STATISTIC;
typedef struct _T_PNAK_CMCTL_STATISTIC { typedef struct _T_PNAK_CMCTL_STATISTIC
{
PN_U32 NumberDevicesInStartup; PN_U32 NumberDevicesInStartup;
PN_U32 NumberDevicesConnected; PN_U32 NumberDevicesConnected;
...@@ -576,7 +595,8 @@ typedef struct _T_PNAK_CMCTL_STATISTIC { ...@@ -576,7 +595,8 @@ typedef struct _T_PNAK_CMCTL_STATISTIC {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_CMDEV_STATISTIC { typedef struct _T_PNAK_CMDEV_STATISTIC
{
T_PNAK_CONNECTION_STATISTIC Cmdev[MAX_NUMBER_CMDEV_CONNECTIONS]; T_PNAK_CONNECTION_STATISTIC Cmdev[MAX_NUMBER_CMDEV_CONNECTIONS];
} T_PNAK_CMDEV_STATISTIC; } T_PNAK_CMDEV_STATISTIC;
...@@ -587,14 +607,16 @@ DATA INTERFACE ...@@ -587,14 +607,16 @@ DATA INTERFACE
/*=== DATA INDICATION =======================================================*/ /*=== DATA INDICATION =======================================================*/
typedef struct _T_PNAK_DATA_CONSUMER_DATA_CHANGED { typedef struct _T_PNAK_DATA_CONSUMER_DATA_CHANGED
{
T_BITSET_256 DeviceReference; T_BITSET_256 DeviceReference;
} PACK_WORD_ALIGNMENT(T_PNAK_DATA_CONSUMER_DATA_CHANGED); } PACK_WORD_ALIGNMENT(T_PNAK_DATA_CONSUMER_DATA_CHANGED);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PNAK_DATA_PROVIDER_DATA_UPDATED { typedef struct _T_PNAK_DATA_PROVIDER_DATA_UPDATED
{
T_BITSET_256 DeviceReference; T_BITSET_256 DeviceReference;
} PACK_WORD_ALIGNMENT(T_PNAK_DATA_PROVIDER_DATA_UPDATED); } PACK_WORD_ALIGNMENT(T_PNAK_DATA_PROVIDER_DATA_UPDATED);
...@@ -607,7 +629,8 @@ typedef struct _T_PNAK_DATA_PROVIDER_DATA_UPDATED { ...@@ -607,7 +629,8 @@ typedef struct _T_PNAK_DATA_PROVIDER_DATA_UPDATED {
typedef PN_U32 T_PNAK_DATA_EVENT_REG; typedef PN_U32 T_PNAK_DATA_EVENT_REG;
typedef struct _T_PNAK_DATA_IND_MASK { typedef struct _T_PNAK_DATA_IND_MASK
{
T_PNAK_DATA_EVENT_REG EventMaskReg; T_PNAK_DATA_EVENT_REG EventMaskReg;
} PACK_WORD_ALIGNMENT(T_PNAK_DATA_IND_MASK); } PACK_WORD_ALIGNMENT(T_PNAK_DATA_IND_MASK);
...@@ -645,62 +668,69 @@ extern T_PNAK_RESULT pnak_stop_stack(unsigned short); ...@@ -645,62 +668,69 @@ extern T_PNAK_RESULT pnak_stop_stack(unsigned short);
/*--- General interface functions -------------------------------------------*/ /*--- General interface functions -------------------------------------------*/
extern T_PNAK_RESULT pnak_wait_for_multiple_objects( extern T_PNAK_RESULT pnak_wait_for_multiple_objects(unsigned short,
unsigned short, T_PNAK_WAIT_OBJECT*, T_PNAK_TIMEOUT); T_PNAK_WAIT_OBJECT*,
extern T_PNAK_RESULT pnak_set_multiple_objects( T_PNAK_TIMEOUT);
unsigned short, const T_PNAK_WAIT_OBJECT); extern T_PNAK_RESULT pnak_set_multiple_objects(unsigned short,
extern T_PNAK_RESULT pnak_mask_multiple_objects( const T_PNAK_WAIT_OBJECT);
unsigned short, const T_PNAK_WAIT_OBJECT); extern T_PNAK_RESULT pnak_mask_multiple_objects(unsigned short,
const T_PNAK_WAIT_OBJECT);
extern T_PNAK_RESULT pnak_get_exception(unsigned short, T_PNAK_EXCEPTION*); extern T_PNAK_RESULT pnak_get_exception(unsigned short, T_PNAK_EXCEPTION*);
extern T_PNAK_RESULT pnak_get_version(unsigned short, T_PNAK_VERSIONS*); extern T_PNAK_RESULT pnak_get_version(unsigned short, T_PNAK_VERSIONS*);
extern T_PNAK_RESULT pnak_snmp_get_data(unsigned short, T_PNAK_OID*, void*, extern T_PNAK_RESULT pnak_snmp_get_data(unsigned short, T_PNAK_OID*, void*,
PN_U32*, PN_U32*, unsigned char, PN_BOOL); PN_U32*, PN_U32*, unsigned char,
extern T_PNAK_RESULT pnak_snmp_check_data( PN_BOOL);
unsigned short, T_PNAK_OID*, void*, PN_U32, PN_U32, unsigned char); extern T_PNAK_RESULT pnak_snmp_check_data(unsigned short, T_PNAK_OID*, void*,
extern T_PNAK_RESULT pnak_snmp_set_data( PN_U32, PN_U32, unsigned char);
unsigned short, T_PNAK_OID*, void*, PN_U32, PN_U32); extern T_PNAK_RESULT pnak_snmp_set_data(unsigned short, T_PNAK_OID*, void*,
PN_U32, PN_U32);
extern T_PNAK_RESULT pnak_retrigger_watchdog(unsigned short, PN_U32); extern T_PNAK_RESULT pnak_retrigger_watchdog(unsigned short, PN_U32);
/*--- Service interface functions -------------------------------------------*/ /*--- Service interface functions -------------------------------------------*/
extern T_PNAK_RESULT pnak_limit_number_parallel_services( extern T_PNAK_RESULT pnak_limit_number_parallel_services(unsigned short,
unsigned short, unsigned short, unsigned short); unsigned short,
unsigned short);
extern T_PNAK_RESULT pnak_send_service_req_res( extern T_PNAK_RESULT pnak_send_service_req_res(unsigned short,
unsigned short, const T_PNAK_SERVICE_REQ_RES*); const T_PNAK_SERVICE_REQ_RES*);
extern T_PNAK_RESULT pnak_get_service_ind(unsigned short, T_PNAK_SERVICE_IND*); extern T_PNAK_RESULT pnak_get_service_ind(unsigned short, T_PNAK_SERVICE_IND*);
extern T_PNAK_RESULT pnak_get_service_con(unsigned short, T_PNAK_SERVICE_CON*); extern T_PNAK_RESULT pnak_get_service_con(unsigned short, T_PNAK_SERVICE_CON*);
/*--- Event interface functions ---------------------------------------------*/ /*--- Event interface functions ---------------------------------------------*/
extern T_PNAK_RESULT pnak_set_mode( extern T_PNAK_RESULT pnak_set_mode(unsigned short,
unsigned short, const T_PNAK_EVENT_SET_MODE*); const T_PNAK_EVENT_SET_MODE*);
extern T_PNAK_RESULT pnak_set_device_state( extern T_PNAK_RESULT
unsigned short, const T_PNAK_EVENT_SET_DEVICE_STATE*); pnak_set_device_state(unsigned short, const T_PNAK_EVENT_SET_DEVICE_STATE*);
extern T_PNAK_RESULT pnak_get_state(unsigned short, T_PNAK_EVENT_STATE*); extern T_PNAK_RESULT pnak_get_state(unsigned short, T_PNAK_EVENT_STATE*);
extern T_PNAK_RESULT pnak_get_device_state_ind( extern T_PNAK_RESULT pnak_get_device_state_ind(unsigned short,
unsigned short, T_PNAK_EVENT_DEVICE_STATE*); T_PNAK_EVENT_DEVICE_STATE*);
extern T_PNAK_RESULT pnak_get_alarm_ind(unsigned short, T_PNAK_EVENT_ALARM*); extern T_PNAK_RESULT pnak_get_alarm_ind(unsigned short, T_PNAK_EVENT_ALARM*);
extern T_PNAK_RESULT pnak_get_alarm_ack_ind( extern T_PNAK_RESULT pnak_get_alarm_ack_ind(unsigned short,
unsigned short, T_PNAK_EVENT_ALARM_ACK*); T_PNAK_EVENT_ALARM_ACK*);
extern T_PNAK_RESULT pnak_get_ptcp_ind(unsigned short, PN_U32*); extern T_PNAK_RESULT pnak_get_ptcp_ind(unsigned short, PN_U32*);
extern T_PNAK_RESULT pnak_get_mrpd_ind(unsigned short, T_PNAK_EVENT_MRPD*); extern T_PNAK_RESULT pnak_get_mrpd_ind(unsigned short, T_PNAK_EVENT_MRPD*);
/*--- Data interface functions ----------------------------------------------*/ /*--- Data interface functions ----------------------------------------------*/
extern T_PNAK_RESULT pnak_set_iocr_data(unsigned short, unsigned short, extern T_PNAK_RESULT pnak_set_iocr_data(unsigned short, unsigned short,
const unsigned char*, unsigned short, unsigned char); const unsigned char*, unsigned short,
unsigned char);
extern T_PNAK_RESULT pnak_get_iocr_data(unsigned short, unsigned short, extern T_PNAK_RESULT pnak_get_iocr_data(unsigned short, unsigned short,
unsigned char*, unsigned short*, unsigned char*, unsigned char*); unsigned char*, unsigned short*,
extern T_PNAK_RESULT pnak_get_consumer_data_changed_ind( unsigned char*, unsigned char*);
unsigned short, T_PNAK_DATA_CONSUMER_DATA_CHANGED*); extern T_PNAK_RESULT
extern T_PNAK_RESULT pnak_get_provider_data_updated( pnak_get_consumer_data_changed_ind(unsigned short,
unsigned short, T_PNAK_DATA_PROVIDER_DATA_UPDATED*); T_PNAK_DATA_CONSUMER_DATA_CHANGED*);
extern T_PNAK_RESULT
pnak_get_provider_data_updated(unsigned short,
T_PNAK_DATA_PROVIDER_DATA_UPDATED*);
/*============================================================================= /*=============================================================================
CALLBACK INTERFACE CALLBACK INTERFACE
...@@ -710,36 +740,40 @@ typedef int (*T_PNAK_WAIT_OBJECT_CALLBACK)(unsigned short, T_PNAK_WAIT_OBJECT); ...@@ -710,36 +740,40 @@ typedef int (*T_PNAK_WAIT_OBJECT_CALLBACK)(unsigned short, T_PNAK_WAIT_OBJECT);
typedef int (*T_PNAK_HW_START_CALLBACK)(unsigned short, T_PNAK_MODE_ID, void*); typedef int (*T_PNAK_HW_START_CALLBACK)(unsigned short, T_PNAK_MODE_ID, void*);
typedef void (*T_PROVIDER_CALLBACK)(unsigned short, unsigned short, typedef void (*T_PROVIDER_CALLBACK)(unsigned short, unsigned short,
unsigned char*, unsigned short, unsigned char*); unsigned char*, unsigned short,
unsigned char*);
typedef void (*T_CONSUMER_CALLBACK)(unsigned short, unsigned short, typedef void (*T_CONSUMER_CALLBACK)(unsigned short, unsigned short,
const unsigned char*, unsigned short, unsigned char, unsigned char); const unsigned char*, unsigned short,
unsigned char, unsigned char);
extern T_PNAK_RESULT pnak_register_provider_callback( extern T_PNAK_RESULT pnak_register_provider_callback(unsigned short,
unsigned short, T_PROVIDER_CALLBACK); T_PROVIDER_CALLBACK);
extern T_PNAK_RESULT pnak_unregister_provider_callback(unsigned short); extern T_PNAK_RESULT pnak_unregister_provider_callback(unsigned short);
extern T_PNAK_RESULT pnak_register_consumer_callback( extern T_PNAK_RESULT pnak_register_consumer_callback(unsigned short,
unsigned short, T_CONSUMER_CALLBACK); T_CONSUMER_CALLBACK);
extern T_PNAK_RESULT pnak_unregister_consumer_callback(unsigned short); extern T_PNAK_RESULT pnak_unregister_consumer_callback(unsigned short);
extern T_PNAK_RESULT pnak_register_ethernet_provider_hook( extern T_PNAK_RESULT pnak_register_ethernet_provider_hook(unsigned short,
unsigned short, T_PROVIDER_CALLBACK); T_PROVIDER_CALLBACK);
extern T_PNAK_RESULT pnak_unregister_ethernet_provider_hook(unsigned short); extern T_PNAK_RESULT pnak_unregister_ethernet_provider_hook(unsigned short);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef void (*T_PNAK_CMCTL_STATISTIC_CALLBACK)( typedef void (*T_PNAK_CMCTL_STATISTIC_CALLBACK)(unsigned short,
unsigned short, T_PNAK_CMCTL_STATISTIC*); T_PNAK_CMCTL_STATISTIC*);
extern T_PNAK_RESULT pnak_register_cmctl_statistic_callback( extern T_PNAK_RESULT
unsigned short, T_PNAK_CMCTL_STATISTIC_CALLBACK); pnak_register_cmctl_statistic_callback(unsigned short,
T_PNAK_CMCTL_STATISTIC_CALLBACK);
extern T_PNAK_RESULT pnak_unregister_cmctl_statistic_callback(unsigned short); extern T_PNAK_RESULT pnak_unregister_cmctl_statistic_callback(unsigned short);
typedef void (*T_PNAK_CMDEV_STATISTIC_CALLBACK)( typedef void (*T_PNAK_CMDEV_STATISTIC_CALLBACK)(unsigned short,
unsigned short, T_PNAK_CMDEV_STATISTIC*); T_PNAK_CMDEV_STATISTIC*);
extern T_PNAK_RESULT pnak_register_cmdev_statistic_callback( extern T_PNAK_RESULT
unsigned short, T_PNAK_CMDEV_STATISTIC_CALLBACK); pnak_register_cmdev_statistic_callback(unsigned short,
T_PNAK_CMDEV_STATISTIC_CALLBACK);
extern T_PNAK_RESULT pnak_unregister_cmdev_statistic_callback(unsigned short); extern T_PNAK_RESULT pnak_unregister_cmdev_statistic_callback(unsigned short);
#endif /* __DOXYGEN__ */ #endif /* __DOXYGEN__ */
...@@ -838,12 +872,12 @@ SOCKET USER INTERFACE ...@@ -838,12 +872,12 @@ SOCKET USER INTERFACE
(SOCK_FLAG_TYPE_TCP | 0x00000001uL) /**< Enables keep-alive packets to \ (SOCK_FLAG_TYPE_TCP | 0x00000001uL) /**< Enables keep-alive packets to \
supervise a TCP connection */ supervise a TCP connection */
#define SOCK_FLAG_ENABLE_BROADCAST \ #define SOCK_FLAG_ENABLE_BROADCAST \
(SOCK_FLAG_TYPE_UDP \ (SOCK_FLAG_TYPE_UDP | \
| 0x00000002uL) /**< Enables the transmission of broadcast messages over \ 0x00000002uL) /**< Enables the transmission of broadcast messages over \
a UDP socket */ a UDP socket */
#define SOCK_FLAG_ENABLE_MULTICAST \ #define SOCK_FLAG_ENABLE_MULTICAST \
(SOCK_FLAG_TYPE_UDP \ (SOCK_FLAG_TYPE_UDP | \
| 0x00000004uL) /**< Enables the transmission of multicast messages over \ 0x00000004uL) /**< Enables the transmission of multicast messages over \
a UDP socket */ a UDP socket */
#define SOCK_FLAG_USER_MASK \ #define SOCK_FLAG_USER_MASK \
0x0000FFFFuL /**< Specifies the bits wich are valid for the socket \ 0x0000FFFFuL /**< Specifies the bits wich are valid for the socket \
...@@ -931,7 +965,8 @@ typedef enum _T_SOCKET_RESULT { ...@@ -931,7 +965,8 @@ typedef enum _T_SOCKET_RESULT {
* (big-endian). * (big-endian).
*/ */
typedef struct _T_PNAK_SOCK_ADDR { typedef struct _T_PNAK_SOCK_ADDR
{
PN_U32 IpAddress; /**< IP address */ PN_U32 IpAddress; /**< IP address */
unsigned short Port; /**< port number */ unsigned short Port; /**< port number */
...@@ -948,7 +983,8 @@ typedef struct _T_PNAK_SOCK_ADDR { ...@@ -948,7 +983,8 @@ typedef struct _T_PNAK_SOCK_ADDR {
* @{ * @{
* \brief Configurable Options for the socket interface * \brief Configurable Options for the socket interface
*/ */
typedef struct _T_PNAK_SOCK_CONFIG_OPTIONS { typedef struct _T_PNAK_SOCK_CONFIG_OPTIONS
{
PN_U32 PN_U32
Timeout; /**< Keep-Alive Timeout in milliseconds. The Keep-Alive Timeout Timeout; /**< Keep-Alive Timeout in milliseconds. The Keep-Alive Timeout
will be used for the supervision of TCP connections. The will be used for the supervision of TCP connections. The
...@@ -973,7 +1009,8 @@ typedef struct _T_PNAK_SOCK_CONFIG_OPTIONS { ...@@ -973,7 +1009,8 @@ typedef struct _T_PNAK_SOCK_CONFIG_OPTIONS {
* All of the structure data must be specified in network-byte-order * All of the structure data must be specified in network-byte-order
* (big-endian). * (big-endian).
*/ */
typedef struct _T_PNAK_SOCK_NETWORK_SETTINGS { typedef struct _T_PNAK_SOCK_NETWORK_SETTINGS
{
PN_U32 IpAddress; /**< The IP-Address of the Device. For future use only. */ PN_U32 IpAddress; /**< The IP-Address of the Device. For future use only. */
PN_U32 SubnetMask; /**< The Netmask of the Device. For future use only. */ PN_U32 SubnetMask; /**< The Netmask of the Device. For future use only. */
PN_U32 GatewayAddress; /**< The Gateway of the Device. For future use only. */ PN_U32 GatewayAddress; /**< The Gateway of the Device. For future use only. */
...@@ -992,7 +1029,8 @@ typedef struct _T_PNAK_SOCK_NETWORK_SETTINGS { ...@@ -992,7 +1029,8 @@ typedef struct _T_PNAK_SOCK_NETWORK_SETTINGS {
* @{ * @{
* \brief This structure holds the initialization data for the socket interface * \brief This structure holds the initialization data for the socket interface
*/ */
typedef struct _T_PNAK_SOCK_INIT { typedef struct _T_PNAK_SOCK_INIT
{
T_PNAK_SOCK_NETWORK_SETTINGS T_PNAK_SOCK_NETWORK_SETTINGS
NetworkSettings; /**< Network specific parameter */ NetworkSettings; /**< Network specific parameter */
T_PNAK_SOCK_CONFIG_OPTIONS T_PNAK_SOCK_CONFIG_OPTIONS
...@@ -1054,7 +1092,8 @@ typedef struct _T_PNAK_SOCK_INIT { ...@@ -1054,7 +1092,8 @@ typedef struct _T_PNAK_SOCK_INIT {
* @{ * @{
* \brief This structure holds status informations about a single TCP connection * \brief This structure holds status informations about a single TCP connection
*/ */
typedef struct _T_PNAK_SOCK_TCP_CONNECTION_LOCAL_STATUS { typedef struct _T_PNAK_SOCK_TCP_CONNECTION_LOCAL_STATUS
{
PN_U32 Status; /**< Local status of the TCP connection. Valid values: \ref PN_U32 Status; /**< Local status of the TCP connection. Valid values: \ref
ConnectionStatus */ ConnectionStatus */
PN_U32 StatusCode; /**< Indicates the last error of the TCP connection. Valid PN_U32 StatusCode; /**< Indicates the last error of the TCP connection. Valid
...@@ -1072,7 +1111,8 @@ typedef struct _T_PNAK_SOCK_TCP_CONNECTION_LOCAL_STATUS { ...@@ -1072,7 +1111,8 @@ typedef struct _T_PNAK_SOCK_TCP_CONNECTION_LOCAL_STATUS {
* \brief This structure holds status informations about all TCP connections of * \brief This structure holds status informations about all TCP connections of
* a socket * a socket
*/ */
typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA { typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA
{
PN_U32 NumberConnections; /**< Number of TCP connection for which status info PN_U32 NumberConnections; /**< Number of TCP connection for which status info
is provided */ is provided */
...@@ -1088,7 +1128,8 @@ typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA { ...@@ -1088,7 +1128,8 @@ typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA {
* Status of a socket * Status of a socket
* @{ * @{
*/ */
#define SOCK_LOCAL_STATUS_CLOSED 0x00000001uL /**< The local socket is closed \ #define SOCK_LOCAL_STATUS_CLOSED \
0x00000001uL /**< The local socket is closed \
*/ */
#define SOCK_LOCAL_STATUS_OFFLINE \ #define SOCK_LOCAL_STATUS_OFFLINE \
0x00000002uL /**< The local port associated with the socket is not open. \ 0x00000002uL /**< The local port associated with the socket is not open. \
...@@ -1116,7 +1157,8 @@ typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA { ...@@ -1116,7 +1157,8 @@ typedef struct _T_PNAK_SOCK_TCP_LOCAL_STATUS_DATA {
* @{ * @{
* \brief This structure holds status informations about a socket * \brief This structure holds status informations about a socket
*/ */
typedef struct _T_PNAK_SOCK_IOC_GET_LOCAL_STATUS { typedef struct _T_PNAK_SOCK_IOC_GET_LOCAL_STATUS
{
PN_U32 Status; /**< Common socket status information. Valid values: \ref PN_U32 Status; /**< Common socket status information. Valid values: \ref
SocketStatus */ SocketStatus */
PN_U32 StatusCode; /**< Common socket error code. Valid values: \ref PN_U32 StatusCode; /**< Common socket error code. Valid values: \ref
...@@ -1172,7 +1214,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_LOCAL_STATUS { ...@@ -1172,7 +1214,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_LOCAL_STATUS {
* @{ * @{
* \brief This structure holds TCP specific send status informations * \brief This structure holds TCP specific send status informations
*/ */
typedef struct _T_PNAK_SOCK_TCP_SEND_STATUS_DATA { typedef struct _T_PNAK_SOCK_TCP_SEND_STATUS_DATA
{
T_PNAK_SOCK_ADDR T_PNAK_SOCK_ADDR
RemoteAddr; /**< Address information of the remote connection partner */ RemoteAddr; /**< Address information of the remote connection partner */
...@@ -1184,7 +1227,8 @@ typedef struct _T_PNAK_SOCK_TCP_SEND_STATUS_DATA { ...@@ -1184,7 +1227,8 @@ typedef struct _T_PNAK_SOCK_TCP_SEND_STATUS_DATA {
* @{ * @{
* \brief This structure holds send status informations * \brief This structure holds send status informations
*/ */
typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS { typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS
{
PN_U32 Status; /**< Common send status information. Valid values: \ref PN_U32 Status; /**< Common send status information. Valid values: \ref
SendStatus */ SendStatus */
PN_U32 StatusCode; /**< Common send error code. Valid values: \ref PN_U32 StatusCode; /**< Common send error code. Valid values: \ref
...@@ -1221,7 +1265,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS { ...@@ -1221,7 +1265,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS {
* Receive Error Codes * Receive Error Codes
* @{ * @{
*/ */
#define SOCK_RECEIVE_STATUS_CODE_NO_ERROR 0x00000000uL /**< No error detected \ #define SOCK_RECEIVE_STATUS_CODE_NO_ERROR \
0x00000000uL /**< No error detected \
*/ */
/** @} */ /** @} */
/** @} */ /** @} */
...@@ -1230,7 +1275,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS { ...@@ -1230,7 +1275,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_SEND_STATUS {
* @{ * @{
* \brief This structure holds TCP specific receive status informations * \brief This structure holds TCP specific receive status informations
*/ */
typedef struct _T_PNAK_SOCK_TCP_RECEIVE_STATUS_DATA { typedef struct _T_PNAK_SOCK_TCP_RECEIVE_STATUS_DATA
{
T_PNAK_SOCK_ADDR T_PNAK_SOCK_ADDR
RemoteAddr; /**< Address information of the remote connection partner */ RemoteAddr; /**< Address information of the remote connection partner */
...@@ -1242,7 +1288,8 @@ typedef struct _T_PNAK_SOCK_TCP_RECEIVE_STATUS_DATA { ...@@ -1242,7 +1288,8 @@ typedef struct _T_PNAK_SOCK_TCP_RECEIVE_STATUS_DATA {
* @{ * @{
* \brief This structure holds receive status informations * \brief This structure holds receive status informations
*/ */
typedef struct _T_PNAK_SOCK_IOC_GET_RECEIVE_STATUS { typedef struct _T_PNAK_SOCK_IOC_GET_RECEIVE_STATUS
{
PN_U32 Status; /**< Common receive status information. Valid values: \ref PN_U32 Status; /**< Common receive status information. Valid values: \ref
ReceiveStatus */ ReceiveStatus */
PN_U32 StatusCode; /**< Common receive error code. Valid values: \ref PN_U32 StatusCode; /**< Common receive error code. Valid values: \ref
...@@ -1265,7 +1312,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_RECEIVE_STATUS { ...@@ -1265,7 +1312,8 @@ typedef struct _T_PNAK_SOCK_IOC_GET_RECEIVE_STATUS {
* @{ * @{
* \brief This structure specifies the TCP connection which shall be aborted * \brief This structure specifies the TCP connection which shall be aborted
*/ */
typedef struct _T_PNAK_SOCK_IOC_CLOSE_TCP_CONNECTION { typedef struct _T_PNAK_SOCK_IOC_CLOSE_TCP_CONNECTION
{
T_PNAK_SOCK_ADDR T_PNAK_SOCK_ADDR
RemoteAddr; /**< Address information of the remote connection partner */ RemoteAddr; /**< Address information of the remote connection partner */
...@@ -1282,7 +1330,8 @@ typedef struct _T_PNAK_SOCK_IOC_CLOSE_TCP_CONNECTION { ...@@ -1282,7 +1330,8 @@ typedef struct _T_PNAK_SOCK_IOC_CLOSE_TCP_CONNECTION {
* \brief This structure specifies the IP addresses from which a connection * \brief This structure specifies the IP addresses from which a connection
* establishment shall be accepted * establishment shall be accepted
*/ */
typedef struct _T_PNAK_SOCK_IOC_TCP_ACCEPT_FILTER { typedef struct _T_PNAK_SOCK_IOC_TCP_ACCEPT_FILTER
{
PN_U16 NumberEntries; /**< number of filter entries */ PN_U16 NumberEntries; /**< number of filter entries */
PN_U16 Alignment; PN_U16 Alignment;
...@@ -1299,7 +1348,8 @@ typedef struct _T_PNAK_SOCK_IOC_TCP_ACCEPT_FILTER { ...@@ -1299,7 +1348,8 @@ typedef struct _T_PNAK_SOCK_IOC_TCP_ACCEPT_FILTER {
* \brief This structure specifies the IP addresses of the multicast group the * \brief This structure specifies the IP addresses of the multicast group the
* application wants to join or leave * application wants to join or leave
*/ */
typedef struct _T_PNAK_SOCK_IOC_MULTICAST { typedef struct _T_PNAK_SOCK_IOC_MULTICAST
{
PN_U32 IpAddress; PN_U32 IpAddress;
} PACK_WORD_ALIGNMENT(T_PNAK_SOCK_IOC_MULTICAST); } PACK_WORD_ALIGNMENT(T_PNAK_SOCK_IOC_MULTICAST);
...@@ -1323,7 +1373,8 @@ typedef struct _T_PNAK_SOCK_IOC_MULTICAST { ...@@ -1323,7 +1373,8 @@ typedef struct _T_PNAK_SOCK_IOC_MULTICAST {
#define SOCK_IOC_TCP_ACCEPT_FILTER \ #define SOCK_IOC_TCP_ACCEPT_FILTER \
0x00000005uL /**< Defines which IP Addresses are accepted by the socket */ 0x00000005uL /**< Defines which IP Addresses are accepted by the socket */
#define SOCK_IOC_UDP_ADD_MULTICAST 0x00000006uL /**< Join a multicast group */ #define SOCK_IOC_UDP_ADD_MULTICAST 0x00000006uL /**< Join a multicast group */
#define SOCK_IOC_UDP_DEL_MULTICAST 0x00000007uL /**< Leave a multicast group \ #define SOCK_IOC_UDP_DEL_MULTICAST \
0x00000007uL /**< Leave a multicast group \
*/ */
/** @} */ /** @} */
/** @} */ /** @} */
...@@ -1332,7 +1383,8 @@ typedef struct _T_PNAK_SOCK_IOC_MULTICAST { ...@@ -1332,7 +1383,8 @@ typedef struct _T_PNAK_SOCK_IOC_MULTICAST {
* @{ * @{
* \brief This structure holds the data for an IO Control Command * \brief This structure holds the data for an IO Control Command
*/ */
typedef struct _T_PNAK_SOCK_IO_CONTROL { typedef struct _T_PNAK_SOCK_IO_CONTROL
{
PN_U32 Command; /**< Specifies the IO Control Command. Valid values: \ref PN_U32 Command; /**< Specifies the IO Control Command. Valid values: \ref
IoctlCommand */ IoctlCommand */
...@@ -1375,19 +1427,22 @@ extern T_SOCKET_RESULT pnak_sock_term(unsigned short); ...@@ -1375,19 +1427,22 @@ extern T_SOCKET_RESULT pnak_sock_term(unsigned short);
/*--- socket interface functions --------------------------------------------*/ /*--- socket interface functions --------------------------------------------*/
extern T_SOCKET_RESULT pnak_sock_create(unsigned short, PN_U32, extern T_SOCKET_RESULT pnak_sock_create(unsigned short, PN_U32,
T_PNAK_SOCK_ADDR*, T_PNAK_SOCK_ADDR*, unsigned short*); T_PNAK_SOCK_ADDR*, T_PNAK_SOCK_ADDR*,
unsigned short*);
extern T_SOCKET_RESULT pnak_sock_close(unsigned short, unsigned short); extern T_SOCKET_RESULT pnak_sock_close(unsigned short, unsigned short);
extern T_SOCKET_RESULT pnak_sock_send(unsigned short, unsigned short, extern T_SOCKET_RESULT pnak_sock_send(unsigned short, unsigned short,
T_PNAK_SOCK_ADDR*, PN_U16, const unsigned char*); T_PNAK_SOCK_ADDR*, PN_U16,
extern T_SOCKET_RESULT pnak_sock_receive( const unsigned char*);
unsigned short, unsigned short, T_PNAK_SOCK_ADDR*, PN_U16*, unsigned char*); extern T_SOCKET_RESULT pnak_sock_receive(unsigned short, unsigned short,
extern T_SOCKET_RESULT pnak_sock_ioctl( T_PNAK_SOCK_ADDR*, PN_U16*,
unsigned short, unsigned short, T_PNAK_SOCK_IO_CONTROL*); unsigned char*);
extern T_SOCKET_RESULT pnak_sock_ioctl(unsigned short, unsigned short,
T_PNAK_SOCK_IO_CONTROL*);
/*--- socket interface helper functions -------------------------------------*/ /*--- socket interface helper functions -------------------------------------*/
extern T_SOCKET_RESULT pnak_sock_get_receive_status( extern T_SOCKET_RESULT pnak_sock_get_receive_status(unsigned short,
unsigned short, T_BITSET_64*); T_BITSET_64*);
#endif /* __DOXYGEN__ */ #endif /* __DOXYGEN__ */
......
...@@ -160,10 +160,10 @@ DEFINES ...@@ -160,10 +160,10 @@ DEFINES
#define PROFINET_AR_PROPERTY_DATA_RATE_1GBIT 0x00000040uL #define PROFINET_AR_PROPERTY_DATA_RATE_1GBIT 0x00000040uL
#define PROFINET_AR_PROPERTY_DATA_RATE_10GBIT 0x00000060uL #define PROFINET_AR_PROPERTY_DATA_RATE_10GBIT 0x00000060uL
#define PROFINET_AR_PROPERTY_DATA_RATE_MASK \ #define PROFINET_AR_PROPERTY_DATA_RATE_MASK \
(PROFINET_AR_PROPERTY_DATA_RATE_AT_LEAST_100MBIT \ (PROFINET_AR_PROPERTY_DATA_RATE_AT_LEAST_100MBIT | \
| PROFINET_AR_PROPERTY_DATA_RATE_100MBIT \ PROFINET_AR_PROPERTY_DATA_RATE_100MBIT | \
| PROFINET_AR_PROPERTY_DATA_RATE_1GBIT \ PROFINET_AR_PROPERTY_DATA_RATE_1GBIT | \
| PROFINET_AR_PROPERTY_DATA_RATE_10GBIT) PROFINET_AR_PROPERTY_DATA_RATE_10GBIT)
#define PROFINET_AR_PROPERTY_ACCESS_BY_EXP_SUB_BLOCK 0x00000000uL #define PROFINET_AR_PROPERTY_ACCESS_BY_EXP_SUB_BLOCK 0x00000000uL
#define PROFINET_AR_PROPERTY_ACCESS_BY_DEVICE 0x00000100uL #define PROFINET_AR_PROPERTY_ACCESS_BY_DEVICE 0x00000100uL
#define PROFINET_AR_PROPERTY_COMPANION_SINGLE_AR 0x00000000uL #define PROFINET_AR_PROPERTY_COMPANION_SINGLE_AR 0x00000000uL
...@@ -174,21 +174,22 @@ DEFINES ...@@ -174,21 +174,22 @@ DEFINES
#define PROFINET_AR_PROPERTY_STARTUP_MODE_LEGACY 0x00000000uL #define PROFINET_AR_PROPERTY_STARTUP_MODE_LEGACY 0x00000000uL
#define PROFINET_AR_PROPERTY_STARTUP_MODE_ADVANCED 0x40000000uL #define PROFINET_AR_PROPERTY_STARTUP_MODE_ADVANCED 0x40000000uL
#define PROFINET_AR_PROPERTY_STARTUP_MODE_MASK \ #define PROFINET_AR_PROPERTY_STARTUP_MODE_MASK \
(PROFINET_AR_PROPERTY_STARTUP_MODE_LEGACY \ (PROFINET_AR_PROPERTY_STARTUP_MODE_LEGACY | \
| PROFINET_AR_PROPERTY_STARTUP_MODE_ADVANCED) PROFINET_AR_PROPERTY_STARTUP_MODE_ADVANCED)
#define PROFINET_AR_PROPERTY_PULL_MODULE_ALARM_ALLOWED 0x80000000uL #define PROFINET_AR_PROPERTY_PULL_MODULE_ALARM_ALLOWED 0x80000000uL
#define PROFINET_AR_PROPERTY_MASK \ #define PROFINET_AR_PROPERTY_MASK \
(PROFINET_AR_PROPERTY_STATE_MASK | PROFINET_AR_PROPERTY_TAKEOVER_NOT_ALLOWED \ (PROFINET_AR_PROPERTY_STATE_MASK | \
| PROFINET_AR_PROPERTY_TAKEOVER_ALLOWED \ PROFINET_AR_PROPERTY_TAKEOVER_NOT_ALLOWED | \
| PROFINET_AR_PROPERTY_PARAMETER_SERVER_EXT \ PROFINET_AR_PROPERTY_TAKEOVER_ALLOWED | \
| PROFINET_AR_PROPERTY_PARAMETER_SERVER_CM \ PROFINET_AR_PROPERTY_PARAMETER_SERVER_EXT | \
| PROFINET_AR_PROPERTY_DATA_RATE_MASK \ PROFINET_AR_PROPERTY_PARAMETER_SERVER_CM | \
| PROFINET_AR_PROPERTY_ACCESS_BY_EXP_SUB_BLOCK \ PROFINET_AR_PROPERTY_DATA_RATE_MASK | \
| PROFINET_AR_PROPERTY_ACCESS_BY_DEVICE \ PROFINET_AR_PROPERTY_ACCESS_BY_EXP_SUB_BLOCK | \
| PROFINET_AR_PROPERTY_COMPANION_SINGLE_AR \ PROFINET_AR_PROPERTY_ACCESS_BY_DEVICE | \
| PROFINET_AR_PROPERTY_COMPANION_AR_WITHOUT_ACK \ PROFINET_AR_PROPERTY_COMPANION_SINGLE_AR | \
| PROFINET_AR_PROPERTY_STARTUP_MODE_MASK \ PROFINET_AR_PROPERTY_COMPANION_AR_WITHOUT_ACK | \
| PROFINET_AR_PROPERTY_PULL_MODULE_ALARM_ALLOWED) PROFINET_AR_PROPERTY_STARTUP_MODE_MASK | \
PROFINET_AR_PROPERTY_PULL_MODULE_ALARM_ALLOWED)
/*===========================================================================*/ /*===========================================================================*/
...@@ -204,8 +205,8 @@ DEFINES ...@@ -204,8 +205,8 @@ DEFINES
#define PROFINET_IO_CR_RT_CLASS3 0x00000003uL #define PROFINET_IO_CR_RT_CLASS3 0x00000003uL
#define PROFINET_IO_CR_RT_CLASS_UDP 0x00000004uL #define PROFINET_IO_CR_RT_CLASS_UDP 0x00000004uL
#define PROFINET_IO_CR_RT_CLASS_MASK \ #define PROFINET_IO_CR_RT_CLASS_MASK \
(PROFINET_IO_CR_RT_CLASS1 | PROFINET_IO_CR_RT_CLASS2 \ (PROFINET_IO_CR_RT_CLASS1 | PROFINET_IO_CR_RT_CLASS2 | \
| PROFINET_IO_CR_RT_CLASS3 | PROFINET_IO_CR_RT_CLASS_UDP) PROFINET_IO_CR_RT_CLASS3 | PROFINET_IO_CR_RT_CLASS_UDP)
#define PROFINET_IO_CR_PROPERTIES_RESERVED_MASK 0xFF001FF0uL #define PROFINET_IO_CR_PROPERTIES_RESERVED_MASK 0xFF001FF0uL
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -242,8 +243,8 @@ DEFINES ...@@ -242,8 +243,8 @@ DEFINES
#define PROFINET_IO_CR_TAG_DEFAULT_VLAN 0x0001uL #define PROFINET_IO_CR_TAG_DEFAULT_VLAN 0x0001uL
#define PROFINET_IO_CR_TAG_USER_PRIORITY 0xC000uL #define PROFINET_IO_CR_TAG_USER_PRIORITY 0xC000uL
#define PROFINET_IO_CR_TAG_MASK \ #define PROFINET_IO_CR_TAG_MASK \
(PROFINET_IO_CR_TAG_NO_VLAN | PROFINET_IO_CR_TAG_DEFAULT_VLAN \ (PROFINET_IO_CR_TAG_NO_VLAN | PROFINET_IO_CR_TAG_DEFAULT_VLAN | \
| PROFINET_IO_CR_TAG_USER_PRIORITY) PROFINET_IO_CR_TAG_USER_PRIORITY)
#define PROFINET_IO_CR_MIN_FRAME_SEND_OFFSET 0x00000000uL #define PROFINET_IO_CR_MIN_FRAME_SEND_OFFSET 0x00000000uL
#define PROFINET_IO_CR_MAX_FRAME_SEND_OFFSET 0x003D08FFuL #define PROFINET_IO_CR_MAX_FRAME_SEND_OFFSET 0x003D08FFuL
...@@ -281,9 +282,9 @@ DEFINES ...@@ -281,9 +282,9 @@ DEFINES
#define PROFINET_MODULE_STATE_PROPER_MODULE 0x0002u #define PROFINET_MODULE_STATE_PROPER_MODULE 0x0002u
#define PROFINET_MODULE_STATE_SUBSTITUTE_MODULE 0x0003u #define PROFINET_MODULE_STATE_SUBSTITUTE_MODULE 0x0003u
#define PROFINET_MODULE_STATE_MASK \ #define PROFINET_MODULE_STATE_MASK \
(PROFINET_MODULE_STATE_NO_MODULE | PROFINET_MODULE_STATE_WRONG_MODULE \ (PROFINET_MODULE_STATE_NO_MODULE | PROFINET_MODULE_STATE_WRONG_MODULE | \
| PROFINET_MODULE_STATE_PROPER_MODULE \ PROFINET_MODULE_STATE_PROPER_MODULE | \
| PROFINET_MODULE_STATE_SUBSTITUTE_MODULE) PROFINET_MODULE_STATE_SUBSTITUTE_MODULE)
/*===========================================================================*/ /*===========================================================================*/
...@@ -307,9 +308,9 @@ DEFINES ...@@ -307,9 +308,9 @@ DEFINES
#define PROFINET_IO_SUBMODULE_TYPE_OUTPUT 0x0002u #define PROFINET_IO_SUBMODULE_TYPE_OUTPUT 0x0002u
#define PROFINET_IO_SUBMODULE_TYPE_INPUT_AND_OUTPUT 0x0003u #define PROFINET_IO_SUBMODULE_TYPE_INPUT_AND_OUTPUT 0x0003u
#define PROFINET_IO_SUBMODULE_TYPE_IO_MASK \ #define PROFINET_IO_SUBMODULE_TYPE_IO_MASK \
(PROFINET_IO_SUBMODULE_TYPE_NO_INPUT_NO_OUTPUT \ (PROFINET_IO_SUBMODULE_TYPE_NO_INPUT_NO_OUTPUT | \
| PROFINET_IO_SUBMODULE_TYPE_INPUT | PROFINET_IO_SUBMODULE_TYPE_OUTPUT \ PROFINET_IO_SUBMODULE_TYPE_INPUT | PROFINET_IO_SUBMODULE_TYPE_OUTPUT | \
| PROFINET_IO_SUBMODULE_TYPE_INPUT_AND_OUTPUT) PROFINET_IO_SUBMODULE_TYPE_INPUT_AND_OUTPUT)
#define PROFINET_IO_SUBMODULE_TYPE_SHARED_INPUT 0x0004u #define PROFINET_IO_SUBMODULE_TYPE_SHARED_INPUT 0x0004u
#define PROFINET_IO_SUBMODULE_TYPE_NORMAL_INPUT 0x0000u #define PROFINET_IO_SUBMODULE_TYPE_NORMAL_INPUT 0x0000u
...@@ -320,14 +321,14 @@ DEFINES ...@@ -320,14 +321,14 @@ DEFINES
#define PROFINET_IO_SUBMODULE_TYPE_DISCARD_IOXS 0x0020u #define PROFINET_IO_SUBMODULE_TYPE_DISCARD_IOXS 0x0020u
#define PROFINET_IO_SUBMODULE_TYPE_MASK \ #define PROFINET_IO_SUBMODULE_TYPE_MASK \
(PROFINET_IO_SUBMODULE_TYPE_IO_MASK \ (PROFINET_IO_SUBMODULE_TYPE_IO_MASK | \
| PROFINET_IO_SUBMODULE_TYPE_SHARED_INPUT \ PROFINET_IO_SUBMODULE_TYPE_SHARED_INPUT | \
| PROFINET_IO_SUBMODULE_TYPE_NORMAL_INPUT \ PROFINET_IO_SUBMODULE_TYPE_NORMAL_INPUT | \
| PROFINET_IO_SUBMODULE_TYPE_REDUCED_INPUT \ PROFINET_IO_SUBMODULE_TYPE_REDUCED_INPUT | \
| PROFINET_IO_SUBMODULE_TYPE_NORMAL_OUTPUT \ PROFINET_IO_SUBMODULE_TYPE_NORMAL_OUTPUT | \
| PROFINET_IO_SUBMODULE_TYPE_REDUCED_OUTPUT \ PROFINET_IO_SUBMODULE_TYPE_REDUCED_OUTPUT | \
| PROFINET_IO_SUBMODULE_TYPE_NORMAL_IOXS \ PROFINET_IO_SUBMODULE_TYPE_NORMAL_IOXS | \
| PROFINET_IO_SUBMODULE_TYPE_DISCARD_IOXS) PROFINET_IO_SUBMODULE_TYPE_DISCARD_IOXS)
/*===========================================================================*/ /*===========================================================================*/
...@@ -350,11 +351,10 @@ DEFINES ...@@ -350,11 +351,10 @@ DEFINES
#define CYCLIC_DATA_STATUS_NORMAL_OPERATION 0x20u #define CYCLIC_DATA_STATUS_NORMAL_OPERATION 0x20u
#define CYCLIC_DATA_STATUS_PROBLEM_DETECTED 0x00u #define CYCLIC_DATA_STATUS_PROBLEM_DETECTED 0x00u
#define CYCLIC_DATA_STATUS_MASK \ #define CYCLIC_DATA_STATUS_MASK \
(CYCLIC_DATA_STATUS_STATE_PRIMARY | CYCLIC_DATA_STATUS_STATE_BACKUP \ (CYCLIC_DATA_STATUS_STATE_PRIMARY | CYCLIC_DATA_STATUS_STATE_BACKUP | \
| CYCLIC_DATA_STATUS_DATA_VALID | CYCLIC_DATA_STATUS_DATA_INVALID \ CYCLIC_DATA_STATUS_DATA_VALID | CYCLIC_DATA_STATUS_DATA_INVALID | \
| CYCLIC_DATA_STATUS_STATE_RUN | CYCLIC_DATA_STATUS_STATE_STOP \ CYCLIC_DATA_STATUS_STATE_RUN | CYCLIC_DATA_STATUS_STATE_STOP | \
| CYCLIC_DATA_STATUS_NORMAL_OPERATION \ CYCLIC_DATA_STATUS_NORMAL_OPERATION | CYCLIC_DATA_STATUS_PROBLEM_DETECTED)
| CYCLIC_DATA_STATUS_PROBLEM_DETECTED)
/*===========================================================================*/ /*===========================================================================*/
...@@ -404,12 +404,12 @@ DEFINES ...@@ -404,12 +404,12 @@ DEFINES
#define PROFINET_MC_CR_ADDR_RESOLUTION_MIN_FACTOR 0x00010000uL #define PROFINET_MC_CR_ADDR_RESOLUTION_MIN_FACTOR 0x00010000uL
#define PROFINET_MC_CR_ADDR_RESOLUTION_MAX_FACTOR 0xFFFF0000uL #define PROFINET_MC_CR_ADDR_RESOLUTION_MAX_FACTOR 0xFFFF0000uL
#define PROFINET_MC_CR_ADDR_RESOLUTION_FACTOR_MASK \ #define PROFINET_MC_CR_ADDR_RESOLUTION_FACTOR_MASK \
(PROFINET_MC_CR_ADDR_RESOLUTION_MIN_FACTOR \ (PROFINET_MC_CR_ADDR_RESOLUTION_MIN_FACTOR | \
| PROFINET_MC_CR_ADDR_RESOLUTION_MAX_FACTOR) PROFINET_MC_CR_ADDR_RESOLUTION_MAX_FACTOR)
#define PROFINET_MC_CR_MASK \ #define PROFINET_MC_CR_MASK \
(PROFINET_MC_CR_ADDR_RESOLUTION_MASK \ (PROFINET_MC_CR_ADDR_RESOLUTION_MASK | \
| PROFINET_MC_CR_ADDR_RESOLUTION_FACTOR_MASK) PROFINET_MC_CR_ADDR_RESOLUTION_FACTOR_MASK)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -482,7 +482,8 @@ DEFINES ...@@ -482,7 +482,8 @@ DEFINES
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_MAC_ADDRESS { typedef struct _T_PN_MAC_ADDRESS
{
PN_U8 HighAndVersionHighByte; PN_U8 HighAndVersionHighByte;
PN_U8 HighAndVersionLowByte; PN_U8 HighAndVersionLowByte;
...@@ -496,7 +497,8 @@ typedef struct _T_PN_MAC_ADDRESS { ...@@ -496,7 +497,8 @@ typedef struct _T_PN_MAC_ADDRESS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_UUID { typedef struct _T_PROFINET_UUID
{
PN_U8 TimeLowHighWordHighByte; PN_U8 TimeLowHighWordHighByte;
PN_U8 TimeLowHighWordLowByte; PN_U8 TimeLowHighWordLowByte;
PN_U8 TimeLowLowWordHighByte; PN_U8 TimeLowLowWordHighByte;
...@@ -625,7 +627,8 @@ typedef struct _T_PROFINET_UUID { ...@@ -625,7 +627,8 @@ typedef struct _T_PROFINET_UUID {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_ERROR_CON { typedef struct _T_PN_SERVICE_ERROR_CON
{
PN_U8 Code; PN_U8 Code;
PN_U8 Detail; PN_U8 Detail;
...@@ -639,15 +642,16 @@ typedef struct _T_PN_SERVICE_ERROR_CON { ...@@ -639,15 +642,16 @@ typedef struct _T_PN_SERVICE_ERROR_CON {
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_BASE (PN_U16)0xF800u #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_BASE (PN_U16)0xF800u
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_NUMBER_IDS (PN_U16)0x03FFu #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_NUMBER_IDS (PN_U16)0x03FFu
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_HIGHEST_FRAME_ID \ #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_HIGHEST_FRAME_ID \
(PN_U16)(PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_BASE \ (PN_U16)(PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_BASE + \
+ PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_NUMBER_IDS) PROFINET_IO_MCR_FRAME_ID_RT_CLASS1_NUMBER_IDS)
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_BASE (PN_U16)0xBC00u #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_BASE (PN_U16)0xBC00u
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_NUMBER_IDS (PN_U16)0x03FFu #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_NUMBER_IDS (PN_U16)0x03FFu
#define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_HIGHEST_FRAME_ID \ #define PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_HIGHEST_FRAME_ID \
(PN_U16)(PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_BASE \ (PN_U16)(PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_BASE + \
+ PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_NUMBER_IDS) PROFINET_IO_MCR_FRAME_ID_RT_CLASS2_NUMBER_IDS)
typedef struct _T_PN_MCR_PROVIDER { typedef struct _T_PN_MCR_PROVIDER
{
PN_U8 FrameIdHighByte; PN_U8 FrameIdHighByte;
PN_U8 FrameIdLowByte; PN_U8 FrameIdLowByte;
...@@ -655,7 +659,8 @@ typedef struct _T_PN_MCR_PROVIDER { ...@@ -655,7 +659,8 @@ typedef struct _T_PN_MCR_PROVIDER {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_MCR_CONSUMER { typedef struct _T_PN_MCR_CONSUMER
{
PN_U8 FrameIdHighByte; PN_U8 FrameIdHighByte;
PN_U8 FrameIdLowByte; PN_U8 FrameIdLowByte;
...@@ -680,20 +685,21 @@ typedef struct _T_PN_MCR_CONSUMER { ...@@ -680,20 +685,21 @@ typedef struct _T_PN_MCR_CONSUMER {
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_BASE (PN_U16)0x0100u #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_BASE (PN_U16)0x0100u
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_NUMBER_IDS (PN_U16)0x05FFu #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_NUMBER_IDS (PN_U16)0x05FFu
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_HIGHEST_FRAME_ID \ #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_HIGHEST_FRAME_ID \
(PN_U16)(PROFINET_IO_CR_FRAME_ID_RT_CLASS3_BASE \ (PN_U16)(PROFINET_IO_CR_FRAME_ID_RT_CLASS3_BASE + \
+ PROFINET_IO_CR_FRAME_ID_RT_CLASS3_NUMBER_IDS) PROFINET_IO_CR_FRAME_ID_RT_CLASS3_NUMBER_IDS)
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_BASE (PN_U16)0x0700u #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_BASE (PN_U16)0x0700u
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_NUMBER_IDS (PN_U16)0x08FFu #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_NUMBER_IDS (PN_U16)0x08FFu
#define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_HIGHEST_FRAME_ID \ #define PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_HIGHEST_FRAME_ID \
(PN_U16)(PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_BASE \ (PN_U16)(PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_BASE + \
+ PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_NUMBER_IDS) PROFINET_IO_CR_FRAME_ID_RT_CLASS3_MRPD_NUMBER_IDS)
typedef T_PN_MCR_PROVIDER T_PN_RTC3_PROVIDER; typedef T_PN_MCR_PROVIDER T_PN_RTC3_PROVIDER;
typedef T_PN_MCR_PROVIDER T_PN_RTC3_CONSUMER; typedef T_PN_MCR_PROVIDER T_PN_RTC3_CONSUMER;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_ALARM_CR { typedef struct _T_PN_ALARM_CR
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -721,7 +727,8 @@ typedef struct _T_PN_ALARM_CR { ...@@ -721,7 +727,8 @@ typedef struct _T_PN_ALARM_CR {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_REFERENCE { typedef struct _T_PN_REFERENCE
{
PN_U8 ReferenceHighByte; PN_U8 ReferenceHighByte;
PN_U8 ReferenceLowByte; PN_U8 ReferenceLowByte;
...@@ -731,7 +738,8 @@ typedef struct _T_PN_REFERENCE { ...@@ -731,7 +738,8 @@ typedef struct _T_PN_REFERENCE {
#define PROFINET_IO_CR_IO_STATUS_LENGTH 0x0001u #define PROFINET_IO_CR_IO_STATUS_LENGTH 0x0001u
typedef struct _T_PN_SUBMODULE { typedef struct _T_PN_SUBMODULE
{
PN_U8 SubSlotNumberHighByte; PN_U8 SubSlotNumberHighByte;
PN_U8 SubSlotNumberLowByte; PN_U8 SubSlotNumberLowByte;
...@@ -763,7 +771,8 @@ typedef struct _T_PN_SUBMODULE { ...@@ -763,7 +771,8 @@ typedef struct _T_PN_SUBMODULE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_MODULE { typedef struct _T_PN_MODULE
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -789,7 +798,8 @@ typedef struct _T_PN_MODULE { ...@@ -789,7 +798,8 @@ typedef struct _T_PN_MODULE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DATA_RECORD { typedef struct _T_PN_DATA_RECORD
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -815,7 +825,8 @@ typedef struct _T_PN_DATA_RECORD { ...@@ -815,7 +825,8 @@ typedef struct _T_PN_DATA_RECORD {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_API { typedef struct _T_PN_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -832,7 +843,8 @@ typedef struct _T_PN_API { ...@@ -832,7 +843,8 @@ typedef struct _T_PN_API {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_IOCR { typedef struct _T_PN_IOCR
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -972,7 +984,8 @@ typedef struct _T_PN_IOCR { ...@@ -972,7 +984,8 @@ typedef struct _T_PN_IOCR {
#define PN_SERVICE_DOWNLOAD_LITTLE_ENDIAN 0u #define PN_SERVICE_DOWNLOAD_LITTLE_ENDIAN 0u
#define PN_SERVICE_DOWNLOAD_BIG_ENDIAN 1u #define PN_SERVICE_DOWNLOAD_BIG_ENDIAN 1u
typedef struct _T_PN_SERVICE_DOWNLOAD_REQ { typedef struct _T_PN_SERVICE_DOWNLOAD_REQ
{
PN_U8 IpAddressHighWordHighByte; PN_U8 IpAddressHighWordHighByte;
PN_U8 IpAddressHighWordLowByte; PN_U8 IpAddressHighWordLowByte;
PN_U8 IpAddressLowWordHighByte; PN_U8 IpAddressLowWordHighByte;
...@@ -1037,7 +1050,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_REQ { ...@@ -1037,7 +1050,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DATA_INFO { typedef struct _T_PN_DATA_INFO
{
PN_U8 SlotNumberHighByte; PN_U8 SlotNumberHighByte;
PN_U8 SlotNumberLowByte; PN_U8 SlotNumberLowByte;
...@@ -1051,7 +1065,8 @@ typedef struct _T_PN_DATA_INFO { ...@@ -1051,7 +1065,8 @@ typedef struct _T_PN_DATA_INFO {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_API_INFO { typedef struct _T_PN_API_INFO
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -1078,8 +1093,8 @@ typedef struct _T_PN_API_INFO { ...@@ -1078,8 +1093,8 @@ typedef struct _T_PN_API_INFO {
#define PN_IOCR_CMDEV_AR_MASK 0x00FFu #define PN_IOCR_CMDEV_AR_MASK 0x00FFu
#define PN_IOCR_NUMBER_MASK 0x7E00u #define PN_IOCR_NUMBER_MASK 0x7E00u
#define PN_IOCR_IDENTIFIER_MASK \ #define PN_IOCR_IDENTIFIER_MASK \
(PN_IOCR_DEVICE_REF_MASK | PN_IOCR_CMDEV_AR_MASK | PN_IOCR_NUMBER_MASK \ (PN_IOCR_DEVICE_REF_MASK | PN_IOCR_CMDEV_AR_MASK | PN_IOCR_NUMBER_MASK | \
| PN_IOCR_CMDEV_MASK) PN_IOCR_CMDEV_MASK)
#define _PN_IOCR_NUMBER_TO_DEVICE_REF(IOCRIdentifier) \ #define _PN_IOCR_NUMBER_TO_DEVICE_REF(IOCRIdentifier) \
(IOCRIdentifier & PN_IOCR_DEVICE_REF_MASK) (IOCRIdentifier & PN_IOCR_DEVICE_REF_MASK)
...@@ -1089,7 +1104,8 @@ typedef struct _T_PN_API_INFO { ...@@ -1089,7 +1104,8 @@ typedef struct _T_PN_API_INFO {
((IOCRIdentifier & PN_IOCR_NUMBER_MASK) >> 9u) ((IOCRIdentifier & PN_IOCR_NUMBER_MASK) >> 9u)
#define _PN_IOCR_CMDEV(IOCRIdentifier) (IOCRIdentifier & PN_IOCR_CMDEV_MASK) #define _PN_IOCR_CMDEV(IOCRIdentifier) (IOCRIdentifier & PN_IOCR_CMDEV_MASK)
typedef struct _T_PN_IOCR_INFO { typedef struct _T_PN_IOCR_INFO
{
PN_U8 IOCRIdentifierHighByte; PN_U8 IOCRIdentifierHighByte;
PN_U8 IOCRIdentifierLowByte; PN_U8 IOCRIdentifierLowByte;
...@@ -1110,7 +1126,8 @@ typedef struct _T_PN_IOCR_INFO { ...@@ -1110,7 +1126,8 @@ typedef struct _T_PN_IOCR_INFO {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DOWNLOAD_CON { typedef struct _T_PN_SERVICE_DOWNLOAD_CON
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -1136,7 +1153,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_CON { ...@@ -1136,7 +1153,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_CON {
#define PN_IDENT_MAINTENANCE_3_SUPPORTED (PN_U16)0x0008u #define PN_IDENT_MAINTENANCE_3_SUPPORTED (PN_U16)0x0008u
#define PN_IDENT_MAINTENANCE_4_SUPPORTED (PN_U16)0x0010u #define PN_IDENT_MAINTENANCE_4_SUPPORTED (PN_U16)0x0010u
typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_REQ { typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_REQ
{
PN_U8 TypeOfStation[SERVICE_SET_IDENTIFICATION_TYPE_OF_STATION_LENGTH]; PN_U8 TypeOfStation[SERVICE_SET_IDENTIFICATION_TYPE_OF_STATION_LENGTH];
PN_U8 OrderId[PROFINET_IDENT_MAINTENANCE_ORDER_ID_LENGTH]; PN_U8 OrderId[PROFINET_IDENT_MAINTENANCE_ORDER_ID_LENGTH];
PN_U8 SerialNumber[PROFINET_IDENT_MAINTENANCE_SR_NUMBER_LENGTH]; PN_U8 SerialNumber[PROFINET_IDENT_MAINTENANCE_SR_NUMBER_LENGTH];
...@@ -1168,7 +1186,8 @@ typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_REQ { ...@@ -1168,7 +1186,8 @@ typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_CON { typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_IDENTIFICATION_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_IDENTIFICATION_CON);
...@@ -1185,7 +1204,8 @@ typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_CON { ...@@ -1185,7 +1204,8 @@ typedef struct _T_PN_SERVICE_SET_IDENTIFICATION_CON {
#define MIN_WATCHDOG_INTERVAL (PN_U32)3uL #define MIN_WATCHDOG_INTERVAL (PN_U32)3uL
#define MAX_WATCHDOG_INTERVAL (PN_U32)60000uL #define MAX_WATCHDOG_INTERVAL (PN_U32)60000uL
typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_REQ { typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_REQ
{
PN_U8 WatchdogExpirationAction; PN_U8 WatchdogExpirationAction;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -1198,7 +1218,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_REQ { ...@@ -1198,7 +1218,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_CON { typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_CONFIGURE_WATCHDOG_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_CONFIGURE_WATCHDOG_CON);
...@@ -1268,14 +1289,15 @@ typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_CON { ...@@ -1268,14 +1289,15 @@ typedef struct _T_PN_SERVICE_CONFIGURE_WATCHDOG_CON {
#define PROFINET_SYNC_MODE_CABLE_DELAY_CHECK_ON (PN_U16)0x0001u #define PROFINET_SYNC_MODE_CABLE_DELAY_CHECK_ON (PN_U16)0x0001u
#define PROFINET_SYNC_MODE_SYNC_MASTER_CHECK_ON (PN_U16)0x0002u #define PROFINET_SYNC_MODE_SYNC_MASTER_CHECK_ON (PN_U16)0x0002u
#define PROFINET_SYNC_MODE_MASK \ #define PROFINET_SYNC_MODE_MASK \
(PN_U16)(PROFINET_SYNC_MODE_CABLE_DELAY_CHECK_ON \ (PN_U16)(PROFINET_SYNC_MODE_CABLE_DELAY_CHECK_ON | \
| PROFINET_SYNC_MODE_SYNC_MASTER_CHECK_ON) PROFINET_SYNC_MODE_SYNC_MASTER_CHECK_ON)
#define PROFINET_MAU_TYPE_MODE_DIFFERENCE_CHECK_ON (PN_U16)0x0001u #define PROFINET_MAU_TYPE_MODE_DIFFERENCE_CHECK_ON (PN_U16)0x0001u
#define PROFINET_MAU_TYPE_MODE_MASK \ #define PROFINET_MAU_TYPE_MODE_MASK \
(PN_U16)(PROFINET_MAU_TYPE_MODE_DIFFERENCE_CHECK_ON) (PN_U16)(PROFINET_MAU_TYPE_MODE_DIFFERENCE_CHECK_ON)
typedef struct _T_PN_NEIGHBOUR_PORT_DATA { typedef struct _T_PN_NEIGHBOUR_PORT_DATA
{
PN_U8 Flags; PN_U8 Flags;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -1312,7 +1334,8 @@ typedef struct _T_PN_NEIGHBOUR_PORT_DATA { ...@@ -1312,7 +1334,8 @@ typedef struct _T_PN_NEIGHBOUR_PORT_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_REQ { typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_REQ
{
PN_U8 NumberPorts; PN_U8 NumberPorts;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -1322,7 +1345,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_REQ { ...@@ -1322,7 +1345,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON { typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON);
...@@ -1334,7 +1358,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON { ...@@ -1334,7 +1358,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_NEIGHBOUR_DATA_CON {
#define MAX_LICENCE_DATA_LENGTH (PN_U16)256u #define MAX_LICENCE_DATA_LENGTH (PN_U16)256u
typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_REQ { typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_REQ
{
PN_U8 DataLengthHighByte; PN_U8 DataLengthHighByte;
PN_U8 DataLengthLowByte; PN_U8 DataLengthLowByte;
...@@ -1344,7 +1369,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_REQ { ...@@ -1344,7 +1369,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON { typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_CONFIGURE_LICENCE_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_CONFIGURE_LICENCE_CON);
...@@ -1363,12 +1389,12 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON { ...@@ -1363,12 +1389,12 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON {
#define PN_SYNC_DOMAIN_PRIORITY1_LEVEL7 0x38u #define PN_SYNC_DOMAIN_PRIORITY1_LEVEL7 0x38u
#define PN_SYNC_DOMAIN_PRIORITY1_MASTER_ACTIVE 0x80u #define PN_SYNC_DOMAIN_PRIORITY1_MASTER_ACTIVE 0x80u
#define PN_SYNC_DOMAIN_PRIORITY1_MASK \ #define PN_SYNC_DOMAIN_PRIORITY1_MASK \
(PN_SYNC_DOMAIN_PRIORITY1_PRIMARY_MASTER \ (PN_SYNC_DOMAIN_PRIORITY1_PRIMARY_MASTER | \
| PN_SYNC_DOMAIN_PRIORITY1_SECONDARY_MASTER \ PN_SYNC_DOMAIN_PRIORITY1_SECONDARY_MASTER | \
| PN_SYNC_DOMAIN_PRIORITY1_LEVEL0 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL1 \ PN_SYNC_DOMAIN_PRIORITY1_LEVEL0 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL1 | \
| PN_SYNC_DOMAIN_PRIORITY1_LEVEL2 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL3 \ PN_SYNC_DOMAIN_PRIORITY1_LEVEL2 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL3 | \
| PN_SYNC_DOMAIN_PRIORITY1_LEVEL4 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL5 \ PN_SYNC_DOMAIN_PRIORITY1_LEVEL4 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL5 | \
| PN_SYNC_DOMAIN_PRIORITY1_LEVEL6 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL7) PN_SYNC_DOMAIN_PRIORITY1_LEVEL6 | PN_SYNC_DOMAIN_PRIORITY1_LEVEL7)
#define PN_SYNC_DOMAIN_PRIORITY2_DEFAULT 0xFFu #define PN_SYNC_DOMAIN_PRIORITY2_DEFAULT 0xFFu
...@@ -1416,7 +1442,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON { ...@@ -1416,7 +1442,8 @@ typedef struct _T_PN_SERVICE_CONFIGURE_LICENCE_CON {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DEFAULT_API_DATA_RECORD { typedef struct _T_PN_DEFAULT_API_DATA_RECORD
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -1441,7 +1468,8 @@ typedef struct _T_PN_DEFAULT_API_DATA_RECORD { ...@@ -1441,7 +1468,8 @@ typedef struct _T_PN_DEFAULT_API_DATA_RECORD {
} PACK_BYTE_ALIGNMENT(T_PN_DEFAULT_API_DATA_RECORD); } PACK_BYTE_ALIGNMENT(T_PN_DEFAULT_API_DATA_RECORD);
typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_REQ { typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_REQ
{
PN_U8 NumberOfDataRecordsHighByte; PN_U8 NumberOfDataRecordsHighByte;
PN_U8 NumberOfDataRecordsLowByte; PN_U8 NumberOfDataRecordsLowByte;
...@@ -1453,7 +1481,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_REQ { ...@@ -1453,7 +1481,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON { typedef struct _T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON);
...@@ -1478,7 +1507,8 @@ typedef T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON ...@@ -1478,7 +1507,8 @@ typedef T_PN_SERVICE_DOWNLOAD_IRT_DOMAIN_CON
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_BLOCK_HEADER { typedef struct _T_PROFINET_BLOCK_HEADER
{
PN_U8 TypeHighByte; PN_U8 TypeHighByte;
PN_U8 TypeLowByte; PN_U8 TypeLowByte;
...@@ -1492,7 +1522,8 @@ typedef struct _T_PROFINET_BLOCK_HEADER { ...@@ -1492,7 +1522,8 @@ typedef struct _T_PROFINET_BLOCK_HEADER {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_EXTENDED_BLOCK { typedef struct _T_PN_EXTENDED_BLOCK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
/* /*
...@@ -1509,11 +1540,12 @@ typedef struct _T_PN_EXTENDED_BLOCK { ...@@ -1509,11 +1540,12 @@ typedef struct _T_PN_EXTENDED_BLOCK {
#define CONFIG_ID_SELECTOR_AR_SET_4 (PN_U16)0x0004u #define CONFIG_ID_SELECTOR_AR_SET_4 (PN_U16)0x0004u
#define CONFIG_ID_SELECTOR_NUMBER_AR_PER_SET (PN_U16)0x0010u #define CONFIG_ID_SELECTOR_NUMBER_AR_PER_SET (PN_U16)0x0010u
#define CONFIG_ID_SELECTOR_MASK \ #define CONFIG_ID_SELECTOR_MASK \
(PN_U16)(CONFIG_ID_SELECTOR_AR_SET_1 | CONFIG_ID_SELECTOR_AR_SET_2 \ (PN_U16)(CONFIG_ID_SELECTOR_AR_SET_1 | CONFIG_ID_SELECTOR_AR_SET_2 | \
| CONFIG_ID_SELECTOR_AR_SET_3 | CONFIG_ID_SELECTOR_AR_SET_4 \ CONFIG_ID_SELECTOR_AR_SET_3 | CONFIG_ID_SELECTOR_AR_SET_4 | \
| CONFIG_ID_SELECTOR_NUMBER_AR_PER_SET) CONFIG_ID_SELECTOR_NUMBER_AR_PER_SET)
typedef struct _T_PN_EXTENDED_BLOCK_CONFIG_ID { typedef struct _T_PN_EXTENDED_BLOCK_CONFIG_ID
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Reserved[2]; PN_U8 Reserved[2];
...@@ -1547,7 +1579,8 @@ typedef struct _T_PN_EXTENDED_BLOCK_CONFIG_ID { ...@@ -1547,7 +1579,8 @@ typedef struct _T_PN_EXTENDED_BLOCK_CONFIG_ID {
#define PN_SERVICE_ERROR_DOWNLOAD_EXTENDED_INVALID_RESERVED_BYTE 0x08u #define PN_SERVICE_ERROR_DOWNLOAD_EXTENDED_INVALID_RESERVED_BYTE 0x08u
#define PN_SERVICE_ERROR_DOWNLOAD_EXTENDED_INVALID_SELECTOR 0x09u #define PN_SERVICE_ERROR_DOWNLOAD_EXTENDED_INVALID_SELECTOR 0x09u
typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_REQ { typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_REQ
{
PN_U8 NumberOfBlocksHighByte; PN_U8 NumberOfBlocksHighByte;
PN_U8 NumberOfBlocksLowByte; PN_U8 NumberOfBlocksLowByte;
...@@ -1561,7 +1594,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_REQ { ...@@ -1561,7 +1594,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON { typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_EXTENDED_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DOWNLOAD_EXTENDED_CON);
...@@ -1608,11 +1642,11 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON { ...@@ -1608,11 +1642,11 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON {
#define PROFINET_ALARM_SPECIFIER_SUBMODULE_DIAGNOSIS_STATE (PN_U16)0x2000u #define PROFINET_ALARM_SPECIFIER_SUBMODULE_DIAGNOSIS_STATE (PN_U16)0x2000u
#define PROFINET_ALARM_SPECIFIER_AR_DIAGNOSIS_STATE (PN_U16)0x8000u #define PROFINET_ALARM_SPECIFIER_AR_DIAGNOSIS_STATE (PN_U16)0x8000u
#define PROFINET_ALARM_SPECIFIER_MASK \ #define PROFINET_ALARM_SPECIFIER_MASK \
(PROFINET_ALARM_SPECIFIER_SEQUENCE_MASK \ (PROFINET_ALARM_SPECIFIER_SEQUENCE_MASK | \
| PROFINET_ALARM_SPECIFIER_CHANNEL_DIAGNOSIS \ PROFINET_ALARM_SPECIFIER_CHANNEL_DIAGNOSIS | \
| PROFINET_ALARM_SPECIFIER_MANUFACTURER_DIAGNOSIS \ PROFINET_ALARM_SPECIFIER_MANUFACTURER_DIAGNOSIS | \
| PROFINET_ALARM_SPECIFIER_SUBMODULE_DIAGNOSIS_STATE \ PROFINET_ALARM_SPECIFIER_SUBMODULE_DIAGNOSIS_STATE | \
| PROFINET_ALARM_SPECIFIER_AR_DIAGNOSIS_STATE) PROFINET_ALARM_SPECIFIER_AR_DIAGNOSIS_STATE)
#define PROFINET_ALARM_USER_STRUCTURE_IDENT_MANUFACTURER_LOWER_LIMIT \ #define PROFINET_ALARM_USER_STRUCTURE_IDENT_MANUFACTURER_LOWER_LIMIT \
(PN_U16)0x0000u (PN_U16)0x0000u
...@@ -1648,8 +1682,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON { ...@@ -1648,8 +1682,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON {
#define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN (PN_U16)0x2000u #define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN (PN_U16)0x2000u
#define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_OUT (PN_U16)0x4000u #define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_OUT (PN_U16)0x4000u
#define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN_OUT \ #define PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN_OUT \
(PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN \ (PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_IN | \
| PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_OUT) PROFINET_ALARM_CHANNEL_PROPERTIES_DIRECTION_OUT)
#define PROFINET_CH_ERR_TYPE_SHORT_CIRCUIT (PN_U16)0x0001u #define PROFINET_CH_ERR_TYPE_SHORT_CIRCUIT (PN_U16)0x0001u
#define PROFINET_CH_ERR_TYPE_UNDERVOLTAGE (PN_U16)0x0002u #define PROFINET_CH_ERR_TYPE_UNDERVOLTAGE (PN_U16)0x0002u
...@@ -1775,7 +1809,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON { ...@@ -1775,7 +1809,8 @@ typedef struct _T_PN_SERVICE_DOWNLOAD_EXTENDED_CON {
/* used with channel error type 0x800E */ /* used with channel error type 0x800E */
#define PROFINET_EXT_CH_ERR_TYPE_SUBORDINATED_ENTITY_INFO (PN_U16)0x8000u #define PROFINET_EXT_CH_ERR_TYPE_SUBORDINATED_ENTITY_INFO (PN_U16)0x8000u
typedef struct _T_PN_SERVICE_GET_ALARM_REQ { typedef struct _T_PN_SERVICE_GET_ALARM_REQ
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -1783,7 +1818,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_REQ { ...@@ -1783,7 +1818,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_GET_ALARM_CON { typedef struct _T_PN_SERVICE_GET_ALARM_CON
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -1828,7 +1864,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_CON { ...@@ -1828,7 +1864,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_ALARM_ACK_REQ { typedef struct _T_PN_SERVICE_ALARM_ACK_REQ
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -1839,7 +1876,8 @@ typedef struct _T_PN_SERVICE_ALARM_ACK_REQ { ...@@ -1839,7 +1876,8 @@ typedef struct _T_PN_SERVICE_ALARM_ACK_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_ALARM_ACK_CON { typedef struct _T_PN_SERVICE_ALARM_ACK_CON
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -1847,7 +1885,8 @@ typedef struct _T_PN_SERVICE_ALARM_ACK_CON { ...@@ -1847,7 +1885,8 @@ typedef struct _T_PN_SERVICE_ALARM_ACK_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_MAINTENANCE_ITEM { typedef struct _T_PROFINET_MAINTENANCE_ITEM
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -1864,7 +1903,8 @@ typedef struct _T_PROFINET_MAINTENANCE_ITEM { ...@@ -1864,7 +1903,8 @@ typedef struct _T_PROFINET_MAINTENANCE_ITEM {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_UPLOAD_RETRIEVAL_ITEM { typedef struct _T_PROFINET_UPLOAD_RETRIEVAL_ITEM
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -1888,7 +1928,8 @@ typedef struct _T_PROFINET_UPLOAD_RETRIEVAL_ITEM { ...@@ -1888,7 +1928,8 @@ typedef struct _T_PROFINET_UPLOAD_RETRIEVAL_ITEM {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IPARAMETER_ITEM { typedef struct _T_PROFINET_IPARAMETER_ITEM
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -1920,7 +1961,8 @@ typedef struct _T_PROFINET_IPARAMETER_ITEM { ...@@ -1920,7 +1961,8 @@ typedef struct _T_PROFINET_IPARAMETER_ITEM {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_CHANNEL_DIAG { typedef struct _T_PROFINET_CHANNEL_DIAG
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -1937,7 +1979,8 @@ typedef struct _T_PROFINET_CHANNEL_DIAG { ...@@ -1937,7 +1979,8 @@ typedef struct _T_PROFINET_CHANNEL_DIAG {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_EXT_CHANNEL_DIAG { typedef struct _T_PROFINET_EXT_CHANNEL_DIAG
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -1980,7 +2023,8 @@ typedef struct _T_PROFINET_EXT_CHANNEL_DIAG { ...@@ -1980,7 +2023,8 @@ typedef struct _T_PROFINET_EXT_CHANNEL_DIAG {
#define PROFINET_QUALIFIED_CHANNEL_DIAG_QUALIFIER_27 \ #define PROFINET_QUALIFIED_CHANNEL_DIAG_QUALIFIER_27 \
(PN_U32)0x08000000u /* Start of Fault */ (PN_U32)0x08000000u /* Start of Fault */
typedef struct _T_PROFINET_QUALIFIED_CHANNEL_DIAG { typedef struct _T_PROFINET_QUALIFIED_CHANNEL_DIAG
{
PN_U8 UserStructureIdentifierHighByte; PN_U8 UserStructureIdentifierHighByte;
PN_U8 UserStructureIdentifierLowByte; PN_U8 UserStructureIdentifierLowByte;
...@@ -2017,7 +2061,8 @@ typedef struct _T_PROFINET_QUALIFIED_CHANNEL_DIAG { ...@@ -2017,7 +2061,8 @@ typedef struct _T_PROFINET_QUALIFIED_CHANNEL_DIAG {
#define PN_SERVICE_ALARM_INVALID_SPECIFIER 0x05u #define PN_SERVICE_ALARM_INVALID_SPECIFIER 0x05u
#define PN_SERVICE_ALARM_INVALID_LENGTH 0x06u #define PN_SERVICE_ALARM_INVALID_LENGTH 0x06u
typedef struct _T_PN_SERVICE_ALARM_REQ { typedef struct _T_PN_SERVICE_ALARM_REQ
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -2062,7 +2107,8 @@ typedef struct _T_PN_SERVICE_ALARM_REQ { ...@@ -2062,7 +2107,8 @@ typedef struct _T_PN_SERVICE_ALARM_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_ALARM_CON { typedef struct _T_PN_SERVICE_ALARM_CON
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -2070,7 +2116,8 @@ typedef struct _T_PN_SERVICE_ALARM_CON { ...@@ -2070,7 +2116,8 @@ typedef struct _T_PN_SERVICE_ALARM_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_GET_ALARM_ACK_REQ { typedef struct _T_PN_SERVICE_GET_ALARM_ACK_REQ
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -2078,7 +2125,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_ACK_REQ { ...@@ -2078,7 +2125,8 @@ typedef struct _T_PN_SERVICE_GET_ALARM_ACK_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_GET_ALARM_ACK_CON { typedef struct _T_PN_SERVICE_GET_ALARM_ACK_CON
{
PN_U8 AlarmRefHighByte; PN_U8 AlarmRefHighByte;
PN_U8 AlarmRefLowByte; PN_U8 AlarmRefLowByte;
...@@ -2112,14 +2160,16 @@ typedef struct _T_PN_SERVICE_GET_ALARM_ACK_CON { ...@@ -2112,14 +2160,16 @@ typedef struct _T_PN_SERVICE_GET_ALARM_ACK_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_REQ { typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_REQ
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_DEVICE_STATE_REQ); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_DEVICE_STATE_REQ);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_ERROR_CODE { typedef struct _T_PN_ERROR_CODE
{
PN_U8 Reason; PN_U8 Reason;
PN_U8 Decode; PN_U8 Decode;
...@@ -2134,7 +2184,8 @@ typedef T_PN_ERROR_CODE T_PROFINET_ERROR_CODE; ...@@ -2134,7 +2184,8 @@ typedef T_PN_ERROR_CODE T_PROFINET_ERROR_CODE;
#define PROFINET_STATUS_OK 0uL #define PROFINET_STATUS_OK 0uL
typedef struct _T_PROFINET_STATUS { typedef struct _T_PROFINET_STATUS
{
union { union {
PN_U32 Status; PN_U32 Status;
PN_U32 RpcError; PN_U32 RpcError;
...@@ -2147,7 +2198,8 @@ typedef struct _T_PROFINET_STATUS { ...@@ -2147,7 +2198,8 @@ typedef struct _T_PROFINET_STATUS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DIFF_MODULE_API { typedef struct _T_PN_DIFF_MODULE_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -2169,11 +2221,12 @@ typedef struct _T_PN_DIFF_MODULE_API { ...@@ -2169,11 +2221,12 @@ typedef struct _T_PN_DIFF_MODULE_API {
#define PROFINET_MODULE_STATE_PROPER_MODULE 0x0002u #define PROFINET_MODULE_STATE_PROPER_MODULE 0x0002u
#define PROFINET_MODULE_STATE_SUBSTITUTE_MODULE 0x0003u #define PROFINET_MODULE_STATE_SUBSTITUTE_MODULE 0x0003u
#define PROFINET_MODULE_STATE_MASK \ #define PROFINET_MODULE_STATE_MASK \
(PROFINET_MODULE_STATE_NO_MODULE | PROFINET_MODULE_STATE_WRONG_MODULE \ (PROFINET_MODULE_STATE_NO_MODULE | PROFINET_MODULE_STATE_WRONG_MODULE | \
| PROFINET_MODULE_STATE_PROPER_MODULE \ PROFINET_MODULE_STATE_PROPER_MODULE | \
| PROFINET_MODULE_STATE_SUBSTITUTE_MODULE) PROFINET_MODULE_STATE_SUBSTITUTE_MODULE)
typedef struct _T_PN_DIFF_MODULE_SLOT { typedef struct _T_PN_DIFF_MODULE_SLOT
{
PN_U8 SlotNumberHighByte; PN_U8 SlotNumberHighByte;
PN_U8 SlotNumberLowByte; PN_U8 SlotNumberLowByte;
...@@ -2243,7 +2296,8 @@ typedef struct _T_PN_DIFF_MODULE_SLOT { ...@@ -2243,7 +2296,8 @@ typedef struct _T_PN_DIFF_MODULE_SLOT {
#define PROFINET_SUBMODULE_STATE_IDENT_INFO_RESRERVED \ #define PROFINET_SUBMODULE_STATE_IDENT_INFO_RESRERVED \
(PROFINET_SUBMODULE_STATE_FORMAT_INDICATOR | 0x6000u) (PROFINET_SUBMODULE_STATE_FORMAT_INDICATOR | 0x6000u)
typedef struct _T_PN_DIFF_MODULE_SUBSLOT { typedef struct _T_PN_DIFF_MODULE_SUBSLOT
{
PN_U8 SubSlotNumberHighByte; PN_U8 SubSlotNumberHighByte;
PN_U8 SubSlotNumberLowByte; PN_U8 SubSlotNumberLowByte;
...@@ -2259,7 +2313,8 @@ typedef struct _T_PN_DIFF_MODULE_SUBSLOT { ...@@ -2259,7 +2313,8 @@ typedef struct _T_PN_DIFF_MODULE_SUBSLOT {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DIFF_MODULE { typedef struct _T_PN_DIFF_MODULE
{
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
PN_U8 NumberOfAPIsLowByte; PN_U8 NumberOfAPIsLowByte;
...@@ -2271,7 +2326,8 @@ typedef struct _T_PN_DIFF_MODULE { ...@@ -2271,7 +2326,8 @@ typedef struct _T_PN_DIFF_MODULE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_CON { typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_CON
{
PN_U8 StateHighByte; PN_U8 StateHighByte;
PN_U8 StateLowByte; PN_U8 StateLowByte;
...@@ -2289,14 +2345,16 @@ typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_CON { ...@@ -2289,14 +2345,16 @@ typedef struct _T_PN_SERVICE_GET_DEVICE_STATE_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_REQ { typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_REQ
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_LIST_OF_STATION_REQ); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_LIST_OF_STATION_REQ);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DEVICE_IP_INFO { typedef struct _T_PN_DEVICE_IP_INFO
{
PN_U8 AddressHighWordHighByte; PN_U8 AddressHighWordHighByte;
PN_U8 AddressHighWordLowByte; PN_U8 AddressHighWordLowByte;
PN_U8 AddressLowWordHighByte; PN_U8 AddressLowWordHighByte;
...@@ -2321,7 +2379,8 @@ typedef struct _T_PN_DEVICE_IP_INFO { ...@@ -2321,7 +2379,8 @@ typedef struct _T_PN_DEVICE_IP_INFO {
#define DEVICE_TYPE_IO_MULTI_DEVICE 0x04u #define DEVICE_TYPE_IO_MULTI_DEVICE 0x04u
#define DEVICE_TYPE_IO_SUPERVISOR 0x08u #define DEVICE_TYPE_IO_SUPERVISOR 0x08u
typedef struct _T_PN_DEVICE_PROPERTY_INFO { typedef struct _T_PN_DEVICE_PROPERTY_INFO
{
PN_U8 DeviceIdHighByte; PN_U8 DeviceIdHighByte;
PN_U8 DeviceIdLowByte; PN_U8 DeviceIdLowByte;
...@@ -2335,7 +2394,8 @@ typedef struct _T_PN_DEVICE_PROPERTY_INFO { ...@@ -2335,7 +2394,8 @@ typedef struct _T_PN_DEVICE_PROPERTY_INFO {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DEVICE_INFO { typedef struct _T_PN_DEVICE_INFO
{
T_PN_MAC_ADDRESS MacAddress; T_PN_MAC_ADDRESS MacAddress;
T_PN_DEVICE_IP_INFO Ip; T_PN_DEVICE_IP_INFO Ip;
T_PN_DEVICE_PROPERTY_INFO Property; T_PN_DEVICE_PROPERTY_INFO Property;
...@@ -2351,7 +2411,8 @@ typedef struct _T_PN_DEVICE_INFO { ...@@ -2351,7 +2411,8 @@ typedef struct _T_PN_DEVICE_INFO {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_CON { typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_CON
{
PN_U8 NumberOfDevicesHighByte; PN_U8 NumberOfDevicesHighByte;
PN_U8 NumberOfDevicesLowByte; PN_U8 NumberOfDevicesLowByte;
...@@ -2386,7 +2447,8 @@ typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_CON { ...@@ -2386,7 +2447,8 @@ typedef struct _T_PN_SERVICE_GET_LIST_OF_STATION_CON {
#define PN_SERVICE_SET_IP_SETTINGS_RESPONSE_TIMEOUT \ #define PN_SERVICE_SET_IP_SETTINGS_RESPONSE_TIMEOUT \
PN_SERVICE_SET_RESPONSE_TIMEOUT PN_SERVICE_SET_RESPONSE_TIMEOUT
typedef struct _T_PN_SERVICE_SET_NAME_REQ { typedef struct _T_PN_SERVICE_SET_NAME_REQ
{
T_PN_MAC_ADDRESS DestMacAddress; T_PN_MAC_ADDRESS DestMacAddress;
PN_U8 NameLengthHighByte; PN_U8 NameLengthHighByte;
...@@ -2398,14 +2460,16 @@ typedef struct _T_PN_SERVICE_SET_NAME_REQ { ...@@ -2398,14 +2460,16 @@ typedef struct _T_PN_SERVICE_SET_NAME_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_SET_NAME_CON { typedef struct _T_PN_SERVICE_SET_NAME_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_NAME_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_NAME_CON);
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_REQ { typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_REQ
{
T_PN_MAC_ADDRESS DestMacAddress; T_PN_MAC_ADDRESS DestMacAddress;
PN_U8 AddressHighWordHighByte; PN_U8 AddressHighWordHighByte;
...@@ -2427,7 +2491,8 @@ typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_REQ { ...@@ -2427,7 +2491,8 @@ typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_CON { typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_IP_SETTINGS_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_SET_IP_SETTINGS_CON);
...@@ -2489,7 +2554,8 @@ typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_CON { ...@@ -2489,7 +2554,8 @@ typedef struct _T_PN_SERVICE_SET_IP_SETTINGS_CON {
#define SOFTING_CONFIGURATION_LAST_FRAGMENT (PN_U32)0x80000000uL #define SOFTING_CONFIGURATION_LAST_FRAGMENT (PN_U32)0x80000000uL
typedef struct _T_PN_STORE_SOFTING_CONFIGURATION { typedef struct _T_PN_STORE_SOFTING_CONFIGURATION
{
PN_U8 ConfigLengthHighWordHighByte; PN_U8 ConfigLengthHighWordHighByte;
PN_U8 ConfigLengthHighWordLowByte; PN_U8 ConfigLengthHighWordLowByte;
PN_U8 ConfigLengthLowWordHighByte; PN_U8 ConfigLengthLowWordHighByte;
...@@ -2515,7 +2581,8 @@ typedef struct _T_PN_STORE_SOFTING_CONFIGURATION { ...@@ -2515,7 +2581,8 @@ typedef struct _T_PN_STORE_SOFTING_CONFIGURATION {
#define PROFILE_INFO_TASK_PROFILING (PN_U8)255u #define PROFILE_INFO_TASK_PROFILING (PN_U8)255u
typedef struct _T_PN_PROFILE_INFO { typedef struct _T_PN_PROFILE_INFO
{
PN_U8 Action; PN_U8 Action;
PN_U8 ModuleId; PN_U8 ModuleId;
...@@ -2525,7 +2592,8 @@ typedef struct _T_PN_PROFILE_INFO { ...@@ -2525,7 +2592,8 @@ typedef struct _T_PN_PROFILE_INFO {
#define PN_SERVICE_DCP_SET_RESPONSE_TIMEOUT PN_SERVICE_SET_RESPONSE_TIMEOUT #define PN_SERVICE_DCP_SET_RESPONSE_TIMEOUT PN_SERVICE_SET_RESPONSE_TIMEOUT
typedef struct _T_PN_SERVICE_DCP_SET_REQ { typedef struct _T_PN_SERVICE_DCP_SET_REQ
{
T_PN_MAC_ADDRESS DestMacAddress; T_PN_MAC_ADDRESS DestMacAddress;
PN_U8 Option; PN_U8 Option;
...@@ -2548,7 +2616,8 @@ typedef struct _T_PN_SERVICE_DCP_SET_REQ { ...@@ -2548,7 +2616,8 @@ typedef struct _T_PN_SERVICE_DCP_SET_REQ {
#define DCP_RESULT_RESOURCE_ERROR (PN_U8)4u #define DCP_RESULT_RESOURCE_ERROR (PN_U8)4u
#define DCP_RESULT_SET_NOT_POSSIBLE (PN_U8)5u #define DCP_RESULT_SET_NOT_POSSIBLE (PN_U8)5u
typedef struct _T_PN_SERVICE_DCP_SET_CON { typedef struct _T_PN_SERVICE_DCP_SET_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DCP_SET_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_DCP_SET_CON);
...@@ -2557,7 +2626,8 @@ typedef struct _T_PN_SERVICE_DCP_SET_CON { ...@@ -2557,7 +2626,8 @@ typedef struct _T_PN_SERVICE_DCP_SET_CON {
#define PN_SERVICE_DCP_GET_RESPONSE_TIMEOUT PN_SERVICE_SET_RESPONSE_TIMEOUT #define PN_SERVICE_DCP_GET_RESPONSE_TIMEOUT PN_SERVICE_SET_RESPONSE_TIMEOUT
typedef struct _T_PN_SERVICE_DCP_GET_REQ { typedef struct _T_PN_SERVICE_DCP_GET_REQ
{
T_PN_MAC_ADDRESS DestMacAddress; T_PN_MAC_ADDRESS DestMacAddress;
PN_U8 Option; PN_U8 Option;
...@@ -2567,13 +2637,15 @@ typedef struct _T_PN_SERVICE_DCP_GET_REQ { ...@@ -2567,13 +2637,15 @@ typedef struct _T_PN_SERVICE_DCP_GET_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SYS_TIME { typedef struct _T_PN_SYS_TIME
{
PN_U32 HighPart; PN_U32 HighPart;
PN_U32 LowPart; PN_U32 LowPart;
} PACK_BYTE_ALIGNMENT(T_PN_SYS_TIME); } PACK_BYTE_ALIGNMENT(T_PN_SYS_TIME);
typedef struct _T_PN_PROFILE_ENTRY { typedef struct _T_PN_PROFILE_ENTRY
{
PN_U32 Identifier; PN_U32 Identifier;
T_PN_SYS_TIME Time; T_PN_SYS_TIME Time;
...@@ -2584,7 +2656,8 @@ typedef struct _T_PN_PROFILE_ENTRY { ...@@ -2584,7 +2656,8 @@ typedef struct _T_PN_PROFILE_ENTRY {
#define PROFILE_DATA_ENCODING_BIG_ENDIAN 0x00u #define PROFILE_DATA_ENCODING_BIG_ENDIAN 0x00u
#define PROFILE_DATA_ENCODING_LITTLE_ENDIAN 0x01u #define PROFILE_DATA_ENCODING_LITTLE_ENDIAN 0x01u
typedef struct _T_PN_PROFILE_INFO_HEADER { typedef struct _T_PN_PROFILE_INFO_HEADER
{
PN_U32 Version; PN_U32 Version;
PN_U32 CountsPer1ms; PN_U32 CountsPer1ms;
...@@ -2600,7 +2673,8 @@ typedef struct _T_PN_PROFILE_INFO_HEADER { ...@@ -2600,7 +2673,8 @@ typedef struct _T_PN_PROFILE_INFO_HEADER {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_DCP_BLOCK_INFO { typedef struct _T_PROFINET_DCP_BLOCK_INFO
{
PN_U8 BlockInfoHighByte; PN_U8 BlockInfoHighByte;
PN_U8 BlockInfoLowByte; PN_U8 BlockInfoLowByte;
...@@ -2611,7 +2685,8 @@ typedef struct _T_PROFINET_DCP_BLOCK_INFO { ...@@ -2611,7 +2685,8 @@ typedef struct _T_PROFINET_DCP_BLOCK_INFO {
#define STORE_CONFIGURATION_RESULT_OK 0x00u #define STORE_CONFIGURATION_RESULT_OK 0x00u
#define STORE_CONFIGURATION_RESULT_BUSY 0xFFu #define STORE_CONFIGURATION_RESULT_BUSY 0xFFu
typedef struct _T_PN_STORE_SOFTING_CONFIGURATION_RESULT { typedef struct _T_PN_STORE_SOFTING_CONFIGURATION_RESULT
{
PN_U8 Result; PN_U8 Result;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -2619,7 +2694,8 @@ typedef struct _T_PN_STORE_SOFTING_CONFIGURATION_RESULT { ...@@ -2619,7 +2694,8 @@ typedef struct _T_PN_STORE_SOFTING_CONFIGURATION_RESULT {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DCP_GET_CON { typedef struct _T_PN_SERVICE_DCP_GET_CON
{
PN_U8 Option; PN_U8 Option;
PN_U8 Suboption; PN_U8 Suboption;
...@@ -2658,7 +2734,8 @@ typedef struct _T_PN_SERVICE_DCP_GET_CON { ...@@ -2658,7 +2734,8 @@ typedef struct _T_PN_SERVICE_DCP_GET_CON {
#define APPLICATION_DATA_OPTION_RESULT_RESOURCE_ERROR (PN_U8)4u #define APPLICATION_DATA_OPTION_RESULT_RESOURCE_ERROR (PN_U8)4u
#define APPLICATION_DATA_OPTION_RESULT_SET_NOT_POSSIBLE (PN_U8)5u #define APPLICATION_DATA_OPTION_RESULT_SET_NOT_POSSIBLE (PN_U8)5u
typedef struct _T_PN_APPLICATION_OPTION { typedef struct _T_PN_APPLICATION_OPTION
{
PN_U8 Option; PN_U8 Option;
PN_U8 Suboption; PN_U8 Suboption;
...@@ -2666,7 +2743,8 @@ typedef struct _T_PN_APPLICATION_OPTION { ...@@ -2666,7 +2743,8 @@ typedef struct _T_PN_APPLICATION_OPTION {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_APPLICATION_OPTION_DATA { typedef struct _T_PN_APPLICATION_OPTION_DATA
{
PN_U8 Option; PN_U8 Option;
PN_U8 Suboption; PN_U8 Suboption;
...@@ -2680,7 +2758,8 @@ typedef struct _T_PN_APPLICATION_OPTION_DATA { ...@@ -2680,7 +2758,8 @@ typedef struct _T_PN_APPLICATION_OPTION_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_APPLICATION_OPTION_RESULT { typedef struct _T_PN_APPLICATION_OPTION_RESULT
{
PN_U8 Option; PN_U8 Option;
PN_U8 Suboption; PN_U8 Suboption;
...@@ -2692,7 +2771,8 @@ typedef struct _T_PN_APPLICATION_OPTION_RESULT { ...@@ -2692,7 +2771,8 @@ typedef struct _T_PN_APPLICATION_OPTION_RESULT {
typedef T_PN_APPLICATION_OPTION T_PN_APPLICATION_OPTION_GET; typedef T_PN_APPLICATION_OPTION T_PN_APPLICATION_OPTION_GET;
typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_IND { typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_IND
{
PN_U8 NumberOptionsHighByte; PN_U8 NumberOptionsHighByte;
PN_U8 NumberOptionsLowByte; PN_U8 NumberOptionsLowByte;
...@@ -2705,7 +2785,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_IND { ...@@ -2705,7 +2785,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_IND {
typedef T_PN_APPLICATION_OPTION_DATA T_PN_APPLICATION_OPTION_DATA_GET; typedef T_PN_APPLICATION_OPTION_DATA T_PN_APPLICATION_OPTION_DATA_GET;
typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_RES { typedef struct _T_PN_SERVICE_APPLICATION_DATA_GET_RES
{
PN_U8 NumberOptionsHighByte; PN_U8 NumberOptionsHighByte;
PN_U8 NumberOptionsLowByte; PN_U8 NumberOptionsLowByte;
...@@ -2720,7 +2801,8 @@ typedef T_PN_APPLICATION_OPTION_DATA T_PN_APPLICATION_OPTION_DATA_SET; ...@@ -2720,7 +2801,8 @@ typedef T_PN_APPLICATION_OPTION_DATA T_PN_APPLICATION_OPTION_DATA_SET;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_IND { typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_IND
{
PN_U8 NumberOptionsHighByte; PN_U8 NumberOptionsHighByte;
PN_U8 NumberOptionsLowByte; PN_U8 NumberOptionsLowByte;
...@@ -2733,7 +2815,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_IND { ...@@ -2733,7 +2815,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_IND {
typedef T_PN_APPLICATION_OPTION_RESULT T_PN_APPLICATION_OPTION_SET; typedef T_PN_APPLICATION_OPTION_RESULT T_PN_APPLICATION_OPTION_SET;
typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_RES { typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_RES
{
PN_U8 NumberOptionsHighByte; PN_U8 NumberOptionsHighByte;
PN_U8 NumberOptionsLowByte; PN_U8 NumberOptionsLowByte;
...@@ -2744,7 +2827,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_RES { ...@@ -2744,7 +2827,8 @@ typedef struct _T_PN_SERVICE_APPLICATION_DATA_SET_RES {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_REQ { typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_REQ
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_ETHERNET_DATA_REQ); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_GET_ETHERNET_DATA_REQ);
...@@ -2777,7 +2861,8 @@ typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_REQ { ...@@ -2777,7 +2861,8 @@ typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_REQ {
#define PN_LINE_LENGTH_UNKNOWN (PN_U16)0xFFFFu #define PN_LINE_LENGTH_UNKNOWN (PN_U16)0xFFFFu
#define PN_DELAY_UNKNOWN (PN_U32)0uL #define PN_DELAY_UNKNOWN (PN_U32)0uL
typedef struct _T_PN_PORT_DATA { typedef struct _T_PN_PORT_DATA
{
PN_U8 LinkState; PN_U8 LinkState;
PN_U8 Autonegotiation; PN_U8 Autonegotiation;
...@@ -2834,7 +2919,8 @@ typedef struct _T_PN_PORT_DATA { ...@@ -2834,7 +2919,8 @@ typedef struct _T_PN_PORT_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_CON { typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_CON
{
PN_U8 Flags; PN_U8 Flags;
PN_U8 AdditionalFlags; PN_U8 AdditionalFlags;
...@@ -2865,7 +2951,8 @@ typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_CON { ...@@ -2865,7 +2951,8 @@ typedef struct _T_PN_SERVICE_GET_ETHERNET_DATA_CON {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_CONNECT_IO_LOCATION { typedef struct _T_PN_CONNECT_IO_LOCATION
{
PN_U8 SlotNumberHighByte; PN_U8 SlotNumberHighByte;
PN_U8 SlotNumberLowByte; PN_U8 SlotNumberLowByte;
...@@ -2879,7 +2966,8 @@ typedef struct _T_PN_CONNECT_IO_LOCATION { ...@@ -2879,7 +2966,8 @@ typedef struct _T_PN_CONNECT_IO_LOCATION {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_IOCR_API { typedef struct _T_PN_CONNECT_IOCR_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -2900,7 +2988,8 @@ typedef struct _T_PN_CONNECT_IOCR_API { ...@@ -2900,7 +2988,8 @@ typedef struct _T_PN_CONNECT_IOCR_API {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_IOCR { typedef struct _T_PN_CONNECT_IOCR
{
PN_U8 IOCRIdentifierHighByte; PN_U8 IOCRIdentifierHighByte;
PN_U8 IOCRIdentifierLowByte; PN_U8 IOCRIdentifierLowByte;
...@@ -2927,7 +3016,8 @@ typedef struct _T_PN_CONNECT_IOCR { ...@@ -2927,7 +3016,8 @@ typedef struct _T_PN_CONNECT_IOCR {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_SUBMODULE { typedef struct _T_PN_CONNECT_SUBMODULE
{
PN_U8 SubSlotNumberHighByte; PN_U8 SubSlotNumberHighByte;
PN_U8 SubSlotNumberLowByte; PN_U8 SubSlotNumberLowByte;
...@@ -2952,7 +3042,8 @@ typedef struct _T_PN_CONNECT_SUBMODULE { ...@@ -2952,7 +3042,8 @@ typedef struct _T_PN_CONNECT_SUBMODULE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_MODULE_API { typedef struct _T_PN_CONNECT_MODULE_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -2976,7 +3067,8 @@ typedef struct _T_PN_CONNECT_MODULE_API { ...@@ -2976,7 +3067,8 @@ typedef struct _T_PN_CONNECT_MODULE_API {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_MODULE { typedef struct _T_PN_CONNECT_MODULE
{
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
PN_U8 NumberOfAPIsLowByte; PN_U8 NumberOfAPIsLowByte;
...@@ -2988,7 +3080,8 @@ typedef struct _T_PN_CONNECT_MODULE { ...@@ -2988,7 +3080,8 @@ typedef struct _T_PN_CONNECT_MODULE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_AR_VENDOR_BLOCK { typedef struct _T_PN_CONNECT_AR_VENDOR_BLOCK
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -3011,7 +3104,8 @@ typedef struct _T_PN_CONNECT_AR_VENDOR_BLOCK { ...@@ -3011,7 +3104,8 @@ typedef struct _T_PN_CONNECT_AR_VENDOR_BLOCK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONNECT_REDUNDANCY_BLOCK { typedef struct _T_PN_CONNECT_REDUNDANCY_BLOCK
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -3032,7 +3126,8 @@ typedef struct _T_PN_CONNECT_REDUNDANCY_BLOCK { ...@@ -3032,7 +3126,8 @@ typedef struct _T_PN_CONNECT_REDUNDANCY_BLOCK {
#define PROFINET_AR_TYPE_IOCARSINGLE_RT3 (PN_U16)0x0010u #define PROFINET_AR_TYPE_IOCARSINGLE_RT3 (PN_U16)0x0010u
#define PROFINET_AR_TYPE_IOCAR_SR (PN_U16)0x0020u #define PROFINET_AR_TYPE_IOCAR_SR (PN_U16)0x0020u
typedef struct _T_PN_SERVICE_CONNECT_IND { typedef struct _T_PN_SERVICE_CONNECT_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3078,7 +3173,8 @@ typedef struct _T_PN_SERVICE_CONNECT_IND { ...@@ -3078,7 +3173,8 @@ typedef struct _T_PN_SERVICE_CONNECT_IND {
#define CONNECT_RES_ERROR_CODE1_AR_OUT_OF_RESOURCE 0x40u #define CONNECT_RES_ERROR_CODE1_AR_OUT_OF_RESOURCE 0x40u
#define CONNECT_RES_ERROR_CODE2_AR_OUT_OF_RESOURCE 0x04u #define CONNECT_RES_ERROR_CODE2_AR_OUT_OF_RESOURCE 0x04u
typedef struct _T_PN_SERVICE_CONNECT_RES { typedef struct _T_PN_SERVICE_CONNECT_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3100,7 +3196,8 @@ typedef struct _T_PN_SERVICE_CONNECT_RES { ...@@ -3100,7 +3196,8 @@ typedef struct _T_PN_SERVICE_CONNECT_RES {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_WRITE_IND { typedef struct _T_PN_SERVICE_WRITE_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3138,7 +3235,8 @@ typedef struct _T_PN_SERVICE_WRITE_IND { ...@@ -3138,7 +3235,8 @@ typedef struct _T_PN_SERVICE_WRITE_IND {
#define PN_SERVICE_WRITE_INVALID_SEQUENCE_NUMBER 0x07u #define PN_SERVICE_WRITE_INVALID_SEQUENCE_NUMBER 0x07u
#define PN_SERVICE_WRITE_INVALID_AR_UUID 0x08u #define PN_SERVICE_WRITE_INVALID_AR_UUID 0x08u
typedef struct _T_PN_SERVICE_WRITE_REQ { typedef struct _T_PN_SERVICE_WRITE_REQ
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -3181,7 +3279,8 @@ typedef struct _T_PN_SERVICE_WRITE_REQ { ...@@ -3181,7 +3279,8 @@ typedef struct _T_PN_SERVICE_WRITE_REQ {
#define WRITE_RES_ERROR_CODE1_INVALID_SLOT_SUBSLOT 0xB2u #define WRITE_RES_ERROR_CODE1_INVALID_SLOT_SUBSLOT 0xB2u
#define WRITE_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT 7u #define WRITE_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT 7u
typedef struct _T_PN_SERVICE_WRITE_RES { typedef struct _T_PN_SERVICE_WRITE_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3192,7 +3291,8 @@ typedef struct _T_PN_SERVICE_WRITE_RES { ...@@ -3192,7 +3291,8 @@ typedef struct _T_PN_SERVICE_WRITE_RES {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_WRITE_CON { typedef struct _T_PN_SERVICE_WRITE_CON
{
PN_U16 DummyForCompiler; PN_U16 DummyForCompiler;
} PACK_BYTE_ALIGNMENT(T_PN_SERVICE_WRITE_CON); } PACK_BYTE_ALIGNMENT(T_PN_SERVICE_WRITE_CON);
...@@ -3353,7 +3453,8 @@ typedef struct _T_PN_SERVICE_WRITE_CON { ...@@ -3353,7 +3453,8 @@ typedef struct _T_PN_SERVICE_WRITE_CON {
PN_SERVICE_WRITE_INVALID_SEQUENCE_NUMBER PN_SERVICE_WRITE_INVALID_SEQUENCE_NUMBER
#define PN_SERVICE_READ_INVALID_AR_UUID PN_SERVICE_WRITE_INVALID_AR_UUID #define PN_SERVICE_READ_INVALID_AR_UUID PN_SERVICE_WRITE_INVALID_AR_UUID
typedef struct _T_PN_SERVICE_READ_IND { typedef struct _T_PN_SERVICE_READ_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3378,7 +3479,8 @@ typedef struct _T_PN_SERVICE_READ_IND { ...@@ -3378,7 +3479,8 @@ typedef struct _T_PN_SERVICE_READ_IND {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_READ_REQ { typedef struct _T_PN_SERVICE_READ_REQ
{
PN_U8 VersionHighByte; PN_U8 VersionHighByte;
PN_U8 VersionLowByte; PN_U8 VersionLowByte;
...@@ -3403,7 +3505,8 @@ typedef struct _T_PN_SERVICE_READ_REQ { ...@@ -3403,7 +3505,8 @@ typedef struct _T_PN_SERVICE_READ_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_READ_CON { typedef struct _T_PN_SERVICE_READ_CON
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -3445,7 +3548,8 @@ typedef struct _T_PN_SERVICE_READ_CON { ...@@ -3445,7 +3548,8 @@ typedef struct _T_PN_SERVICE_READ_CON {
#define READ_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT \ #define READ_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT \
WRITE_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT WRITE_RES_ERROR_CODE2_INVALID_SLOT_SUBSLOT
typedef struct _T_PN_SERVICE_READ_RES { typedef struct _T_PN_SERVICE_READ_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -3595,7 +3699,8 @@ typedef T_PN_SERVICE_READ_IND T_PN_SERVICE_IMPLICIT_READ_IND; ...@@ -3595,7 +3699,8 @@ typedef T_PN_SERVICE_READ_IND T_PN_SERVICE_IMPLICIT_READ_IND;
#define PN_SERVICE_IMPLICIT_READ_INVALID_TARGET_UUID \ #define PN_SERVICE_IMPLICIT_READ_INVALID_TARGET_UUID \
(PN_SERVICE_IMPLICIT_READ_RESPONSE_TIMEOUT + 0x06u) (PN_SERVICE_IMPLICIT_READ_RESPONSE_TIMEOUT + 0x06u)
typedef struct _T_PN_SERVICE_IMPLICIT_READ_REQ { typedef struct _T_PN_SERVICE_IMPLICIT_READ_REQ
{
PN_U8 IpAddressHighWordHighByte; PN_U8 IpAddressHighWordHighByte;
PN_U8 IpAddressHighWordLowByte; PN_U8 IpAddressHighWordLowByte;
PN_U8 IpAddressLowWordHighByte; PN_U8 IpAddressLowWordHighByte;
...@@ -3635,7 +3740,8 @@ typedef struct _T_PN_SERVICE_IMPLICIT_READ_REQ { ...@@ -3635,7 +3740,8 @@ typedef struct _T_PN_SERVICE_IMPLICIT_READ_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_IMIPLICIT_READ_CON { typedef struct _T_PN_SERVICE_IMIPLICIT_READ_CON
{
PN_U8 TypeHighByte; PN_U8 TypeHighByte;
PN_U8 TypeLowByte; PN_U8 TypeLowByte;
...@@ -3674,7 +3780,8 @@ typedef T_PN_SERVICE_READ_RES T_PN_SERVICE_IMPLICIT_READ_RES; ...@@ -3674,7 +3780,8 @@ typedef T_PN_SERVICE_READ_RES T_PN_SERVICE_IMPLICIT_READ_RES;
#define PN_SERVICE_LOOKUP_INVALID_RESPONSE \ #define PN_SERVICE_LOOKUP_INVALID_RESPONSE \
(PN_SERVICE_LOOKUP_RESPONSE_TIMEOUT + 0x02u) (PN_SERVICE_LOOKUP_RESPONSE_TIMEOUT + 0x02u)
typedef struct _T_PN_SERVICE_LOOKUP_REQ { typedef struct _T_PN_SERVICE_LOOKUP_REQ
{
PN_U8 IpAddressHighWordHighByte; PN_U8 IpAddressHighWordHighByte;
PN_U8 IpAddressHighWordLowByte; PN_U8 IpAddressHighWordLowByte;
PN_U8 IpAddressLowWordHighByte; PN_U8 IpAddressLowWordHighByte;
...@@ -3684,7 +3791,8 @@ typedef struct _T_PN_SERVICE_LOOKUP_REQ { ...@@ -3684,7 +3791,8 @@ typedef struct _T_PN_SERVICE_LOOKUP_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_LOOKUP_CON { typedef struct _T_PN_SERVICE_LOOKUP_CON
{
PN_U8 InstanceHighByte; PN_U8 InstanceHighByte;
PN_U8 InstanceLowByte; PN_U8 InstanceLowByte;
...@@ -3708,7 +3816,8 @@ typedef struct _T_PN_SERVICE_LOOKUP_CON { ...@@ -3708,7 +3816,8 @@ typedef struct _T_PN_SERVICE_LOOKUP_CON {
#define PN_SERVICE_DISCOVER_INVALID_MAC_ADDRESS 0x01u #define PN_SERVICE_DISCOVER_INVALID_MAC_ADDRESS 0x01u
#define PN_SERVICE_DISCOVER_DCP_TIMEOUT 0x02u #define PN_SERVICE_DISCOVER_DCP_TIMEOUT 0x02u
typedef struct _T_PN_SERVICE_DISCOVER_REQ { typedef struct _T_PN_SERVICE_DISCOVER_REQ
{
PN_U8 Flags; PN_U8 Flags;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -3729,7 +3838,8 @@ typedef struct _T_PN_SERVICE_DISCOVER_REQ { ...@@ -3729,7 +3838,8 @@ typedef struct _T_PN_SERVICE_DISCOVER_REQ {
#define PN_DISCOVER_BLOCK_TYPE_NODE_LOCAL_DATA 0x0001u #define PN_DISCOVER_BLOCK_TYPE_NODE_LOCAL_DATA 0x0001u
#define PN_DISCOVER_BLOCK_TYPE_NODE_REMOTE_DATA 0x0002u #define PN_DISCOVER_BLOCK_TYPE_NODE_REMOTE_DATA 0x0002u
typedef struct _T_PN_DISCOVER_BLOCK_HEADER { typedef struct _T_PN_DISCOVER_BLOCK_HEADER
{
PN_U8 TypeHighByte; PN_U8 TypeHighByte;
PN_U8 TypeLowByte; PN_U8 TypeLowByte;
...@@ -3745,7 +3855,8 @@ typedef struct _T_PN_DISCOVER_BLOCK_HEADER { ...@@ -3745,7 +3855,8 @@ typedef struct _T_PN_DISCOVER_BLOCK_HEADER {
typedef T_PROFINET_UUID T_MRP_UUID; typedef T_PROFINET_UUID T_MRP_UUID;
typedef struct _T_PN_DISCOVER_NODE_LOCAL_IF_DATA_V10 { typedef struct _T_PN_DISCOVER_NODE_LOCAL_IF_DATA_V10
{
PN_U8 InterfaceNumber; PN_U8 InterfaceNumber;
PN_U8 Alignment; PN_U8 Alignment;
...@@ -3792,7 +3903,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_IF_DATA_V10 { ...@@ -3792,7 +3903,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_IF_DATA_V10 {
#define PN_FEATURE_FRAGMENTATION_ENABLED 0x00000010uL #define PN_FEATURE_FRAGMENTATION_ENABLED 0x00000010uL
#define PN_FEATURE_FRAGMENTATION_SUPPORTED 0x00000020uL #define PN_FEATURE_FRAGMENTATION_SUPPORTED 0x00000020uL
typedef struct _T_PN_DISCOVER_NODE_LOCAL_PORT_DATA_V10 { typedef struct _T_PN_DISCOVER_NODE_LOCAL_PORT_DATA_V10
{
PN_U8 InterfaceNumber; PN_U8 InterfaceNumber;
PN_U8 PortNumber; PN_U8 PortNumber;
...@@ -3840,7 +3952,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_PORT_DATA_V10 { ...@@ -3840,7 +3952,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_PORT_DATA_V10 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DISCOVER_NODE_LOCAL_DATA_V10 { typedef struct _T_PN_DISCOVER_NODE_LOCAL_DATA_V10
{
T_PN_DISCOVER_BLOCK_HEADER Header; T_PN_DISCOVER_BLOCK_HEADER Header;
PN_U8 ChassisIdTypeHighByte; PN_U8 ChassisIdTypeHighByte;
...@@ -3865,7 +3978,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_DATA_V10 { ...@@ -3865,7 +3978,8 @@ typedef struct _T_PN_DISCOVER_NODE_LOCAL_DATA_V10 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DISCOVER_NODE_REMOTE_PEER_DATA_V10 { typedef struct _T_PN_DISCOVER_NODE_REMOTE_PEER_DATA_V10
{
PN_U8 LocalInterfaceNumber; PN_U8 LocalInterfaceNumber;
PN_U8 LocalPortNumber; PN_U8 LocalPortNumber;
...@@ -3898,7 +4012,8 @@ typedef struct _T_PN_DISCOVER_NODE_REMOTE_PEER_DATA_V10 { ...@@ -3898,7 +4012,8 @@ typedef struct _T_PN_DISCOVER_NODE_REMOTE_PEER_DATA_V10 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_DISCOVER_NODE_REMOTE_DATA_V10 { typedef struct _T_PN_DISCOVER_NODE_REMOTE_DATA_V10
{
T_PN_DISCOVER_BLOCK_HEADER Header; T_PN_DISCOVER_BLOCK_HEADER Header;
PN_U8 NumberOfPeerHighByte; PN_U8 NumberOfPeerHighByte;
...@@ -3911,7 +4026,8 @@ typedef struct _T_PN_DISCOVER_NODE_REMOTE_DATA_V10 { ...@@ -3911,7 +4026,8 @@ typedef struct _T_PN_DISCOVER_NODE_REMOTE_DATA_V10 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_DISCOVER_CON { typedef struct _T_PN_SERVICE_DISCOVER_CON
{
PN_U8 RemainingLengthHighByte; PN_U8 RemainingLengthHighByte;
PN_U8 RemainingLengthLowByte; PN_U8 RemainingLengthLowByte;
...@@ -3938,7 +4054,8 @@ typedef T_PN_DIFF_MODULE_SUBSLOT T_PROFINET_MODULE_SUBSLOT_RES; ...@@ -3938,7 +4054,8 @@ typedef T_PN_DIFF_MODULE_SUBSLOT T_PROFINET_MODULE_SUBSLOT_RES;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MODULE_RES { typedef struct _T_PROFINET_MODULE_RES
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
...@@ -3952,7 +4069,8 @@ typedef struct _T_PROFINET_MODULE_RES { ...@@ -3952,7 +4069,8 @@ typedef struct _T_PROFINET_MODULE_RES {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_IOCR { typedef struct _T_PROFINET_IOCR
{
PN_U8 PropertiesHighWordHighByte; PN_U8 PropertiesHighWordHighByte;
PN_U8 PropertiesHighWordLowByte; PN_U8 PropertiesHighWordLowByte;
PN_U8 PropertiesLowWordHighByte; PN_U8 PropertiesLowWordHighByte;
...@@ -3974,7 +4092,8 @@ typedef struct _T_PROFINET_IOCR { ...@@ -3974,7 +4092,8 @@ typedef struct _T_PROFINET_IOCR {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_API { typedef struct _T_PROFINET_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -3984,7 +4103,8 @@ typedef struct _T_PROFINET_API { ...@@ -3984,7 +4103,8 @@ typedef struct _T_PROFINET_API {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_AR_VENDOR { typedef struct _T_PROFINET_AR_VENDOR
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 APStructureIdentifierHighByte; PN_U8 APStructureIdentifierHighByte;
...@@ -4004,7 +4124,8 @@ typedef struct _T_PROFINET_AR_VENDOR { ...@@ -4004,7 +4124,8 @@ typedef struct _T_PROFINET_AR_VENDOR {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IOCR_DFP { typedef struct _T_PROFINET_IOCR_DFP
{
PN_U8 IOCRReferenceHighByte; PN_U8 IOCRReferenceHighByte;
PN_U8 IOCRReferenceLowByte; PN_U8 IOCRReferenceLowByte;
...@@ -4020,7 +4141,8 @@ typedef struct _T_PROFINET_IOCR_DFP { ...@@ -4020,7 +4141,8 @@ typedef struct _T_PROFINET_IOCR_DFP {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IR_INFO { typedef struct _T_PROFINET_IR_INFO
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1[2]; PN_U8 Padding1[2];
...@@ -4049,7 +4171,8 @@ typedef struct _T_PROFINET_IR_INFO { ...@@ -4049,7 +4171,8 @@ typedef struct _T_PROFINET_IR_INFO {
#define PROFINET_SR_PROPERTIES_SET_INVALID_INPUT_INVALID 0x00000004u #define PROFINET_SR_PROPERTIES_SET_INVALID_INPUT_INVALID 0x00000004u
#define PROFINET_SR_PROPERTIES_RESERVED2 0x0000FFF8u #define PROFINET_SR_PROPERTIES_RESERVED2 0x0000FFF8u
typedef struct _T_PROFINET_SR_INFO { typedef struct _T_PROFINET_SR_INFO
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 DataHoldFactorHighByte; PN_U8 DataHoldFactorHighByte;
...@@ -4068,8 +4191,8 @@ typedef struct _T_PROFINET_SR_INFO { ...@@ -4068,8 +4191,8 @@ typedef struct _T_PROFINET_SR_INFO {
#define PROFINET_FSU_HELLO_ON_LINK_UP 0x00000001uL #define PROFINET_FSU_HELLO_ON_LINK_UP 0x00000001uL
#define PROFINET_FSU_HELLO_DELAYED_ON_LINK_UP 0x00000002uL #define PROFINET_FSU_HELLO_DELAYED_ON_LINK_UP 0x00000002uL
#define PROFINET_FSU_HELLO_MODE_MASK \ #define PROFINET_FSU_HELLO_MODE_MASK \
(PROFINET_FSU_HELLO_MODE_OFF | PROFINET_FSU_HELLO_ON_LINK_UP \ (PROFINET_FSU_HELLO_MODE_OFF | PROFINET_FSU_HELLO_ON_LINK_UP | \
| PROFINET_FSU_HELLO_DELAYED_ON_LINK_UP) PROFINET_FSU_HELLO_DELAYED_ON_LINK_UP)
#define PROFINET_FSU_HELLO_INTERVAL_30MS 0x0000001EuL #define PROFINET_FSU_HELLO_INTERVAL_30MS 0x0000001EuL
#define PROFINET_FSU_HELLO_INTERVAL_50MS 0x00000032uL #define PROFINET_FSU_HELLO_INTERVAL_50MS 0x00000032uL
...@@ -4084,7 +4207,8 @@ typedef struct _T_PROFINET_SR_INFO { ...@@ -4084,7 +4207,8 @@ typedef struct _T_PROFINET_SR_INFO {
#define PROFINET_FSU_HELLO_DELAY_500MS 0x000001F4uL #define PROFINET_FSU_HELLO_DELAY_500MS 0x000001F4uL
#define PROFINET_FSU_HELLO_DELAY_1S 0x000003E8uL #define PROFINET_FSU_HELLO_DELAY_1S 0x000003E8uL
typedef struct _T_PROFINET_FS_HELLO { typedef struct _T_PROFINET_FS_HELLO
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4116,7 +4240,8 @@ typedef struct _T_PROFINET_FS_HELLO { ...@@ -4116,7 +4240,8 @@ typedef struct _T_PROFINET_FS_HELLO {
#define PROFINET_FSU_PRM_MODE_OFF 0x00000000uL #define PROFINET_FSU_PRM_MODE_OFF 0x00000000uL
#define PROFINET_FSU_PRM_MODE_ON 0x00000001uL #define PROFINET_FSU_PRM_MODE_ON 0x00000001uL
typedef struct _T_PROFINET_FS_PRM { typedef struct _T_PROFINET_FS_PRM
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1[2]; PN_U8 Padding1[2];
...@@ -4133,7 +4258,8 @@ typedef struct _T_PROFINET_FS_PRM { ...@@ -4133,7 +4258,8 @@ typedef struct _T_PROFINET_FS_PRM {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_FS { typedef struct _T_PROFINET_FS
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4147,7 +4273,8 @@ typedef struct _T_PROFINET_FS { ...@@ -4147,7 +4273,8 @@ typedef struct _T_PROFINET_FS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_AR_FSU_ADJUST { typedef struct _T_PROFINET_AR_FSU_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4163,7 +4290,8 @@ typedef T_PROFINET_AR_FSU_ADJUST T_PROFINET_AR_FSU; ...@@ -4163,7 +4290,8 @@ typedef T_PROFINET_AR_FSU_ADJUST T_PROFINET_AR_FSU;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_INTERFACE_FSU_ADJUST { typedef struct _T_PROFINET_INTERFACE_FSU_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4177,7 +4305,8 @@ typedef struct _T_PROFINET_INTERFACE_FSU_ADJUST { ...@@ -4177,7 +4305,8 @@ typedef struct _T_PROFINET_INTERFACE_FSU_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_SRL_DATA { typedef struct _T_PROFINET_SRL_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 RedundancyInfoHighByte; PN_U8 RedundancyInfoHighByte;
...@@ -4187,7 +4316,8 @@ typedef struct _T_PROFINET_SRL_DATA { ...@@ -4187,7 +4316,8 @@ typedef struct _T_PROFINET_SRL_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_AR_DATA_INFO { typedef struct _T_PROFINET_AR_DATA_INFO
{
PN_U8 NumberEntriesHighByte; PN_U8 NumberEntriesHighByte;
PN_U8 NumberEntriesLowByte; PN_U8 NumberEntriesLowByte;
...@@ -4204,7 +4334,8 @@ typedef struct _T_PROFINET_AR_DATA_INFO { ...@@ -4204,7 +4334,8 @@ typedef struct _T_PROFINET_AR_DATA_INFO {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_AR { typedef struct _T_PROFINET_AR
{
T_PROFINET_UUID ARUUID; T_PROFINET_UUID ARUUID;
T_PROFINET_UUID InitiatorUUID; T_PROFINET_UUID InitiatorUUID;
T_PROFINET_UUID PrmServerUUID; T_PROFINET_UUID PrmServerUUID;
...@@ -4263,7 +4394,8 @@ typedef struct _T_PROFINET_AR { ...@@ -4263,7 +4394,8 @@ typedef struct _T_PROFINET_AR {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_AR_DATA { typedef struct _T_PROFINET_AR_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfARsHighByte; PN_U8 NumberOfARsHighByte;
...@@ -4277,7 +4409,8 @@ typedef struct _T_PROFINET_AR_DATA { ...@@ -4277,7 +4409,8 @@ typedef struct _T_PROFINET_AR_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_IM0_FILTER_SUBMODULE { typedef struct _T_PROFINET_IM0_FILTER_SUBMODULE
{
PN_U8 SubSlotNumberHighByte; PN_U8 SubSlotNumberHighByte;
PN_U8 SubSlotNumberLowByte; PN_U8 SubSlotNumberLowByte;
...@@ -4293,7 +4426,8 @@ typedef T_PROFINET_IM0_FILTER_SUBMODULE T_PROFINET_EXPECTED_IDENT_SUBMODULE; ...@@ -4293,7 +4426,8 @@ typedef T_PROFINET_IM0_FILTER_SUBMODULE T_PROFINET_EXPECTED_IDENT_SUBMODULE;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IM0_FILTER_MODULE { typedef struct _T_PROFINET_IM0_FILTER_MODULE
{
PN_U8 SlotNumberHighByte; PN_U8 SlotNumberHighByte;
PN_U8 SlotNumberLowByte; PN_U8 SlotNumberLowByte;
...@@ -4316,7 +4450,8 @@ typedef T_PROFINET_IM0_FILTER_MODULE T_PROFINET_EXPECTED_IDENT_MODULE; ...@@ -4316,7 +4450,8 @@ typedef T_PROFINET_IM0_FILTER_MODULE T_PROFINET_EXPECTED_IDENT_MODULE;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IM0_FILTER_API { typedef struct _T_PROFINET_IM0_FILTER_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -4336,7 +4471,8 @@ typedef T_PROFINET_IM0_FILTER_API T_PROFINET_EXPECTED_IDENT_API; ...@@ -4336,7 +4471,8 @@ typedef T_PROFINET_IM0_FILTER_API T_PROFINET_EXPECTED_IDENT_API;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IM0_FILTER_DATA { typedef struct _T_PROFINET_IM0_FILTER_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
...@@ -4350,7 +4486,8 @@ typedef struct _T_PROFINET_IM0_FILTER_DATA { ...@@ -4350,7 +4486,8 @@ typedef struct _T_PROFINET_IM0_FILTER_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_API_DATA { typedef struct _T_PROFINET_API_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
...@@ -4367,7 +4504,8 @@ typedef struct _T_PROFINET_API_DATA { ...@@ -4367,7 +4504,8 @@ typedef struct _T_PROFINET_API_DATA {
#define PROFINET_SUBMODULE_DATA_DESCRIPTION_INPUT (PN_U16)0x0001u #define PROFINET_SUBMODULE_DATA_DESCRIPTION_INPUT (PN_U16)0x0001u
#define PROFINET_SUBMODULE_DATA_DESCRIPTION_OUTPUT (PN_U16)0x0002u #define PROFINET_SUBMODULE_DATA_DESCRIPTION_OUTPUT (PN_U16)0x0002u
typedef struct _T_PROFINET_SUBMODULE_DATA { typedef struct _T_PROFINET_SUBMODULE_DATA
{
PN_U8 SubSlotNumberHighByte; PN_U8 SubSlotNumberHighByte;
PN_U8 SubSlotNumberLowByte; PN_U8 SubSlotNumberLowByte;
...@@ -4383,7 +4521,8 @@ typedef struct _T_PROFINET_SUBMODULE_DATA { ...@@ -4383,7 +4521,8 @@ typedef struct _T_PROFINET_SUBMODULE_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_SUBMODULE_IO_DATA { typedef struct _T_PROFINET_SUBMODULE_IO_DATA
{
PN_U8 DataDescriptionHighByte; PN_U8 DataDescriptionHighByte;
PN_U8 DataDescriptionLowByte; PN_U8 DataDescriptionLowByte;
...@@ -4397,7 +4536,8 @@ typedef struct _T_PROFINET_SUBMODULE_IO_DATA { ...@@ -4397,7 +4536,8 @@ typedef struct _T_PROFINET_SUBMODULE_IO_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_MODULE_API { typedef struct _T_PROFINET_MODULE_API
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -4426,7 +4566,8 @@ typedef struct _T_PROFINET_MODULE_API { ...@@ -4426,7 +4566,8 @@ typedef struct _T_PROFINET_MODULE_API {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MODULE_REQ { typedef struct _T_PROFINET_MODULE_REQ
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfAPIsHighByte; PN_U8 NumberOfAPIsHighByte;
...@@ -4444,7 +4585,8 @@ typedef T_PROFINET_MODULE_REQ T_PROFINET_MODULE_DIFF_DATA; ...@@ -4444,7 +4585,8 @@ typedef T_PROFINET_MODULE_REQ T_PROFINET_MODULE_DIFF_DATA;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_RECORD_INPUT_DATA { typedef struct _T_PROFINET_RECORD_INPUT_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 ConsumerStatusLength; PN_U8 ConsumerStatusLength;
...@@ -4464,7 +4606,8 @@ typedef struct _T_PROFINET_RECORD_INPUT_DATA { ...@@ -4464,7 +4606,8 @@ typedef struct _T_PROFINET_RECORD_INPUT_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_OUTPUT_DATA_ITEM { typedef struct _T_PROFINET_OUTPUT_DATA_ITEM
{
PN_U8 ConsumerStatus; PN_U8 ConsumerStatus;
/* /*
PN_U8 Data [DataLength]; PN_U8 Data [DataLength];
...@@ -4481,7 +4624,8 @@ typedef struct _T_PROFINET_OUTPUT_DATA_ITEM { ...@@ -4481,7 +4624,8 @@ typedef struct _T_PROFINET_OUTPUT_DATA_ITEM {
#define PROFINET_FAIL_SAFE_SUBSTITUTION_ACTIVE (PN_U16)0x0001u #define PROFINET_FAIL_SAFE_SUBSTITUTION_ACTIVE (PN_U16)0x0001u
typedef struct _T_PROFINET_SUBSTITUTE_VALUE { typedef struct _T_PROFINET_SUBSTITUTE_VALUE
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 SubstitutionModeHighByte; PN_U8 SubstitutionModeHighByte;
...@@ -4495,7 +4639,8 @@ typedef struct _T_PROFINET_SUBSTITUTE_VALUE { ...@@ -4495,7 +4639,8 @@ typedef struct _T_PROFINET_SUBSTITUTE_VALUE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_RECORD_OUTPUT_DATA { typedef struct _T_PROFINET_RECORD_OUTPUT_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 SubstituteActiveHighByte; PN_U8 SubstituteActiveHighByte;
...@@ -4516,7 +4661,8 @@ typedef struct _T_PROFINET_RECORD_OUTPUT_DATA { ...@@ -4516,7 +4661,8 @@ typedef struct _T_PROFINET_RECORD_OUTPUT_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_TIMESTAMP { typedef struct _T_PROFINET_TIMESTAMP
{
PN_U8 HighPartHighWordHighByte; PN_U8 HighPartHighWordHighByte;
PN_U8 HighPartHighWordLowByte; PN_U8 HighPartHighWordLowByte;
PN_U8 HighPartLowWordHighByte; PN_U8 HighPartLowWordHighByte;
...@@ -4531,7 +4677,8 @@ typedef struct _T_PROFINET_TIMESTAMP { ...@@ -4531,7 +4677,8 @@ typedef struct _T_PROFINET_TIMESTAMP {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_LOG_ENTRY { typedef struct _T_PROFINET_LOG_ENTRY
{
T_PROFINET_TIMESTAMP TimeStamp; T_PROFINET_TIMESTAMP TimeStamp;
T_PROFINET_UUID ARUUID; T_PROFINET_UUID ARUUID;
...@@ -4546,7 +4693,8 @@ typedef struct _T_PROFINET_LOG_ENTRY { ...@@ -4546,7 +4693,8 @@ typedef struct _T_PROFINET_LOG_ENTRY {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_LOG_DATA { typedef struct _T_PROFINET_LOG_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
T_PROFINET_TIMESTAMP CurrentTimeStamp; T_PROFINET_TIMESTAMP CurrentTimeStamp;
...@@ -4562,7 +4710,8 @@ typedef struct _T_PROFINET_LOG_DATA { ...@@ -4562,7 +4710,8 @@ typedef struct _T_PROFINET_LOG_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_PEER_PORT { typedef struct _T_PROFINET_PD_PEER_PORT
{
PN_U8 LengthPeerPortId; PN_U8 LengthPeerPortId;
/* /*
PN_U8 PeerPortId [LengthPeerPortId]; PN_U8 PeerPortId [LengthPeerPortId];
...@@ -4572,7 +4721,8 @@ typedef struct _T_PROFINET_PD_PEER_PORT { ...@@ -4572,7 +4721,8 @@ typedef struct _T_PROFINET_PD_PEER_PORT {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PEER_CHASSIS { typedef struct _T_PROFINET_PD_PEER_CHASSIS
{
PN_U8 LengthPeerChassisId; PN_U8 LengthPeerChassisId;
/* /*
PN_U8 PeerChassisId [LengthPeerChassisId]; PN_U8 PeerChassisId [LengthPeerChassisId];
...@@ -4584,7 +4734,8 @@ typedef struct _T_PROFINET_PD_PEER_CHASSIS { ...@@ -4584,7 +4734,8 @@ typedef struct _T_PROFINET_PD_PEER_CHASSIS {
#define PROFINET_CABLE_DELAY_FORMAT_INDICATOR 0x80000000uL #define PROFINET_CABLE_DELAY_FORMAT_INDICATOR 0x80000000uL
typedef struct _T_PROFINET_PD_LINE_DELAY { typedef struct _T_PROFINET_PD_LINE_DELAY
{
PN_U8 DelayHighWordHighByte; PN_U8 DelayHighWordHighByte;
PN_U8 DelayHighWordLowByte; PN_U8 DelayHighWordLowByte;
PN_U8 DelayLowWordHighByte; PN_U8 DelayLowWordHighByte;
...@@ -4594,7 +4745,8 @@ typedef struct _T_PROFINET_PD_LINE_DELAY { ...@@ -4594,7 +4745,8 @@ typedef struct _T_PROFINET_PD_LINE_DELAY {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PEER_REAL { typedef struct _T_PROFINET_PD_PEER_REAL
{
T_PROFINET_PD_PEER_PORT PeerPort; T_PROFINET_PD_PEER_PORT PeerPort;
/* /*
T_PROFINET_PD_PEER_CHASSIS PeerChassis; T_PROFINET_PD_PEER_CHASSIS PeerChassis;
...@@ -4607,7 +4759,8 @@ typedef struct _T_PROFINET_PD_PEER_REAL { ...@@ -4607,7 +4759,8 @@ typedef struct _T_PROFINET_PD_PEER_REAL {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PEERS_REAL { typedef struct _T_PROFINET_PD_PEERS_REAL
{
PN_U8 NumberOfPeers; PN_U8 NumberOfPeers;
/* /*
PN_U8 Padding []; align to 32-Bit PN_U8 Padding []; align to 32-Bit
...@@ -4620,7 +4773,8 @@ typedef struct _T_PROFINET_PD_PEERS_REAL { ...@@ -4620,7 +4773,8 @@ typedef struct _T_PROFINET_PD_PEERS_REAL {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_MAU_TYPE { typedef struct _T_PROFINET_PD_MAU_TYPE
{
PN_U8 TypeHighByte; PN_U8 TypeHighByte;
PN_U8 TypeLowByte; PN_U8 TypeLowByte;
...@@ -4628,7 +4782,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE { ...@@ -4628,7 +4782,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_LINK_STATE { typedef struct _T_PROFINET_PD_LINK_STATE
{
PN_U8 StateHighByte; PN_U8 StateHighByte;
PN_U8 StateLowByte; PN_U8 StateLowByte;
...@@ -4641,7 +4796,8 @@ typedef struct _T_PROFINET_PD_LINK_STATE { ...@@ -4641,7 +4796,8 @@ typedef struct _T_PROFINET_PD_LINK_STATE {
#define PROFINET_MEDIA_TYPE_FIBER_OPTIC_CABLE (PN_U32)0x00000002uL #define PROFINET_MEDIA_TYPE_FIBER_OPTIC_CABLE (PN_U32)0x00000002uL
#define PROFINET_MEDIA_TYPE_RADIO (PN_U32)0x00000003uL #define PROFINET_MEDIA_TYPE_RADIO (PN_U32)0x00000003uL
typedef struct _T_PROFINET_PD_MEDIA_TYPE { typedef struct _T_PROFINET_PD_MEDIA_TYPE
{
PN_U8 TypeHighWordHighByte; PN_U8 TypeHighWordHighByte;
PN_U8 TypeHighWordLowByte; PN_U8 TypeHighWordLowByte;
PN_U8 TypeLowWordHighByte; PN_U8 TypeLowWordHighByte;
...@@ -4655,14 +4811,15 @@ typedef struct _T_PROFINET_PD_MEDIA_TYPE { ...@@ -4655,14 +4811,15 @@ typedef struct _T_PROFINET_PD_MEDIA_TYPE {
#define PROFINET_RTC3_STATUS_UP (PN_U16)0x0002uL #define PROFINET_RTC3_STATUS_UP (PN_U16)0x0002uL
#define PROFINET_RTC3_STATUS_RUN (PN_U16)0x0004uL #define PROFINET_RTC3_STATUS_RUN (PN_U16)0x0004uL
#define PROFINET_RTC3_STATUS_MASK_STATE \ #define PROFINET_RTC3_STATUS_MASK_STATE \
(PN_U16)(PROFINET_RTC3_STATUS_OFF | PROFINET_RTC3_STATUS_UP \ (PN_U16)(PROFINET_RTC3_STATUS_OFF | PROFINET_RTC3_STATUS_UP | \
| PROFINET_RTC3_STATUS_RUN) PROFINET_RTC3_STATUS_RUN)
#define PROFINET_RTC3_STATUS_FRAG_OFF (PN_U16)0x0000uL #define PROFINET_RTC3_STATUS_FRAG_OFF (PN_U16)0x0000uL
#define PROFINET_RTC3_STATUS_FRAG_ON (PN_U16)0x1000uL #define PROFINET_RTC3_STATUS_FRAG_ON (PN_U16)0x1000uL
#define PROFINET_RTC3_STATUS_SHORTEN_PREAMBLE (PN_U16)0x2000uL #define PROFINET_RTC3_STATUS_SHORTEN_PREAMBLE (PN_U16)0x2000uL
#define PROFINET_RTC3_STATUS_OPTIMIZED (PN_U16)0x8000uL #define PROFINET_RTC3_STATUS_OPTIMIZED (PN_U16)0x8000uL
typedef struct _T_PROFINET_PD_PORT_SETTINGS { typedef struct _T_PROFINET_PD_PORT_SETTINGS
{
T_PROFINET_PD_MAU_TYPE MAU; T_PROFINET_PD_MAU_TYPE MAU;
PN_U8 Padding1[2]; /* align to 32-Bit */ PN_U8 Padding1[2]; /* align to 32-Bit */
...@@ -4685,7 +4842,8 @@ typedef struct _T_PROFINET_PD_PORT_SETTINGS { ...@@ -4685,7 +4842,8 @@ typedef struct _T_PROFINET_PD_PORT_SETTINGS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PORT_DATA_REAL { typedef struct _T_PROFINET_PD_PORT_DATA_REAL
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4711,7 +4869,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_REAL { ...@@ -4711,7 +4869,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_REAL {
typedef T_PN_DEVICE_IP_INFO T_PROFINET_IP_PARAMETER; typedef T_PN_DEVICE_IP_INFO T_PROFINET_IP_PARAMETER;
typedef struct _T_PROFINET_PD_INTERFACE_DATA_REAL { typedef struct _T_PROFINET_PD_INTERFACE_DATA_REAL
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 LengthChassisId; PN_U8 LengthChassisId;
...@@ -4730,7 +4889,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_DATA_REAL { ...@@ -4730,7 +4889,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_DATA_REAL {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_PEER_CHECK_DATA { typedef struct _T_PROFINET_PD_PEER_CHECK_DATA
{
T_PROFINET_PD_PEER_PORT PeerPort; T_PROFINET_PD_PEER_PORT PeerPort;
/* /*
T_PROFINET_PD_PEER_CHASSIS PeerChassis; T_PROFINET_PD_PEER_CHASSIS PeerChassis;
...@@ -4740,7 +4900,8 @@ typedef struct _T_PROFINET_PD_PEER_CHECK_DATA { ...@@ -4740,7 +4900,8 @@ typedef struct _T_PROFINET_PD_PEER_CHECK_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PEER_CHECK { typedef struct _T_PROFINET_PD_PEER_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfPeers; PN_U8 NumberOfPeers;
...@@ -4754,7 +4915,8 @@ typedef struct _T_PROFINET_PD_PEER_CHECK { ...@@ -4754,7 +4915,8 @@ typedef struct _T_PROFINET_PD_PEER_CHECK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_LINE_DELAY_CHECK { typedef struct _T_PROFINET_PD_LINE_DELAY_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4765,7 +4927,8 @@ typedef struct _T_PROFINET_PD_LINE_DELAY_CHECK { ...@@ -4765,7 +4927,8 @@ typedef struct _T_PROFINET_PD_LINE_DELAY_CHECK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_MAU_TYPE_CHECK { typedef struct _T_PROFINET_PD_MAU_TYPE_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
T_PROFINET_PD_MAU_TYPE MAUType; T_PROFINET_PD_MAU_TYPE MAUType;
...@@ -4774,7 +4937,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE_CHECK { ...@@ -4774,7 +4937,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE_CHECK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_LINK_STATE_CHECK { typedef struct _T_PROFINET_PD_LINK_STATE_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
T_PROFINET_PD_LINK_STATE Link; T_PROFINET_PD_LINK_STATE Link;
...@@ -4788,7 +4952,8 @@ typedef struct _T_PROFINET_PD_LINK_STATE_CHECK { ...@@ -4788,7 +4952,8 @@ typedef struct _T_PROFINET_PD_LINK_STATE_CHECK {
#define PROFINET_DISABLE_SYNC_MASTER_CHECK (PN_U16)0x0000u #define PROFINET_DISABLE_SYNC_MASTER_CHECK (PN_U16)0x0000u
#define PROFINET_ENABLE_SYNC_MASTER_CHECK (PN_U16)0x0002u #define PROFINET_ENABLE_SYNC_MASTER_CHECK (PN_U16)0x0002u
typedef struct _T_PROFINET_PD_SYNC_DIFF_CHECK { typedef struct _T_PROFINET_PD_SYNC_DIFF_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 SyncModeHighByte; PN_U8 SyncModeHighByte;
...@@ -4801,7 +4966,8 @@ typedef struct _T_PROFINET_PD_SYNC_DIFF_CHECK { ...@@ -4801,7 +4966,8 @@ typedef struct _T_PROFINET_PD_SYNC_DIFF_CHECK {
#define PROFINET_DISABLE_MAU_TYPE_CHECK (PN_U16)0x0000u #define PROFINET_DISABLE_MAU_TYPE_CHECK (PN_U16)0x0000u
#define PROFINET_ENABLE_MAU_TYPE_CHECK (PN_U16)0x0001u #define PROFINET_ENABLE_MAU_TYPE_CHECK (PN_U16)0x0001u
typedef struct _T_PROFINET_PD_MAU_TYPE_DIFF_CHECK { typedef struct _T_PROFINET_PD_MAU_TYPE_DIFF_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 MAUTypeModeHighByte; PN_U8 MAUTypeModeHighByte;
...@@ -4811,7 +4977,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE_DIFF_CHECK { ...@@ -4811,7 +4977,8 @@ typedef struct _T_PROFINET_PD_MAU_TYPE_DIFF_CHECK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PORT_DATA_CHECK { typedef struct _T_PROFINET_PD_PORT_DATA_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4835,7 +5002,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_CHECK { ...@@ -4835,7 +5002,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_CHECK {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_PORT_STATISTIC { typedef struct _T_PROFINET_PD_PORT_STATISTIC
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4874,7 +5042,8 @@ typedef struct _T_PROFINET_PD_PORT_STATISTIC { ...@@ -4874,7 +5042,8 @@ typedef struct _T_PROFINET_PD_PORT_STATISTIC {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_NC_DATA_CHECK { typedef struct _T_PROFINET_NC_DATA_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4908,7 +5077,8 @@ typedef struct _T_PROFINET_NC_DATA_CHECK { ...@@ -4908,7 +5077,8 @@ typedef struct _T_PROFINET_NC_DATA_CHECK {
#define DEFAULT_MRP_LINK_CHANGE_COUNT (PN_U16)4u #define DEFAULT_MRP_LINK_CHANGE_COUNT (PN_U16)4u
#define MAX_MRP_LINK_CHANGE_COUNT (PN_U16)5u #define MAX_MRP_LINK_CHANGE_COUNT (PN_U16)5u
typedef struct _T_PROFINET_MRP_CLIENT_PARAMS { typedef struct _T_PROFINET_MRP_CLIENT_PARAMS
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 LinkDownTimeHighByte; PN_U8 LinkDownTimeHighByte;
...@@ -4924,7 +5094,8 @@ typedef struct _T_PROFINET_MRP_CLIENT_PARAMS { ...@@ -4924,7 +5094,8 @@ typedef struct _T_PROFINET_MRP_CLIENT_PARAMS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MRP_MANAGER_PARAMS { typedef struct _T_PROFINET_MRP_MANAGER_PARAMS
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 PriorityHighByte; PN_U8 PriorityHighByte;
...@@ -4949,7 +5120,8 @@ typedef struct _T_PROFINET_MRP_MANAGER_PARAMS { ...@@ -4949,7 +5120,8 @@ typedef struct _T_PROFINET_MRP_MANAGER_PARAMS {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MRP_PARAMS { typedef struct _T_PROFINET_MRP_PARAMS
{
union { union {
T_PROFINET_MRP_CLIENT_PARAMS Client; T_PROFINET_MRP_CLIENT_PARAMS Client;
T_PROFINET_MRP_MANAGER_PARAMS Manager; T_PROFINET_MRP_MANAGER_PARAMS Manager;
...@@ -4963,7 +5135,8 @@ typedef struct _T_PROFINET_MRP_PARAMS { ...@@ -4963,7 +5135,8 @@ typedef struct _T_PROFINET_MRP_PARAMS {
#define MULTIPLE_INTERFACE_MODE_LEGACY 0x00000000uL #define MULTIPLE_INTERFACE_MODE_LEGACY 0x00000000uL
#define MULTIPLE_INTERFACE_MODE_LOCAL_CHASSIS_ID 0x00000001uL #define MULTIPLE_INTERFACE_MODE_LOCAL_CHASSIS_ID 0x00000001uL
typedef struct _T_PROFINET_PD_INTERFACE_DATA_ADJUST { typedef struct _T_PROFINET_PD_INTERFACE_DATA_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -4977,7 +5150,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_DATA_ADJUST { ...@@ -4977,7 +5150,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_DATA_ADJUST {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_PORT_FO_ADJUST { typedef struct _T_PROFINET_PD_PORT_FO_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
/* TODO: define structure */ /* TODO: define structure */
...@@ -4986,7 +5160,8 @@ typedef struct _T_PROFINET_PD_PORT_FO_ADJUST { ...@@ -4986,7 +5160,8 @@ typedef struct _T_PROFINET_PD_PORT_FO_ADJUST {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_DOMAIN_BOUNDARY_ADJUST { typedef struct _T_PROFINET_DOMAIN_BOUNDARY_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1[2]; PN_U8 Padding1[2];
...@@ -5010,7 +5185,8 @@ typedef struct _T_PROFINET_DOMAIN_BOUNDARY_ADJUST { ...@@ -5010,7 +5185,8 @@ typedef struct _T_PROFINET_DOMAIN_BOUNDARY_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MULTICAST_BOUNDARY_ADJUST { typedef struct _T_PROFINET_MULTICAST_BOUNDARY_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1[2]; PN_U8 Padding1[2];
...@@ -5033,7 +5209,8 @@ typedef T_PROFINET_MULTICAST_BOUNDARY_ADJUST T_PROFINET_DCP_BOUNDARY_ADJUST; ...@@ -5033,7 +5209,8 @@ typedef T_PROFINET_MULTICAST_BOUNDARY_ADJUST T_PROFINET_DCP_BOUNDARY_ADJUST;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MAU_TYPE_ADJUST { typedef struct _T_PROFINET_MAU_TYPE_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5048,7 +5225,8 @@ typedef struct _T_PROFINET_MAU_TYPE_ADJUST { ...@@ -5048,7 +5225,8 @@ typedef struct _T_PROFINET_MAU_TYPE_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_LINK_STATE_ADJUST { typedef struct _T_PROFINET_LINK_STATE_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5065,7 +5243,8 @@ typedef struct _T_PROFINET_LINK_STATE_ADJUST { ...@@ -5065,7 +5243,8 @@ typedef struct _T_PROFINET_LINK_STATE_ADJUST {
#define PROFINET_ADJUST_SHORTEN_PREAMBLE (PN_U16)0x0001uL #define PROFINET_ADJUST_SHORTEN_PREAMBLE (PN_U16)0x0001uL
typedef struct _T_PROFINET_PREAMBLE_LENGTH_ADJUST { typedef struct _T_PROFINET_PREAMBLE_LENGTH_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5080,7 +5259,8 @@ typedef struct _T_PROFINET_PREAMBLE_LENGTH_ADJUST { ...@@ -5080,7 +5259,8 @@ typedef struct _T_PROFINET_PREAMBLE_LENGTH_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_PORT_DATA_ADJUST { typedef struct _T_PROFINET_PD_PORT_DATA_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5107,7 +5287,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_ADJUST { ...@@ -5107,7 +5287,8 @@ typedef struct _T_PROFINET_PD_PORT_DATA_ADJUST {
#define MAX_MRP_DOMAIN_NAME_LENGTH PN_MAX_DEVICE_NAME_LENGTH #define MAX_MRP_DOMAIN_NAME_LENGTH PN_MAX_DEVICE_NAME_LENGTH
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1[2]; PN_U8 Padding1[2];
...@@ -5130,7 +5311,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST { ...@@ -5130,7 +5311,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MRP_INSTANCE_DATA_ADJUST { typedef struct _T_PROFINET_MRP_INSTANCE_DATA_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding1; PN_U8 Padding1;
...@@ -5154,7 +5336,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_ADJUST { ...@@ -5154,7 +5336,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_ADJUST {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST_V1_1 { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST_V1_1
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding; PN_U8 Padding;
...@@ -5167,7 +5350,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST_V1_1 { ...@@ -5167,7 +5350,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_ADJUST_V1_1 {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_MRP_RING_STATE { typedef struct _T_PROFINET_MRP_RING_STATE
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 StateHighByte; PN_U8 StateHighByte;
...@@ -5177,7 +5361,8 @@ typedef struct _T_PROFINET_MRP_RING_STATE { ...@@ -5177,7 +5361,8 @@ typedef struct _T_PROFINET_MRP_RING_STATE {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5202,7 +5387,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL { ...@@ -5202,7 +5387,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MRP_INSTANCE_DATA_REAL { typedef struct _T_PROFINET_MRP_INSTANCE_DATA_REAL
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding; PN_U8 Padding;
...@@ -5228,7 +5414,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_REAL { ...@@ -5228,7 +5414,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_REAL {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL_V1_1 { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL_V1_1
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding; PN_U8 Padding;
...@@ -5246,7 +5433,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL_V1_1 { ...@@ -5246,7 +5433,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_REAL_V1_1 {
#define MRP_CHECK_DOMAIN_UUID_DISABLE (PN_U32)0x00000000 #define MRP_CHECK_DOMAIN_UUID_DISABLE (PN_U32)0x00000000
#define MRP_CHECK_DOMAIN_UUID_ENABLE (PN_U32)0x00000002 #define MRP_CHECK_DOMAIN_UUID_ENABLE (PN_U32)0x00000002
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5262,7 +5450,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK { ...@@ -5262,7 +5450,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_MRP_INSTANCE_DATA_CHECK { typedef struct _T_PROFINET_MRP_INSTANCE_DATA_CHECK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding; PN_U8 Padding;
...@@ -5277,7 +5466,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_CHECK { ...@@ -5277,7 +5466,8 @@ typedef struct _T_PROFINET_MRP_INSTANCE_DATA_CHECK {
} PACK_BYTE_ALIGNMENT(T_PROFINET_MRP_INSTANCE_DATA_CHECK); } PACK_BYTE_ALIGNMENT(T_PROFINET_MRP_INSTANCE_DATA_CHECK);
typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK_V1_1 { typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK_V1_1
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding; PN_U8 Padding;
...@@ -5289,7 +5479,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK_V1_1 { ...@@ -5289,7 +5479,8 @@ typedef struct _T_PROFINET_PD_INTERFACE_MRP_DATA_CHECK_V1_1 {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PD_PORT_MRP_DATA_ADJUST { typedef struct _T_PROFINET_PD_PORT_MRP_DATA_ADJUST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5305,7 +5496,8 @@ typedef T_PROFINET_PD_PORT_MRP_DATA_ADJUST T_PROFINET_PD_PORT_MRP_DATA_REAL; ...@@ -5305,7 +5496,8 @@ typedef T_PROFINET_PD_PORT_MRP_DATA_ADJUST T_PROFINET_PD_PORT_MRP_DATA_REAL;
#define PROFINET_MAX_LINE_RX_DELAY_UNKNOWN 0uL #define PROFINET_MAX_LINE_RX_DELAY_UNKNOWN 0uL
#define PROFINET_YELLOW_TIME_DISABLE 0uL #define PROFINET_YELLOW_TIME_DISABLE 0uL
typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_1 { typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_1
{
PN_U8 MaxTxDelayHighWordHighByte; PN_U8 MaxTxDelayHighWordHighByte;
PN_U8 MaxTxDelayHighWordLowByte; PN_U8 MaxTxDelayHighWordLowByte;
PN_U8 MaxTxDelayLowWordHighByte; PN_U8 MaxTxDelayLowWordHighByte;
...@@ -5322,7 +5514,8 @@ typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_1 { ...@@ -5322,7 +5514,8 @@ typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_1 {
#define PROFINET_DEFAULT_YELLOW_TIME 0x0001E848uL #define PROFINET_DEFAULT_YELLOW_TIME 0x0001E848uL
typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_2 { typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_2
{
PN_U8 MaxTxDelayHighWordHighByte; PN_U8 MaxTxDelayHighWordHighByte;
PN_U8 MaxTxDelayHighWordLowByte; PN_U8 MaxTxDelayHighWordLowByte;
PN_U8 MaxTxDelayLowWordHighByte; PN_U8 MaxTxDelayLowWordHighByte;
...@@ -5347,7 +5540,8 @@ typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_2 { ...@@ -5347,7 +5540,8 @@ typedef struct _T_PROFINET_PORT_GLOBAL_DATA_V1_2 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_GLOBAL_DATA { typedef struct _T_PROFINET_PDIR_GLOBAL_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5382,12 +5576,13 @@ typedef struct _T_PROFINET_PDIR_GLOBAL_DATA { ...@@ -5382,12 +5576,13 @@ typedef struct _T_PROFINET_PDIR_GLOBAL_DATA {
#define PROFINET_TX_PORT_GROUP_6 0x40u #define PROFINET_TX_PORT_GROUP_6 0x40u
#define PROFINET_TX_PORT_GROUP_7 0x80u #define PROFINET_TX_PORT_GROUP_7 0x80u
#define PROFINET_TX_PORT_GROUP_ALL \ #define PROFINET_TX_PORT_GROUP_ALL \
(PROFINET_TX_PORT_GROUP_LOCAL | PROFINET_TX_PORT_GROUP_1 \ (PROFINET_TX_PORT_GROUP_LOCAL | PROFINET_TX_PORT_GROUP_1 | \
| PROFINET_TX_PORT_GROUP_2 | PROFINET_TX_PORT_GROUP_3 \ PROFINET_TX_PORT_GROUP_2 | PROFINET_TX_PORT_GROUP_3 | \
| PROFINET_TX_PORT_GROUP_4 | PROFINET_TX_PORT_GROUP_5 \ PROFINET_TX_PORT_GROUP_4 | PROFINET_TX_PORT_GROUP_5 | \
| PROFINET_TX_PORT_GROUP_6 | PROFINET_TX_PORT_GROUP_7) PROFINET_TX_PORT_GROUP_6 | PROFINET_TX_PORT_GROUP_7)
typedef struct _T_PROFINET_PDIR_FRAME_DATA_DETAIL { typedef struct _T_PROFINET_PDIR_FRAME_DATA_DETAIL
{
PN_U8 FrameSendOffsetHighWordHighByte; PN_U8 FrameSendOffsetHighWordHighByte;
PN_U8 FrameSendOffsetHighWordLowByte; PN_U8 FrameSendOffsetHighWordLowByte;
PN_U8 FrameSendOffsetLowWordHighByte; PN_U8 FrameSendOffsetLowWordHighByte;
...@@ -5430,19 +5625,20 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_DETAIL { ...@@ -5430,19 +5625,20 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_DETAIL {
#define PROFINET_RTC3_MULTICAST_ADDRESS 0x00000002uL #define PROFINET_RTC3_MULTICAST_ADDRESS 0x00000002uL
#define PROFINET_FF_MULTICAST_ADDRESS 0x00000004uL #define PROFINET_FF_MULTICAST_ADDRESS 0x00000004uL
#define PROFINET_MULTICAST_ADDRESS_MASK \ #define PROFINET_MULTICAST_ADDRESS_MASK \
(PROFINET_LEGACY_MULTICAST_ADDRESS | PROFINET_RTC3_MULTICAST_ADDRESS \ (PROFINET_LEGACY_MULTICAST_ADDRESS | PROFINET_RTC3_MULTICAST_ADDRESS | \
| PROFINET_FF_MULTICAST_ADDRESS) PROFINET_FF_MULTICAST_ADDRESS)
#define PROFINET_FRAGMENTATION_DISABLED 0x00000000uL #define PROFINET_FRAGMENTATION_DISABLED 0x00000000uL
#define PROFINET_MAX_128_BYTE_FRAGMENTS 0x00000008uL #define PROFINET_MAX_128_BYTE_FRAGMENTS 0x00000008uL
#define PROFINET_MAX_256_BYTE_FRAGMENTS 0x00000010uL #define PROFINET_MAX_256_BYTE_FRAGMENTS 0x00000010uL
#define PROFINET_FRAGMENTATION_MASK \ #define PROFINET_FRAGMENTATION_MASK \
(PROFINET_FRAGMENTATION_DISABLED | PROFINET_MAX_128_BYTE_FRAGMENTS \ (PROFINET_FRAGMENTATION_DISABLED | PROFINET_MAX_128_BYTE_FRAGMENTS | \
| PROFINET_MAX_256_BYTE_FRAGMENTS) PROFINET_MAX_256_BYTE_FRAGMENTS)
#define PROFINET_PDIR_FRAME_PROPERTY_MASK 0x0000FFFFuL #define PROFINET_PDIR_FRAME_PROPERTY_MASK 0x0000FFFFuL
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_0 { typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_0
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5455,7 +5651,8 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_0 { ...@@ -5455,7 +5651,8 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_0 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_1 { typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_1
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5473,7 +5670,8 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_1 { ...@@ -5473,7 +5670,8 @@ typedef struct _T_PROFINET_PDIR_FRAME_DATA_V1_1 {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_RED_GUARD { typedef struct _T_PROFINET_RED_GUARD
{
PN_U8 StartOfRedFrameIdHighByte; PN_U8 StartOfRedFrameIdHighByte;
PN_U8 StartOfRedFrameIdLowByte; PN_U8 StartOfRedFrameIdLowByte;
...@@ -5484,7 +5682,8 @@ typedef struct _T_PROFINET_RED_GUARD { ...@@ -5484,7 +5682,8 @@ typedef struct _T_PROFINET_RED_GUARD {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_PERIOD_ASSIGNMENT { typedef struct _T_PROFINET_PDIR_PERIOD_ASSIGNMENT
{
PN_U8 RedOrangeHighWordHighByte; PN_U8 RedOrangeHighWordHighByte;
PN_U8 RedOrangeHighWordLowByte; PN_U8 RedOrangeHighWordLowByte;
PN_U8 RedOrangeLowWordHighByte; PN_U8 RedOrangeLowWordHighByte;
...@@ -5504,7 +5703,8 @@ typedef struct _T_PROFINET_PDIR_PERIOD_ASSIGNMENT { ...@@ -5504,7 +5703,8 @@ typedef struct _T_PROFINET_PDIR_PERIOD_ASSIGNMENT {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_PHASE { typedef struct _T_PROFINET_PDIR_PHASE
{
PN_U8 AssignmentHighByte; PN_U8 AssignmentHighByte;
PN_U8 AssignmentLowByte; PN_U8 AssignmentLowByte;
...@@ -5512,7 +5712,8 @@ typedef struct _T_PROFINET_PDIR_PHASE { ...@@ -5512,7 +5712,8 @@ typedef struct _T_PROFINET_PDIR_PHASE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_PHASE_ASSIGNMENT { typedef struct _T_PROFINET_PDIR_PHASE_ASSIGNMENT
{
T_PROFINET_PDIR_PHASE Tx; T_PROFINET_PDIR_PHASE Tx;
T_PROFINET_PDIR_PHASE Rx; T_PROFINET_PDIR_PHASE Rx;
...@@ -5520,7 +5721,8 @@ typedef struct _T_PROFINET_PDIR_PHASE_ASSIGNMENT { ...@@ -5520,7 +5721,8 @@ typedef struct _T_PROFINET_PDIR_PHASE_ASSIGNMENT {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_PORT_PHASE_DATA { typedef struct _T_PROFINET_PDIR_PORT_PHASE_DATA
{
PN_U8 NumberOfPhasesHighWordHighByte; PN_U8 NumberOfPhasesHighWordHighByte;
PN_U8 NumberOfPhasesHighWordLowByte; PN_U8 NumberOfPhasesHighWordLowByte;
PN_U8 NumberOfPhasesLowWordHighByte; PN_U8 NumberOfPhasesLowWordHighByte;
...@@ -5534,7 +5736,8 @@ typedef struct _T_PROFINET_PDIR_PORT_PHASE_DATA { ...@@ -5534,7 +5736,8 @@ typedef struct _T_PROFINET_PDIR_PORT_PHASE_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_BEGIN_END_ASSIGNMENT { typedef struct _T_PROFINET_PDIR_BEGIN_END_ASSIGNMENT
{
T_PROFINET_PDIR_PERIOD_ASSIGNMENT Tx; T_PROFINET_PDIR_PERIOD_ASSIGNMENT Tx;
T_PROFINET_PDIR_PERIOD_ASSIGNMENT Rx; T_PROFINET_PDIR_PERIOD_ASSIGNMENT Rx;
...@@ -5544,7 +5747,8 @@ typedef struct _T_PROFINET_PDIR_BEGIN_END_ASSIGNMENT { ...@@ -5544,7 +5747,8 @@ typedef struct _T_PROFINET_PDIR_BEGIN_END_ASSIGNMENT {
#define MAX_NUMBER_PDIR_BEGIN_END_ASSIGNMENTS 0x00000010uL #define MAX_NUMBER_PDIR_BEGIN_END_ASSIGNMENTS 0x00000010uL
typedef struct _T_PROFINET_PDIR_PORT_BEGIN_END_DATA { typedef struct _T_PROFINET_PDIR_PORT_BEGIN_END_DATA
{
PN_U8 NumberOfAssignmentsHighWordHighByte; PN_U8 NumberOfAssignmentsHighWordHighByte;
PN_U8 NumberOfAssignmentsHighWordLowByte; PN_U8 NumberOfAssignmentsHighWordLowByte;
PN_U8 NumberOfAssignmentsLowWordHighByte; PN_U8 NumberOfAssignmentsLowWordHighByte;
...@@ -5558,7 +5762,8 @@ typedef struct _T_PROFINET_PDIR_PORT_BEGIN_END_DATA { ...@@ -5558,7 +5762,8 @@ typedef struct _T_PROFINET_PDIR_PORT_BEGIN_END_DATA {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_PDIR_BEGIN_END_DATA { typedef struct _T_PROFINET_PDIR_BEGIN_END_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5579,7 +5784,8 @@ typedef struct _T_PROFINET_PDIR_BEGIN_END_DATA { ...@@ -5579,7 +5784,8 @@ typedef struct _T_PROFINET_PDIR_BEGIN_END_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PDIR_DATA { typedef struct _T_PROFINET_PDIR_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5622,7 +5828,8 @@ typedef struct _T_PROFINET_PDIR_DATA { ...@@ -5622,7 +5828,8 @@ typedef struct _T_PROFINET_PDIR_DATA {
#define PROFINET_SYNC_PROPERTY_ROLE_SLAVE 0x0001u #define PROFINET_SYNC_PROPERTY_ROLE_SLAVE 0x0001u
#define PROFINET_SYNC_PROPERTY_ROLE_MASTER 0x0002u #define PROFINET_SYNC_PROPERTY_ROLE_MASTER 0x0002u
typedef struct _T_PROFINET_PD_SYNC_DATA { typedef struct _T_PROFINET_PD_SYNC_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5678,7 +5885,8 @@ typedef struct _T_PROFINET_PD_SYNC_DATA { ...@@ -5678,7 +5885,8 @@ typedef struct _T_PROFINET_PD_SYNC_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_SUBFRAME_BLOCK { typedef struct _T_PROFINET_SUBFRAME_BLOCK
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 FrameIdHighByte; PN_U8 FrameIdHighByte;
...@@ -5700,7 +5908,8 @@ typedef struct _T_PROFINET_SUBFRAME_BLOCK { ...@@ -5700,7 +5908,8 @@ typedef struct _T_PROFINET_SUBFRAME_BLOCK {
#define PROFINET_MAX_NUMBER_SUBFRAME_BLOCKS 255u #define PROFINET_MAX_NUMBER_SUBFRAME_BLOCKS 255u
typedef struct _T_PROFINET_PDIR_SUBFRAME_DATA { typedef struct _T_PROFINET_PDIR_SUBFRAME_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberOfBlocksHighByte; PN_U8 NumberOfBlocksHighByte;
...@@ -5714,7 +5923,8 @@ typedef struct _T_PROFINET_PDIR_SUBFRAME_DATA { ...@@ -5714,7 +5923,8 @@ typedef struct _T_PROFINET_PDIR_SUBFRAME_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_PDEV_DATA { typedef struct _T_PROFINET_PDEV_DATA
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5729,7 +5939,8 @@ typedef struct _T_PROFINET_PDEV_DATA { ...@@ -5729,7 +5939,8 @@ typedef struct _T_PROFINET_PDEV_DATA {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_IDENT_MAINTENANCE { typedef struct _T_PROFINET_IDENT_MAINTENANCE
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 VendorIdHighByte; PN_U8 VendorIdHighByte;
...@@ -5765,7 +5976,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE { ...@@ -5765,7 +5976,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IDENT_MAINTENANCE_1 { typedef struct _T_PROFINET_IDENT_MAINTENANCE_1
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Function[PROFINET_IDENT_MAINTENANCE_FUNCTION_LENGTH]; PN_U8 Function[PROFINET_IDENT_MAINTENANCE_FUNCTION_LENGTH];
...@@ -5775,7 +5987,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_1 { ...@@ -5775,7 +5987,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_1 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IDENT_MAINTENANCE_2 { typedef struct _T_PROFINET_IDENT_MAINTENANCE_2
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Date[PROFINET_IDENT_MAINTENANCE_DATE_LENGTH]; PN_U8 Date[PROFINET_IDENT_MAINTENANCE_DATE_LENGTH];
...@@ -5784,7 +5997,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_2 { ...@@ -5784,7 +5997,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_2 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IDENT_MAINTENANCE_3 { typedef struct _T_PROFINET_IDENT_MAINTENANCE_3
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Description[PROFINET_IDENT_MAINTENANCE_DESCRIPTION_LENGTH]; PN_U8 Description[PROFINET_IDENT_MAINTENANCE_DESCRIPTION_LENGTH];
...@@ -5793,7 +6007,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_3 { ...@@ -5793,7 +6007,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_3 {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_IDENT_MAINTENANCE_4 { typedef struct _T_PROFINET_IDENT_MAINTENANCE_4
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Signature[PROFINET_IDENT_MAINTENANCE_SIGNATURE_LENGTH]; PN_U8 Signature[PROFINET_IDENT_MAINTENANCE_SIGNATURE_LENGTH];
...@@ -5802,7 +6017,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_4 { ...@@ -5802,7 +6017,8 @@ typedef struct _T_PROFINET_IDENT_MAINTENANCE_4 {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_MULTIPLE_HEADER { typedef struct _T_PROFINET_MULTIPLE_HEADER
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 Padding[2]; PN_U8 Padding[2];
...@@ -5825,7 +6041,8 @@ typedef T_PROFINET_MULTIPLE_HEADER T_PROFINET_PD_EXPECTED_DATA; ...@@ -5825,7 +6041,8 @@ typedef T_PROFINET_MULTIPLE_HEADER T_PROFINET_PD_EXPECTED_DATA;
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_RECORD_DIAGNOSIS { typedef struct _T_PROFINET_RECORD_DIAGNOSIS
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
...@@ -5859,7 +6076,8 @@ typedef struct _T_PROFINET_RECORD_DIAGNOSIS { ...@@ -5859,7 +6076,8 @@ typedef struct _T_PROFINET_RECORD_DIAGNOSIS {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PROFINET_SUBMODULE_LIST_ENTRY { typedef struct _T_PROFINET_SUBMODULE_LIST_ENTRY
{
PN_U8 APIHighWordHighByte; PN_U8 APIHighWordHighByte;
PN_U8 APIHighWordLowByte; PN_U8 APIHighWordLowByte;
PN_U8 APILowWordHighByte; PN_U8 APILowWordHighByte;
...@@ -5875,7 +6093,8 @@ typedef struct _T_PROFINET_SUBMODULE_LIST_ENTRY { ...@@ -5875,7 +6093,8 @@ typedef struct _T_PROFINET_SUBMODULE_LIST_ENTRY {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PROFINET_SUBMODULE_LIST { typedef struct _T_PROFINET_SUBMODULE_LIST
{
T_PROFINET_BLOCK_HEADER Header; T_PROFINET_BLOCK_HEADER Header;
PN_U8 NumberEntriesHighByte; PN_U8 NumberEntriesHighByte;
...@@ -5896,7 +6115,8 @@ typedef struct _T_PROFINET_SUBMODULE_LIST { ...@@ -5896,7 +6115,8 @@ typedef struct _T_PROFINET_SUBMODULE_LIST {
#define C_CONTROL_COMMAND_READYFORRTCLASS3 0x0020u #define C_CONTROL_COMMAND_READYFORRTCLASS3 0x0020u
#define C_CONTROL_COMMAND_PRM_BEGIN 0x0040u #define C_CONTROL_COMMAND_PRM_BEGIN 0x0040u
typedef struct _T_PN_SERVICE_CONTROL_IND { typedef struct _T_PN_SERVICE_CONTROL_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -5917,7 +6137,8 @@ typedef struct _T_PN_SERVICE_CONTROL_IND { ...@@ -5917,7 +6137,8 @@ typedef struct _T_PN_SERVICE_CONTROL_IND {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_CONTROL_RES_ERROR { typedef struct _T_PN_CONTROL_RES_ERROR
{
PN_U8 ErrorCode1; PN_U8 ErrorCode1;
PN_U8 ErrorCode2; PN_U8 ErrorCode2;
...@@ -5930,7 +6151,8 @@ typedef struct _T_PN_CONTROL_RES_ERROR { ...@@ -5930,7 +6151,8 @@ typedef struct _T_PN_CONTROL_RES_ERROR {
#define PROFINET_ERROR_CODE1_SUBMODULE_LIST_BLOCK_FAULTY 25u #define PROFINET_ERROR_CODE1_SUBMODULE_LIST_BLOCK_FAULTY 25u
typedef struct _T_PN_SERVICE_CONTROL_RES { typedef struct _T_PN_SERVICE_CONTROL_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -5956,7 +6178,8 @@ typedef struct _T_PN_SERVICE_CONTROL_RES { ...@@ -5956,7 +6178,8 @@ typedef struct _T_PN_SERVICE_CONTROL_RES {
/*===========================================================================*/ /*===========================================================================*/
typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_IND { typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -5971,7 +6194,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_IND { ...@@ -5971,7 +6194,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_IND {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_REQ { typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_REQ
{
PN_U8 NumberOfBlocksHighByte; PN_U8 NumberOfBlocksHighByte;
PN_U8 NumberOfBlocksLowByte; PN_U8 NumberOfBlocksLowByte;
...@@ -5983,7 +6207,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_REQ { ...@@ -5983,7 +6207,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_REQ {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_WRITE_MULTIPLE_RES { typedef struct _T_WRITE_MULTIPLE_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -6008,7 +6233,8 @@ typedef struct _T_WRITE_MULTIPLE_RES { ...@@ -6008,7 +6233,8 @@ typedef struct _T_WRITE_MULTIPLE_RES {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_RES { typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_RES
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
...@@ -6027,7 +6253,8 @@ typedef T_WRITE_MULTIPLE_RES T_WRITE_MULTIPLE_CON; ...@@ -6027,7 +6253,8 @@ typedef T_WRITE_MULTIPLE_RES T_WRITE_MULTIPLE_CON;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_CON { typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_CON
{
PN_U8 NumberOfBlocksHighByte; PN_U8 NumberOfBlocksHighByte;
PN_U8 NumberOfBlocksLowByte; PN_U8 NumberOfBlocksLowByte;
...@@ -6044,7 +6271,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_CON { ...@@ -6044,7 +6271,8 @@ typedef struct _T_PN_SERVICE_WRITE_MULTIPLE_CON {
? MAX_NUMBER_LOCAL_MISMATCH_ENTRIES \ ? MAX_NUMBER_LOCAL_MISMATCH_ENTRIES \
: MAX_NUMBER_PEER_MISMATCH_ENTRIES) : MAX_NUMBER_PEER_MISMATCH_ENTRIES)
typedef struct _T_PN_SERVICE_LOCAL_AND_PEER_CHECK_IND { typedef struct _T_PN_SERVICE_LOCAL_AND_PEER_CHECK_IND
{
PN_U8 ARIdentifierHighByte; PN_U8 ARIdentifierHighByte;
PN_U8 ARIdentifierLowByte; PN_U8 ARIdentifierLowByte;
......
/*
* ProviewR Open Source Process Control.
* Copyright (C) 2005-2019 SSAB EMEA AB.
*
* This file is part of ProviewR.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProviewR. If not, see <http://www.gnu.org/licenses/>
*
* Linking ProviewR statically or dynamically with other modules is
* making a combined work based on ProviewR. Thus, the terms and
* conditions of the GNU General Public License cover the whole
* combination.
*
* In addition, as a special exception, the copyright holders of
* ProviewR give you permission to, from the build function in the
* ProviewR Configurator, combine ProviewR with modules generated by the
* ProviewR PLC Editor to a PLC program, regardless of the license
* terms of these modules. You may copy and distribute the resulting
* combined work under the terms of your choice, provided that every
* copy of the combined work is accompanied by a complete copy of
* the source code of ProviewR (the version used to produce the
* combined work), being distributed under the terms of the GNU
* General Public License plus this exception.
*/
/*****************************************************************************/ /*****************************************************************************/
/* */ /* */
/* SOFTING AG */ /* SOFTING AG */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment