Commit ce758cd3 authored by Marcus Nordenberg's avatar Marcus Nordenberg

update profibus api

parent 9344a78b
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: (++49)-(0)89-45656-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: (++49)-(0)89-45656-399 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
******************************************************************************* *******************************************************************************
...@@ -55,11 +20,11 @@ MODULE PAPI ...@@ -55,11 +20,11 @@ MODULE PAPI
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.26.1.00.release VERSION 5.46.0.00.release
DATE 27-June-2003 DATE October-2011
STATUS finished STATUS finished
...@@ -67,12 +32,12 @@ STATUS finished ...@@ -67,12 +32,12 @@ STATUS finished
FUNCTIONAL_MODULE_DESCRIPTION FUNCTIONAL_MODULE_DESCRIPTION
PROFIBUS FMS/DPV1 Master and DP-Slave Application Program Interface (PAPI) for PROFIBUS DP Master, FMS/DPV1 Master and DP-Slave Application Program Interface
WinXP/Win2K/WinNT (PAPI) for Linux
------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------
This modul contains the PROFIBUS FMS/DPV1 Master and DP-Slave Application This modul contains the PROFIBUS DP Master, FMS/DPV1 Master and DP-Slave
Program Interface Application Program Interface
functions. functions.
...@@ -142,14 +107,35 @@ extern INT16 fmbgdl_get_data_len(INT16, USIGN8, USIGN8, USIGN8*, INT16*); ...@@ -142,14 +107,35 @@ extern INT16 fmbgdl_get_data_len(INT16, USIGN8, USIGN8, USIGN8*, INT16*);
EXPORT_DATA EXPORT_DATA
// --- global variables used for compatibility mode
HANDLE hServiceReadDevice = 0; // Handle for Service device
HANDLE hServiceWriteDevice = (HANDLE)0; // Handle for Service device
HANDLE hDpDataDevice = (HANDLE)0; // Handle for DP-Data device
HANDLE hDpsInputDataDevice = (HANDLE)0; // Handle for DP-Slave Input-Data device
HANDLE hDpsOutputDataDevice =
(HANDLE)0; // Handle for DP-Slave Output-Data device
USIGN8 CurrentBoardNumber = 0;
USIGN16 last_error = 0;
IMPORT_DATA IMPORT_DATA
LOCAL_DATA LOCAL_DATA
// --- copyright // --- copyright
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
static const char copyright[] = "PROFIBUS WinXP/Win2K/WinNT API (c) Copyright "
"1995-2005. SOFTING AG. All Rights Reserved.";
// --- Operation Mode // --- Operation Mode
static USIGN32 OperationMode; static USIGN32 OperationMode;
#endif
#ifdef _LINUX
static const char copyright[] = "PROFIBUS Linux API (c) Copyright 1995-2005. "
"SOFTING AG. All Rights Reserved.";
#endif #endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
...@@ -240,12 +226,12 @@ Possible return values: ...@@ -240,12 +226,12 @@ Possible return values:
Channel = 0; // for future use Channel = 0; // for future use
// --- open basic management device // --- open basic management device
sprintf( sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\Management", Board,
DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\Management", Board, Channel); Channel);
return ( return (CreateFile(DeviceName, DesiredAccess,
CreateFile(DeviceName, DesiredAccess, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); FILE_ATTRIBUTE_NORMAL, NULL));
} }
#endif #endif
...@@ -253,7 +239,9 @@ Possible return values: ...@@ -253,7 +239,9 @@ Possible return values:
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL HANDLE CALL_CONV profi_open(IN HANDLE hBasicMgmtDevice, FUNCTION GLOBAL HANDLE CALL_CONV profi_open(IN HANDLE hBasicMgmtDevice,
IN INT32 DeviceType, IN USIGN32 Index, IN INT32 DesiredAccess) IN INT32 DeviceType,
IN USIGN32 Index,
IN INT32 DesiredAccess)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -293,7 +281,8 @@ Possible return values: ...@@ -293,7 +281,8 @@ Possible return values:
FUNCTION_BODY FUNCTION_BODY
// --- select IOCTL code specified by device type // --- select IOCTL code specified by device type
switch (DeviceType) { switch (DeviceType)
{
case DEVICE_DP_MANAGEMENT: case DEVICE_DP_MANAGEMENT:
IOControlCode = (DWORD)IOCTL_PROFI_CREATE_DP_MANAGEMENT; IOControlCode = (DWORD)IOCTL_PROFI_CREATE_DP_MANAGEMENT;
break; break;
...@@ -333,15 +322,16 @@ Possible return values: ...@@ -333,15 +322,16 @@ Possible return values:
// --- get device name // --- get device name
if (!DeviceIoControl((HANDLE)hBasicMgmtDevice, (DWORD)IOControlCode, if (!DeviceIoControl((HANDLE)hBasicMgmtDevice, (DWORD)IOControlCode,
(LPVOID)&Index, (DWORD)sizeof(ULONG), (LPVOID)DeviceName, (DWORD)128, (LPVOID)&Index, (DWORD)sizeof(ULONG), (LPVOID)DeviceName,
(LPDWORD)&BytesReturned, NULL)) { (DWORD)128, (LPDWORD)&BytesReturned, NULL))
{
return (INVALID_HANDLE_VALUE); return (INVALID_HANDLE_VALUE);
} }
// --- open device // --- open device
return ( return (CreateFile(DeviceName, DesiredAccess,
CreateFile(DeviceName, DesiredAccess, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); FILE_ATTRIBUTE_NORMAL, NULL));
} }
#endif #endif
...@@ -376,9 +366,9 @@ Possible return values: ...@@ -376,9 +366,9 @@ Possible return values:
#endif #endif
FUNCTION GLOBAL INT16 CALL_CONV profi_read_service(IN HANDLE hDevice, FUNCTION GLOBAL INT16 CALL_CONV
OUT T_PROFI_SERVICE_DESCR* pSdb, OUT VOID* pData, profi_read_service(IN HANDLE hDevice, OUT T_PROFI_SERVICE_DESCR* pSdb,
INOUT USIGN16* pDataLength) OUT VOID* pData, INOUT USIGN16* pDataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -415,19 +405,25 @@ received ...@@ -415,19 +405,25 @@ received
// printf("papi: profi_read_service\n"); // printf("papi: profi_read_service\n");
// --- allocate memory for SDB and DATABLOCK // --- allocate memory for SDB and DATABLOCK
if (!(pSdbData = malloc((*pDataLength + sizeof(T_PROFI_SERVICE_DESCR))))) { if (!(pSdbData = malloc((*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)))))
{
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
while ((BytesRead = read(hDevice, pSdbData, while ((BytesRead =
(int)(*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)))) read(hDevice, pSdbData,
< 0) { (int)(*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)))) < 0)
if (errno != EAGAIN) { {
if (errno != EAGAIN)
{
free(pSdbData); free(pSdbData);
printf("%s\n", strerror(errno)); printf("%s\n", strerror(errno));
// printf("bytesRead=%u\n",BytesRead); // printf("bytesRead=%u\n",BytesRead);
return (papi_get_last_error()); return (papi_get_last_error());
} else { }
else
{
*pDataLength = 0; *pDataLength = 0;
free(pSdbData); free(pSdbData);
// printf("bytesRead=%u\n",BytesRead); // printf("bytesRead=%u\n",BytesRead);
...@@ -439,12 +435,15 @@ received ...@@ -439,12 +435,15 @@ received
// printf("bytesRead=%u\n",BytesRead); // printf("bytesRead=%u\n",BytesRead);
// --- check if IND or CON is available // --- check if IND or CON is available
if (BytesRead == 0) { if (BytesRead == 0)
{
*pDataLength = 0; *pDataLength = 0;
// printf ("%s 3\n", strerror (errno)); // printf ("%s 3\n", strerror (errno));
free(pSdbData); free(pSdbData);
return (NO_CON_IND_RECEIVED); return (NO_CON_IND_RECEIVED);
} else { }
else
{
// printf("bytesRead=%u\n",BytesRead); // printf("bytesRead=%u\n",BytesRead);
} }
...@@ -456,7 +455,8 @@ received ...@@ -456,7 +455,8 @@ received
*pDataLength = (USIGN16)BytesRead - sizeof(T_PROFI_SERVICE_DESCR); *pDataLength = (USIGN16)BytesRead - sizeof(T_PROFI_SERVICE_DESCR);
// --- copy DATABLOCK // --- copy DATABLOCK
if (*pDataLength) { if (*pDataLength)
{
memcpy(pData, &pSdbData[sizeof(T_PROFI_SERVICE_DESCR)], *pDataLength); memcpy(pData, &pSdbData[sizeof(T_PROFI_SERVICE_DESCR)], *pDataLength);
} }
...@@ -519,7 +519,8 @@ RES ...@@ -519,7 +519,8 @@ RES
pSdb->comm_ref &= 0x00FF; // clear all BITs in upper byte pSdb->comm_ref &= 0x00FF; // clear all BITs in upper byte
// --- check Service-Primitive // --- check Service-Primitive
if ((pSdb->primitive == IND) || (pSdb->primitive == CON)) { if ((pSdb->primitive == IND) || (pSdb->primitive == CON))
{
return (E_IF_INVALID_PRIMITIVE); return (E_IF_INVALID_PRIMITIVE);
} }
...@@ -528,35 +529,36 @@ RES ...@@ -528,35 +529,36 @@ RES
pSdb->result = POS; pSdb->result = POS;
// --- get service specific data length // --- get service specific data length
switch (pSdb->layer) { switch (pSdb->layer)
{
case FMS: case FMS:
RetVal = fmsgdl_get_data_len( RetVal = fmsgdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
case FM7: case FM7:
RetVal = fm7gdl_get_data_len( RetVal = fm7gdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
case FDLIF: case FDLIF:
RetVal = fdlgdl_get_data_len( RetVal = fdlgdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
case DP: case DP:
RetVal = dpgdl_get_data_len( RetVal = dpgdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
case FMB: case FMB:
RetVal = fmbgdl_get_data_len( RetVal = fmbgdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
case DPS: case DPS:
RetVal = dpsgdl_get_data_len( RetVal = dpsgdl_get_data_len(pSdb->result, pSdb->service, pSdb->primitive,
pSdb->result, pSdb->service, pSdb->primitive, pData, &DataLength); pData, &DataLength);
break; break;
default: default:
...@@ -564,10 +566,12 @@ RES ...@@ -564,10 +566,12 @@ RES
break; break;
} }
if (RetVal == E_OK) { if (RetVal == E_OK)
{
// allocate memory for SDB and DATABLOCK // allocate memory for SDB and DATABLOCK
if (!(pSdbData if (!(pSdbData =
= (USIGN8*)malloc((DataLength + sizeof(T_PROFI_SERVICE_DESCR))))) { (USIGN8*)malloc((DataLength + sizeof(T_PROFI_SERVICE_DESCR)))))
{
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
...@@ -583,8 +587,8 @@ RES ...@@ -583,8 +587,8 @@ RES
#endif #endif
#ifdef _LINUX #ifdef _LINUX
if ((write(hDevice, pSdbData, DataLength + sizeof(T_PROFI_SERVICE_DESCR))) if ((write(hDevice, pSdbData,
< 0) DataLength + sizeof(T_PROFI_SERVICE_DESCR))) < 0)
#endif #endif
{ {
free(pSdbData); free(pSdbData);
...@@ -639,7 +643,8 @@ received ...@@ -639,7 +643,8 @@ received
FUNCTION_BODY FUNCTION_BODY
// --- allocate memory for SDB and DATABLOCK // --- allocate memory for SDB and DATABLOCK
if (!(pSdbData = malloc((*pDataLength + sizeof(T_PROFI_SERVICE_DESCR))))) { if (!(pSdbData = malloc((*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)))))
{
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
...@@ -648,13 +653,15 @@ received ...@@ -648,13 +653,15 @@ received
(LPVOID)phDevices, (DWORD)NrOfHandles * sizeof(HANDLE), (LPVOID)phDevices, (DWORD)NrOfHandles * sizeof(HANDLE),
(LPVOID)pSdbData, (LPVOID)pSdbData,
(DWORD)(*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)), (DWORD)(*pDataLength + sizeof(T_PROFI_SERVICE_DESCR)),
(LPDWORD)&BytesRead, NULL)) { (LPDWORD)&BytesRead, NULL))
{
free(pSdbData); free(pSdbData);
return (papi_get_last_error()); return (papi_get_last_error());
} }
// --- check if IND or CON is available // --- check if IND or CON is available
if (BytesRead == 0) { if (BytesRead == 0)
{
*pDataLength = 0; *pDataLength = 0;
free(pSdbData); free(pSdbData);
return (NO_CON_IND_RECEIVED); return (NO_CON_IND_RECEIVED);
...@@ -668,7 +675,8 @@ received ...@@ -668,7 +675,8 @@ received
*pDataLength = (USIGN16)BytesRead - sizeof(T_PROFI_SERVICE_DESCR); *pDataLength = (USIGN16)BytesRead - sizeof(T_PROFI_SERVICE_DESCR);
// --- copy DATABLOCK // --- copy DATABLOCK
if (*pDataLength) { if (*pDataLength)
{
memcpy(pData, &pSdbData[sizeof(T_PROFI_SERVICE_DESCR)], *pDataLength); memcpy(pData, &pSdbData[sizeof(T_PROFI_SERVICE_DESCR)], *pDataLength);
} }
...@@ -680,94 +688,10 @@ received ...@@ -680,94 +688,10 @@ received
#endif #endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL INT16 CALL_CONV profi_read_data(
IN HANDLE hDevice, OUT VOID* pData, INOUT USIGN16* pDataLength)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to read DP-Slave-I/O-Data from a DP SLAVE DATA DEVICE.
IN: hDevice -> device handle
OUT: pData -> pointer to data buffer
INOUT: pDataLength -> IN: length of data buffer
OUT: length of received data
Possible return values:
- E_OK -> no error occured
- E_IF_INVALID_DP_STATE -> DP is not in operational state
- E_IF_SLAVE_ERROR -> no valid communication with DP-Slave
- E_IF_SLAVE_DIAG_DATA -> new DP diagnostics data available
- E_IF_INVALID_CMI_CALL -> invalid offset inside data image
- E_IF_CMI_ERROR -> serious CMI error
- E_IF_INVALID_DATA_SIZE -> size of data block provided not sufficient
- E_IF_SERVICE_CONSTR_CONFLICT -> service not executable at time
- E_IF_OS_ERROR -> NT system error
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesRead = 0;
FUNCTION_BODY
if (!ReadFile(hDevice, pData, *pDataLength, &BytesRead, NULL)) {
*pDataLength = 0;
return (papi_get_last_error());
} else {
*pDataLength = (USIGN16)BytesRead;
return (E_OK);
}
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL INT16 CALL_CONV profi_write_data(
IN HANDLE hDevice, IN VOID* pData, IN USIGN16 DataLength)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to write DP-Slave-I/O-Data to a DP SLAVE DATA DEVICE.
IN: hDevice -> device handle
IN: pData -> pointer to data buffer
IN: DataLength -> length of data to write
Possible return values:
- E_OK -> no error occured
- E_IF_INVALID_DP_STATE -> DP is not in operational state
- E_IF_SLAVE_ERROR -> no valid communication with DP-Slave
- E_IF_SLAVE_DIAG_DATA -> new DP diagnostics data available
- E_IF_INVALID_CMI_CALL -> invalid offset inside data image
- E_IF_CMI_ERROR -> serious CMI error
- E_IF_INVALID_DATA_SIZE -> size of data block provided not sufficient
- E_IF_SERVICE_CONSTR_CONFLICT -> service not executable at time
- E_IF_OS_ERROR -> NT system error
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesWritten = 0;
FUNCTION_BODY
// write data
if (!WriteFile(hDevice, pData, DataLength, &BytesWritten, NULL)) {
return (papi_get_last_error());
} else {
return (E_OK);
}
}
#endif
FUNCTION GLOBAL INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice, FUNCTION GLOBAL INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice,
OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState) OUT USIGN8* pData,
INOUT USIGN8* pDataLength,
OUT USIGN8* pState)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -821,14 +745,18 @@ Possible return values: ...@@ -821,14 +745,18 @@ Possible return values:
*pDataLength = (USIGN8)(BytesRead - 1); *pDataLength = (USIGN8)(BytesRead - 1);
memcpy(pData, DataBuffer, *pDataLength); memcpy(pData, DataBuffer, *pDataLength);
return (E_OK); return (E_OK);
} else { }
else
{
*pDataLength = 0; *pDataLength = 0;
return (papi_get_last_error()); return (papi_get_last_error());
} }
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice, FUNCTION GLOBAL INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice,
IN USIGN8* pData, IN USIGN8 DataLength, OUT USIGN8* pState) IN USIGN8* pData,
IN USIGN8 DataLength,
OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -857,6 +785,7 @@ data size ...@@ -857,6 +785,7 @@ data size
#ifdef _LINUX #ifdef _LINUX
NTIoctl SlaveInput; NTIoctl SlaveInput;
char FirstByte;
#endif #endif
FUNCTION_BODY FUNCTION_BODY
...@@ -875,271 +804,31 @@ data size ...@@ -875,271 +804,31 @@ data size
SlaveInput.OutBuf = (USIGN8*)pData; SlaveInput.OutBuf = (USIGN8*)pData;
SlaveInput.OutBufLength = DataLength; SlaveInput.OutBufLength = DataLength;
if (DataLength)
{
FirstByte = pData[0];
}
// printf("\nprofi_get_data: buf=%p, len=%u, size=%lu\n",
// SlaveInput.InBuf,
// SlaveInput.InBufLength,
// sizeof(SlaveInput));
if (ioctl(hDevice, IOCTL_PROFI_SET_SLAVE_IN, &SlaveInput) == -1) if (ioctl(hDevice, IOCTL_PROFI_SET_SLAVE_IN, &SlaveInput) == -1)
#endif #endif
{ {
return (papi_get_last_error()); return (papi_get_last_error());
} else {
return (E_OK);
} }
} else
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) if (DataLength)
{
FUNCTION GLOBAL BOOL CALL_CONV profi_get_cntrl_info(IN USIGN8 Board, pData[0] = FirstByte;
OUT char* pFirmwareVersion, OUT USIGN32* pSerialDeviceNumber)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to get the version of the firmware and the serial
device number of PROFIBUS controller.
IN: Board -> board number
OUT: pFirmwareVersion -> data buffer for firmware version string
OUT: pSerialDeviceNumber -> serial device number
NOTE: There must be at least 100 Bytes (VERSION_STRING_LENGTH) free space for
firmware version buffer.
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesRead = 0;
HANDLE hDevice;
PROFI_DATA_IMAGE_DESCR DataImageDescr;
char DeviceName[64];
FUNCTION_BODY
// --- open BOARD device
sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Board", Board);
if (INVALID_HANDLE_VALUE
== (hDevice = CreateFile(DeviceName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL))) {
return (FALSE);
}
// --- get FIRMWARE VERSION
DataImageDescr.imageId = ID_FW_VERS_IMAGE;
DataImageDescr.offset = 0;
DataImageDescr.bus = 0;
if (!DeviceIoControl((HANDLE)hDevice, (DWORD)IOCTL_PROFI_GET_DATA_IMAGE,
(LPVOID)&DataImageDescr, (DWORD)sizeof(DataImageDescr),
(LPVOID)pFirmwareVersion, (DWORD)VERSION_STRING_LENGTH,
(LPDWORD)&BytesRead, NULL)) {
CloseHandle(hDevice);
return (FALSE);
}
// --- get SERIAL DEVICE NUMBER
DataImageDescr.imageId = ID_SERIAL_DEVICE_NUMBER;
DataImageDescr.offset = 0;
DataImageDescr.bus = 0;
if (!DeviceIoControl((HANDLE)hDevice, (DWORD)IOCTL_PROFI_GET_DATA_IMAGE,
(LPVOID)(VOID*)&DataImageDescr, (DWORD)sizeof(DataImageDescr),
(LPVOID)pSerialDeviceNumber, (DWORD)sizeof(USIGN32),
(LPDWORD)&BytesRead, NULL)) {
CloseHandle(hDevice);
return (FALSE);
}
CloseHandle(hDevice);
return (TRUE);
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL BOOL CALL_CONV profi_set_timeout(
IN HANDLE hBasicMgmtDevice, IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to set send and receive TIMEOUTs for SEND/RECEIVE
interface
functions
IN: hBasicMgmtDevice -> basic management device handle
IN: ReadTimeout -> receive timeout in ms (WAIT_FOREVER for infinite wait)
IN: WriteTimeout -> send timeout in ms (WAIT_FOREVER for infinite wait)
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesReturned;
USIGN32 ReadWriteTimeout[2];
FUNCTION_BODY
ReadWriteTimeout[0] = ReadTimeout;
ReadWriteTimeout[1] = WriteTimeout;
return (
DeviceIoControl((HANDLE)hBasicMgmtDevice, (DWORD)IOCTL_PROFI_SET_TIMEOUT,
(LPVOID)ReadWriteTimeout, (DWORD)2 * sizeof(USIGN32), (LPVOID)NULL,
(DWORD)0, (LPDWORD)&BytesReturned, NULL));
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL BOOL CALL_CONV profi_get_timeout(IN HANDLE hBasicMgmtDevice,
OUT USIGN32* pReadTimeout, OUT USIGN32* pWriteTimeout)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to get the set send and receive TIMEOUTs for SEND/RECEIVE
interface functions
IN: hBasicMgmtDevice -> basic management device handle
OUT: pReadTimeout -> pointer to receive timeout in ms (WAIT_FOREVER for
infinite wait)
OUT: pWriteTimeout -> pointer to send timeout in ms (WAIT_FOREVER for
infinite wait)
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesReturned;
USIGN32 ReadWriteTimeout[2];
FUNCTION_BODY
if (!DeviceIoControl((HANDLE)hBasicMgmtDevice, (DWORD)IOCTL_PROFI_GET_TIMEOUT,
(LPVOID)NULL, (DWORD)0, (LPVOID)ReadWriteTimeout,
(DWORD)2 * sizeof(USIGN32), (LPDWORD)&BytesReturned, NULL)) {
return (FALSE);
} }
if (BytesReturned == 8) { return (E_OK);
*pReadTimeout = ReadWriteTimeout[0];
*pWriteTimeout = ReadWriteTimeout[1];
return (TRUE);
} else {
SetLastError(ERROR_INVALID_DATA);
return (FALSE);
} }
} }
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL BOOL CALL_CONV profi_set_queue_size(
IN HANDLE hBasicMgmtDevice, IN USIGN32 QueueSize)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to set the max. receive queue size for the PROFIBUS
driver.
IN: hBasicMgmtDevice -> basic management device handle
IN: QueueSize -> max. receive queue size
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesReturned;
FUNCTION_BODY
return (DeviceIoControl((HANDLE)hBasicMgmtDevice,
(DWORD)IOCTL_PROFI_SET_QUEUE_SIZE, (LPVOID)&QueueSize,
(DWORD)sizeof(USIGN32), (LPVOID)NULL, (DWORD)0, (LPDWORD)&BytesReturned,
NULL));
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL BOOL CALL_CONV profi_get_queue_size(
IN HANDLE hBasicMgmtDevice, OUT USIGN32* pQueueSize)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
This function is used to get the set max. receive queue size for the PROFIBUS
driver.
IN: hBasicMgmtDevice -> basic management device handle
OUT: pQueueSize -> pointer to max. receive queue size
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesReturned;
FUNCTION_BODY
return (DeviceIoControl((HANDLE)hBasicMgmtDevice,
(DWORD)IOCTL_PROFI_GET_QUEUE_SIZE, (LPVOID)NULL, (DWORD)0,
(LPVOID)pQueueSize, (DWORD)sizeof(USIGN32), (LPDWORD)&BytesReturned,
NULL));
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION GLOBAL BOOL CALL_CONV profi_get_overrun_count(
IN HANDLE hBasicMgmtDevice, OUT USIGN32* pOverrunCount)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
IN: hBasicMgmtDevice -> basic management device handle
OUT: pOverrunCount -> pointer to overrun counts
Possible return values:
- TRUE -> function returns sucessfully
- FALSE -> function returns not successfully
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
DWORD BytesReturned;
FUNCTION_BODY
return (DeviceIoControl((HANDLE)hBasicMgmtDevice,
(DWORD)IOCTL_PROFI_GET_OVERRUN_COUNT, (LPVOID)NULL, (DWORD)0,
(LPVOID)pOverrunCount, (DWORD)sizeof(USIGN32), (LPDWORD)&BytesReturned,
NULL));
}
#endif
// *************************************************************************** // ***************************************************************************
// *************************************************************************** // ***************************************************************************
// * // *
...@@ -1149,9 +838,10 @@ Possible return values: ...@@ -1149,9 +838,10 @@ Possible return values:
// *************************************************************************** // ***************************************************************************
// *************************************************************************** // ***************************************************************************
FUNCTION GLOBAL INT16 CALL_CONV profi_set_default( FUNCTION GLOBAL INT16 CALL_CONV profi_set_default(IN USIGN8 Board,
OUT T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 Board, IN USIGN8 Channel, IN USIGN8 Channel,
IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout) IN USIGN32 ReadTimeout,
IN USIGN32 WriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1182,31 +872,35 @@ version ...@@ -1182,31 +872,35 @@ version
USIGN32 ReadWriteTimeout[2]; USIGN32 ReadWriteTimeout[2];
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
DWORD BytesReturned; DWORD BytesReturned;
#endif #endif
FUNCTION_BODY FUNCTION_BODY
if (hDevice->hServiceReadDevice || hDevice->hServiceWriteDevice if (hServiceReadDevice || hServiceWriteDevice || hDpDataDevice)
|| hDevice->hDpDataDevice) { {
return E_IF_SERVICE_NOT_EXECUTABLE; // Application has called init_profibus return E_IF_SERVICE_NOT_EXECUTABLE; // Application has called init_profibus
// before // before
} }
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
if (!ReadBoardRegistryEntries(Board, &OperationMode)) { if (!ReadBoardRegistryEntries(Board, &OperationMode))
{
return (E_IF_READING_REGISTRY); return (E_IF_READING_REGISTRY);
} }
// get service device name // get service device name
sprintf( sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\Service", Board,
DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\Service", Board, Channel); Channel);
// Open service device for read access // Open service device for read access
hServiceReadDevice = CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, hServiceReadDevice =
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hServiceReadDevice == INVALID_HANDLE_VALUE) { if (hServiceReadDevice == INVALID_HANDLE_VALUE)
{
hServiceReadDevice = NULL; hServiceReadDevice = NULL;
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
...@@ -1215,22 +909,26 @@ version ...@@ -1215,22 +909,26 @@ version
hServiceWriteDevice = CreateFile(DeviceName, GENERIC_WRITE, 0, NULL, hServiceWriteDevice = CreateFile(DeviceName, GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hServiceWriteDevice == INVALID_HANDLE_VALUE) { if (hServiceWriteDevice == INVALID_HANDLE_VALUE)
{
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
hServiceReadDevice = NULL; hServiceReadDevice = NULL;
hServiceWriteDevice = NULL; hServiceWriteDevice = NULL;
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
if (OperationMode == FMS_DPV1_MASTER_MODE) { if (OperationMode == FMS_DPV1_MASTER_MODE)
{
// --- get DP-Master's Data device name // --- get DP-Master's Data device name
sprintf( sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpData", Board,
DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpData", Board, Channel); Channel);
hDpDataDevice = CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, hDpDataDevice =
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDpDataDevice == INVALID_HANDLE_VALUE) { if (hDpDataDevice == INVALID_HANDLE_VALUE)
{
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
CloseHandle(hServiceWriteDevice); CloseHandle(hServiceWriteDevice);
hServiceReadDevice = NULL; hServiceReadDevice = NULL;
...@@ -1238,15 +936,19 @@ version ...@@ -1238,15 +936,19 @@ version
hDpDataDevice = NULL; hDpDataDevice = NULL;
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
} else { }
else
{
// get DP-Slave Input-Data device name // get DP-Slave Input-Data device name
sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpSlaveInputData", sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpSlaveInputData",
Board, Channel); Board, Channel);
hDpsInputDataDevice = CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, hDpsInputDataDevice =
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDpsInputDataDevice == INVALID_HANDLE_VALUE) { if (hDpsInputDataDevice == INVALID_HANDLE_VALUE)
{
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
CloseHandle(hServiceWriteDevice); CloseHandle(hServiceWriteDevice);
hServiceReadDevice = NULL; hServiceReadDevice = NULL;
...@@ -1259,10 +961,12 @@ version ...@@ -1259,10 +961,12 @@ version
sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpSlaveOutputData", sprintf(DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Pb%u\\DpSlaveOutputData",
Board, Channel); Board, Channel);
hDpsOutputDataDevice = CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, hDpsOutputDataDevice =
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); CreateFile(DeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDpsOutputDataDevice == INVALID_HANDLE_VALUE) { if (hDpsOutputDataDevice == INVALID_HANDLE_VALUE)
{
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
CloseHandle(hServiceWriteDevice); CloseHandle(hServiceWriteDevice);
CloseHandle(hDpsInputDataDevice); CloseHandle(hDpsInputDataDevice);
...@@ -1280,7 +984,8 @@ version ...@@ -1280,7 +984,8 @@ version
if (!DeviceIoControl((HANDLE)hServiceReadDevice, if (!DeviceIoControl((HANDLE)hServiceReadDevice,
(DWORD)IOCTL_PROFI_SET_TIMEOUT, (LPVOID)ReadWriteTimeout, (DWORD)IOCTL_PROFI_SET_TIMEOUT, (LPVOID)ReadWriteTimeout,
(DWORD)2 * sizeof(USIGN32), (LPVOID)NULL, (DWORD)0, (DWORD)2 * sizeof(USIGN32), (LPVOID)NULL, (DWORD)0,
(LPDWORD)&BytesReturned, NULL)) { (LPDWORD)&BytesReturned, NULL))
{
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
CloseHandle(hServiceWriteDevice); CloseHandle(hServiceWriteDevice);
if (hDpDataDevice) if (hDpDataDevice)
...@@ -1310,56 +1015,59 @@ version ...@@ -1310,56 +1015,59 @@ version
sprintf(DeviceName, "/dev/pbservice%u", Board + Channel); sprintf(DeviceName, "/dev/pbservice%u", Board + Channel);
// Open service device for read access // Open service device for read access
hDevice->hServiceReadDevice = open(DeviceName, O_RDWR | O_NONBLOCK); hServiceReadDevice = open(DeviceName, O_RDWR | O_NONBLOCK);
if (hDevice->hServiceReadDevice == INVALID_HANDLE_VALUE) { if (hServiceReadDevice == INVALID_HANDLE_VALUE)
hDevice->hServiceReadDevice = (HANDLE)NULL; {
hServiceReadDevice = (HANDLE)0;
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
// Open service device for write access // Open service device for write access
hDevice->hServiceWriteDevice = hDevice->hServiceReadDevice; hServiceWriteDevice = hServiceReadDevice;
// --- get DP-Master's Data device name // --- get DP-Master's Data device name
sprintf(DeviceName, "/dev/pbdata%u", Board + Channel); sprintf(DeviceName, "/dev/pbdata%u", Board + Channel);
hDevice->hDpDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK); hDpDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK);
// get DP-Slave Input-Data device name // get DP-Slave Input-Data device name
sprintf(DeviceName, "/dev/pbslin%u", Board + Channel); sprintf(DeviceName, "/dev/pbslin%u", Board + Channel);
hDevice->hDpsInputDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK); hDpsInputDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK);
// get DP-Slave Output-Data device name // get DP-Slave Output-Data device name
sprintf(DeviceName, "/dev/pbslout%u", Board + Channel); sprintf(DeviceName, "/dev/pbslout%u", Board + Channel);
hDevice->hDpsOutputDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK); hDpsOutputDataDevice = open(DeviceName, O_RDWR | O_NONBLOCK);
if ((hDevice->hDpDataDevice == INVALID_HANDLE_VALUE) if ((hDpDataDevice == INVALID_HANDLE_VALUE) &&
&& (hDevice->hDpsInputDataDevice == INVALID_HANDLE_VALUE) (hDpsInputDataDevice == INVALID_HANDLE_VALUE) &&
&& (hDevice->hDpsOutputDataDevice == INVALID_HANDLE_VALUE)) { (hDpsOutputDataDevice == INVALID_HANDLE_VALUE))
close(hDevice->hServiceReadDevice); {
close(hDevice->hServiceWriteDevice); close(hServiceReadDevice);
close(hDevice->hDpDataDevice); close(hServiceWriteDevice);
close(hDevice->hDpsInputDataDevice); close(hDpDataDevice);
close(hDevice->hDpsOutputDataDevice); close(hDpsInputDataDevice);
hDevice->hServiceReadDevice = (HANDLE)NULL; close(hDpsOutputDataDevice);
hDevice->hServiceWriteDevice = (HANDLE)NULL; hServiceReadDevice = (HANDLE)0;
hDevice->hDpDataDevice = (HANDLE)NULL; hServiceWriteDevice = (HANDLE)0;
hDevice->hDpsInputDataDevice = (HANDLE)NULL; hDpDataDevice = (HANDLE)0;
hDevice->hDpsOutputDataDevice = (HANDLE)NULL; hDpsInputDataDevice = (HANDLE)0;
hDpsOutputDataDevice = (HANDLE)0;
return (E_IF_OS_ERROR); return (E_IF_OS_ERROR);
} }
hDevice->CurrentBoardNumber = Board + Channel; CurrentBoardNumber = Board + Channel;
#endif #endif
return (E_OK); return (E_OK);
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_init(OUT T_PROFI_DEVICE_HANDLE* hDevice, FUNCTION GLOBAL INT16 CALL_CONV profi_init(IN USIGN8 Board,
IN USIGN8 Board, IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout) IN USIGN32 ReadTimeout,
IN USIGN32 WriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1388,19 +1096,21 @@ version ...@@ -1388,19 +1096,21 @@ version
FUNCTION_BODY FUNCTION_BODY
if ((hDevice->hServiceReadDevice && hDevice->hServiceWriteDevice) if ((hServiceReadDevice && hServiceWriteDevice) &&
&& (hDevice->hDpDataDevice (hDpDataDevice || (hDpsInputDataDevice && hDpsOutputDataDevice)))
|| (hDevice->hDpsInputDataDevice {
&& hDevice->hDpsOutputDataDevice))) {
return (E_OK); // PAPI is already initialized return (E_OK); // PAPI is already initialized
} else { }
return (profi_set_default( else
hDevice, Board, 0, ReadTimeout, WriteTimeout)); // initalize PAPI {
return (profi_set_default(Board, 0, ReadTimeout,
WriteTimeout)); // initalize PAPI
} }
} }
FUNCTION GLOBAL INT16 CALL_CONV init_profibus( FUNCTION GLOBAL INT16 CALL_CONV init_profibus(IN USIGN32 DprAdress,
IN USIGN32 DprAdress, IN USIGN16 IoPortAdress, IN PB_BOOL Dummy) IN USIGN16 IoPortAdress,
IN PB_BOOL Dummy)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1427,21 +1137,20 @@ version ...@@ -1427,21 +1137,20 @@ version
{ {
LOCAL_VARIABLES LOCAL_VARIABLES
T_PROFI_DEVICE_HANDLE hDevice;
FUNCTION_BODY FUNCTION_BODY
if ((hDevice.hServiceReadDevice && hDevice.hServiceWriteDevice) if ((hServiceReadDevice && hServiceWriteDevice) &&
&& (hDevice.hDpDataDevice (hDpDataDevice || (hDpsInputDataDevice && hDpsOutputDataDevice)))
|| (hDevice.hDpsInputDataDevice {
&& hDevice.hDpsOutputDataDevice))) {
return (E_OK); // PAPI is already initialized return (E_OK); // PAPI is already initialized
} else { }
return (profi_set_default(&hDevice, 0, 0, 0, 0)); // initalize PAPI else
{
return (profi_set_default(0, 0, 0, 0)); // initalize PAPI
} }
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_end(IN T_PROFI_DEVICE_HANDLE* hDevice) FUNCTION GLOBAL INT16 CALL_CONV profi_end(VOID)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1459,75 +1168,79 @@ Possible return values: ...@@ -1459,75 +1168,79 @@ Possible return values:
FUNCTION_BODY FUNCTION_BODY
// close service device // close service device
if (hDevice->hServiceReadDevice) { if (hServiceReadDevice)
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
CloseHandle(hServiceReadDevice); CloseHandle(hServiceReadDevice);
#endif #endif
#ifdef _LINUX #ifdef _LINUX
close(hDevice->hServiceReadDevice); close(hServiceReadDevice);
#endif #endif
hDevice->hServiceReadDevice = (HANDLE)NULL; hServiceReadDevice = (HANDLE)0;
} }
if (hDevice->hServiceWriteDevice) { if (hServiceWriteDevice)
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
CloseHandle(hServiceWriteDevice); CloseHandle(hServiceWriteDevice);
#endif #endif
#ifdef _LINUX #ifdef _LINUX
close(hDevice->hServiceWriteDevice); close(hServiceWriteDevice);
#endif #endif
hDevice->hServiceWriteDevice = (HANDLE)NULL; hServiceWriteDevice = (HANDLE)0;
} }
// close DP-Data device // close DP-Data device
if (hDevice->hDpDataDevice) { if (hDpDataDevice)
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
CloseHandle(hDpDataDevice); CloseHandle(hDpDataDevice);
#endif #endif
#ifdef _LINUX #ifdef _LINUX
close(hDevice->hDpDataDevice); close(hDpDataDevice);
#endif #endif
hDevice->hDpDataDevice = (HANDLE)NULL; hDpDataDevice = (HANDLE)0;
} }
// close DP-Slave Input-Data device // close DP-Slave Input-Data device
if (hDevice->hDpsInputDataDevice) { if (hDpsInputDataDevice)
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
CloseHandle(hDpsInputDataDevice); CloseHandle(hDpsInputDataDevice);
#endif #endif
#ifdef _LINUX #ifdef _LINUX
close(hDevice->hDpsInputDataDevice); close(hDpsInputDataDevice);
#endif #endif
hDevice->hDpsInputDataDevice = (HANDLE)NULL; hDpsInputDataDevice = (HANDLE)0;
} }
// close DP-Slave Output-Data device // close DP-Slave Output-Data device
if (hDevice->hDpsOutputDataDevice) { if (hDpsOutputDataDevice)
{
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
CloseHandle(hDpsOutputDataDevice); CloseHandle(hDpsOutputDataDevice);
#endif #endif
#ifdef _LINUX #ifdef _LINUX
close(hDevice->hDpsOutputDataDevice); close(hDpsOutputDataDevice);
#endif #endif
hDevice->hDpsOutputDataDevice = (HANDLE)NULL; hDpsOutputDataDevice = (HANDLE)0;
} }
return (E_OK); return (E_OK);
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_snd_req_res( FUNCTION GLOBAL INT16 CALL_CONV profi_snd_req_res(
IN T_PROFI_DEVICE_HANDLE* hDevice, IN T_PROFI_SERVICE_DESCR* pSdb, IN T_PROFI_SERVICE_DESCR* pSdb, IN VOID* pData, IN PB_BOOL dummy)
IN VOID* pData, IN PB_BOOL dummy)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1566,15 +1279,15 @@ RES ...@@ -1566,15 +1279,15 @@ RES
FUNCTION_BODY FUNCTION_BODY
// --- check if service device is open // --- check if service device is open
if (!hDevice || !hDevice->hServiceWriteDevice) if (!hServiceWriteDevice)
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
return (profi_write_service(hDevice->hServiceWriteDevice, pSdb, pData)); return (profi_write_service(hServiceWriteDevice, pSdb, pData));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_rcv_con_ind( FUNCTION GLOBAL INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT T_PROFI_SERVICE_DESCR* pSdb, profi_rcv_con_ind(OUT T_PROFI_SERVICE_DESCR* pSdb, OUT VOID* pData,
OUT VOID* pData, INOUT USIGN16* pDataLength) INOUT USIGN16* pDataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1602,16 +1315,16 @@ Possible return values: ...@@ -1602,16 +1315,16 @@ Possible return values:
FUNCTION_BODY FUNCTION_BODY
// --- check if service device is open // --- check if service device is open
if (!hDevice || !hDevice->hServiceReadDevice) if (!hServiceReadDevice)
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
return (profi_read_service( return (profi_read_service(hServiceReadDevice, pSdb, pData, pDataLength));
hDevice->hServiceReadDevice, pSdb, pData, pDataLength));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_set_data( FUNCTION GLOBAL INT16 CALL_CONV profi_set_data(IN USIGN8 DataId,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 DataId, IN USIGN16 Offset, IN USIGN16 Offset,
IN USIGN16 DataLength, IN VOID* pData) IN USIGN16 DataLength,
IN VOID* pData)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1647,7 +1360,7 @@ possible return values: ...@@ -1647,7 +1360,7 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
// --- check if DP-Data device is open // --- check if DP-Data device is open
if (!hDevice->hDpDataDevice) if (!hDpDataDevice)
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
...@@ -1656,18 +1369,22 @@ possible return values: ...@@ -1656,18 +1369,22 @@ possible return values:
overlapped.Offset = Offset; overlapped.Offset = Offset;
// write data // write data
if (!WriteFile( if (!WriteFile(hDpDataDevice, pData, DataLength, &BytesWritten, &overlapped))
hDpDataDevice, pData, DataLength, &BytesWritten, &overlapped)) { {
return (papi_get_last_error()); return (papi_get_last_error());
} }
#endif #endif
#ifdef _LINUX #ifdef _LINUX
if (lseek(hDevice->hDpDataDevice, Offset, SEEK_SET) < 0) { if (lseek(hDpDataDevice, Offset, SEEK_SET) < 0)
{
printf("lseek error\n");
return (papi_get_last_error()); return (papi_get_last_error());
} }
if (write(hDevice->hDpDataDevice, pData, DataLength) < 0) { if (write(hDpDataDevice, pData, DataLength) < 0)
{
printf("write error\n");
return (papi_get_last_error()); return (papi_get_last_error());
} }
#endif #endif
...@@ -1675,9 +1392,10 @@ possible return values: ...@@ -1675,9 +1392,10 @@ possible return values:
return (E_OK); return (E_OK);
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_data( FUNCTION GLOBAL INT16 CALL_CONV profi_get_data(IN USIGN8 DataId,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 DataId, IN USIGN16 Offset, IN USIGN16 Offset,
INOUT USIGN16* pDataLength, OUT VOID* pData) INOUT USIGN16* pDataLength,
OUT VOID* pData)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1709,66 +1427,31 @@ possible return values: ...@@ -1709,66 +1427,31 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
INT16 RetVal = E_OK; INT16 RetVal = E_OK;
HANDLE hBoard = (HANDLE)NULL; HANDLE hBoard = (HANDLE)0;
char DeviceName[64]; char DeviceName[64];
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
DWORD BytesRead = 0;
T_PROFI_DATA_IMAGE_DESCR DataImageDescr;
OVERLAPPED Overlapped;
#endif
#ifdef _LINUX #ifdef _LINUX
ssize_t BytesRead = 0; ssize_t BytesRead = 0;
DataImage DataImageDescr; DataImage DataImageDescr;
#endif #endif
switch (DataId) { switch (DataId)
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) {
case ID_SERIAL_DEVICE_NUMBER:
case ID_FW_VERS_IMAGE:
case ID_EXCEPTION_IMAGE:
// --- open BOARD-Device
sprintfprofi_get_data(
DeviceName, "\\\\.\\PROFIBUS\\Board%u\\Board", CurrentBoardNumber);
if (INVALID_HANDLE_VALUE
== (hBoard = CreateFile(DeviceName, 0, 0, NULL, OPEN_ALWAYS,
profi_get_data FILE_ATTRIBUTE_NORMAL, NULL))) {
BytesRead return (E_IF_OS_ERROR);
}
// --- set input IOCTL data structure
DataImageDescr.imageId = DataId;
DataImageDescr.offset = Offset;
DataImageDescr.bus = 0;
// --- read DATA-Image
if (DeviceIoprofi_get_dataControl((HANDLE)hBoard,
(DWORD)IOCTL_PROFI_GET_DATA_IMAGE, (LPVOID)&DataImageDescr,
BytesRead(DWORD) sizeof(DataImageDescr), (LPVOID)pData,
(DWORD)*pDataLength, (LPDWORD)&BytesRead, NULL)) {
profi_get_data* pDataLength = (USIGN16)BytesRead;
RetVal = E_OK;
} else {
*pDataLength = 0;
RetVal = papi_get_last_error();
}
CloseHandle(hBoard);
#endif // BytesRead
#ifdef _LINUX #ifdef _LINUX
case ID_SERIAL_DEVICE_NUMBER: case ID_SERIAL_DEVICE_NUMBER:
case ID_FW_VERS_IMAGE: case ID_FW_VERS_IMAGE:
sprintf(DeviceName, "/dev/pbboard%u", hDevice->CurrentBoardNumber); sprintf(DeviceName, "/dev/pbboard%u", CurrentBoardNumber);
if ((hBoard = open(DeviceName, O_RDONLY)) < 0) { if ((hBoard = open(DeviceName, O_RDONLY)) < 0)
{
return (papi_get_last_error()); return (papi_get_last_error());
} }
if (DataId == ID_SERIAL_DEVICE_NUMBER) { if (DataId == ID_SERIAL_DEVICE_NUMBER)
if (lseek(hBoard, Offset, SEEK_SET) < 0) { {
if (lseek(hBoard, Offset, SEEK_SET) < 0)
{
return (papi_get_last_error()); return (papi_get_last_error());
} }
...@@ -1776,21 +1459,34 @@ possible return values: ...@@ -1776,21 +1459,34 @@ possible return values:
DataImageDescr.Buf = pData; DataImageDescr.Buf = pData;
DataImageDescr.Length = *pDataLength; DataImageDescr.Length = *pDataLength;
if (ioctl(hBoard, IOCTL_PROFI_SERIAL_NUMBER, &DataImageDescr) == -1) { // printf("\nprofi_get_data: buf=%p, len=%u, size=%lu\n",
// DataImageDescr.Buf,
// DataImageDescr.Length,
// sizeof(DataImageDescr));
if (ioctl(hBoard, IOCTL_PROFI_SERIAL_NUMBER, &DataImageDescr) == -1)
{
*pDataLength = 0; *pDataLength = 0;
RetVal = papi_get_last_error(); RetVal = papi_get_last_error();
} else { }
else
{
*pDataLength = (USIGN16)4; *pDataLength = (USIGN16)4;
*(USIGN32*)pData = *(USIGN32*)&DataImageDescr; *(USIGN32*)pData = *(USIGN32*)&DataImageDescr;
RetVal = E_OK; RetVal = E_OK;
// printf("papi: Serialnumber = %lu len = %hu\n",*(USIGN32*)pData, // printf("papi: Serialnumber = %lu len = %hu\n",*(USIGN32*)pData,
// BytesRead); // BytesRead);
} }
} else { }
if ((BytesRead = read(hBoard, pData, *pDataLength)) < 0) { else
{
if ((BytesRead = read(hBoard, pData, *pDataLength)) < 0)
{
*pDataLength = 0; *pDataLength = 0;
RetVal = papi_get_last_error(); RetVal = papi_get_last_error();
} else { }
else
{
*pDataLength = (USIGN16)BytesRead; *pDataLength = (USIGN16)BytesRead;
RetVal = E_OK; RetVal = E_OK;
} }
...@@ -1803,24 +1499,13 @@ possible return values: ...@@ -1803,24 +1499,13 @@ possible return values:
case ID_DP_SLAVE_IO_IMAGE: case ID_DP_SLAVE_IO_IMAGE:
// --- check if DP-Data device is open // --- check if DP-Data device is open
if (!hDevice->hDpDataDevice) if (!hDpDataDevice)
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
// --- init overlapped structure
memset(&Overlapped, 0, sizeof(OVERLAPPED));
Overlapped.OfhBoardfset = Offset;
if (!ReadFile(
hDpDataDevice, pData, *pDataLength, &BytesRead, &Overlapped)) {
return (papi_get_last_error());
}
#endif
#ifdef _LINUX #ifdef _LINUX
if (lseek(hDevice->hDpDataDevice, Offset, SEEK_SET) < 0) { if (lseek(hDpDataDevice, Offset, SEEK_SET) < 0)
{
return (papi_get_last_error()); return (papi_get_last_error());
} }
...@@ -1834,13 +1519,21 @@ possible return values: ...@@ -1834,13 +1519,21 @@ possible return values:
&DataImageDescr, &DataImageDescr,
CurrentBoardNumber); CurrentBoardNumber);
*/ */
// printf("\nprofi_get_data: buf=%p, IOCTL_PROFI_GET_DATA_IMAGE
if (ioctl( // len=%u, size=%lu\n",
hDevice->hDpDataDevice, IOCTL_PROFI_GET_DATA_IMAGE, &DataImageDescr) // DataImageDescr.Buf,
== -1) { // DataImageDescr.Length,
// sizeof(DataImageDescr));
if (ioctl((int)hDpDataDevice, (int)IOCTL_PROFI_GET_DATA_IMAGE,
&DataImageDescr) == -1)
{
BytesRead = 0; BytesRead = 0;
RetVal = papi_get_last_error(); RetVal = papi_get_last_error();
} else { }
else
{
BytesRead = (USIGN16)DataImageDescr.Length; BytesRead = (USIGN16)DataImageDescr.Length;
// printf("papi data length = %u\n", BytesRead); // printf("papi data length = %u\n", BytesRead);
RetVal = E_OK; RetVal = E_OK;
...@@ -1856,8 +1549,8 @@ possible return values: ...@@ -1856,8 +1549,8 @@ possible return values:
} }
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_set_dps_input_data( FUNCTION GLOBAL INT16 CALL_CONV profi_set_dps_input_data(IN USIGN8* pData,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8* pData, IN USIGN8 DataLength, IN USIGN8 DataLength,
OUT USIGN8* pState) OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
...@@ -1883,17 +1576,16 @@ data size ...@@ -1883,17 +1576,16 @@ data size
FUNCTION_BODY FUNCTION_BODY
if (hDevice->hDpsInputDataDevice == (HANDLE)NULL) { if (hDpsInputDataDevice == (HANDLE)0)
{
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
} }
return (profi_write_dps_data( return (profi_write_dps_data(hDpsInputDataDevice, pData, DataLength, pState));
hDevice->hDpsInputDataDevice, pData, DataLength, pState));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_dps_input_data( FUNCTION GLOBAL INT16 CALL_CONV profi_get_dps_input_data(
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN8* pData, OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState)
INOUT USIGN8* pDataLength, OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1915,17 +1607,16 @@ possible return values: ...@@ -1915,17 +1607,16 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
if (hDevice->hDpsInputDataDevice == (HANDLE)NULL) { if (hDpsInputDataDevice == (HANDLE)0)
{
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
} }
return (profi_read_dps_data( return (profi_read_dps_data(hDpsInputDataDevice, pData, pDataLength, pState));
hDevice->hDpsInputDataDevice, pData, pDataLength, pState));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_dps_output_data( FUNCTION GLOBAL INT16 CALL_CONV profi_get_dps_output_data(
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN8* pData, OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState)
INOUT USIGN8* pDataLength, OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1949,17 +1640,17 @@ possible return values: ...@@ -1949,17 +1640,17 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
if (hDevice->hDpsOutputDataDevice == (HANDLE)NULL) { if (hDpsOutputDataDevice == (HANDLE)0)
{
return (E_IF_PAPI_NOT_INITIALIZED); return (E_IF_PAPI_NOT_INITIALIZED);
} }
return (profi_read_dps_data( return (
hDevice->hDpsOutputDataDevice, pData, pDataLength, pState)); profi_read_dps_data(hDpsOutputDataDevice, pData, pDataLength, pState));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_versions( FUNCTION GLOBAL INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT CSTRING* pPapiVersion, profi_get_versions(OUT CSTRING* pPapiVersion, OUT CSTRING* pFirmwareVersion)
OUT CSTRING* pFirmwareVersion)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1997,14 +1688,15 @@ Possible return values: ...@@ -1997,14 +1688,15 @@ Possible return values:
// --- get PROFIBUS firmware version // --- get PROFIBUS firmware version
DataLength = (USIGN16)VERSION_STRING_LENGTH; DataLength = (USIGN16)VERSION_STRING_LENGTH;
if (profi_get_data( if (profi_get_data(ID_FW_VERS_IMAGE, 0, &DataLength, pFirmwareVersion) !=
hDevice, ID_FW_VERS_IMAGE, 0, &DataLength, pFirmwareVersion) E_OK)
!= E_OK) { {
strcpy(pFirmwareVersion, (CSTRING*)"controller not initialized"); strcpy(pFirmwareVersion, (CSTRING*)"controller not initialized");
} }
// --- convert \n to ' ' // --- convert \n to ' '
for (i = 0; i < VERSION_STRING_LENGTH; i++) { for (i = 0; i < VERSION_STRING_LENGTH; i++)
{
if (pFirmwareVersion[i] == '\n') if (pFirmwareVersion[i] == '\n')
pFirmwareVersion[i] = ' '; pFirmwareVersion[i] = ' ';
else if (pFirmwareVersion[i] == '\0') else if (pFirmwareVersion[i] == '\0')
...@@ -2016,8 +1708,8 @@ Possible return values: ...@@ -2016,8 +1708,8 @@ Possible return values:
return (E_OK); return (E_OK);
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_serial_device_number( FUNCTION GLOBAL INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN32* pSerialDeviceNumber) profi_get_serial_device_number(OUT USIGN32* pSerialDeviceNumber)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -2041,8 +1733,8 @@ Possible return values: ...@@ -2041,8 +1733,8 @@ Possible return values:
DataLength = (USIGN16)sizeof(USIGN32); DataLength = (USIGN16)sizeof(USIGN32);
// --- get serial device number // --- get serial device number
return (profi_get_data( return (profi_get_data(ID_SERIAL_DEVICE_NUMBER, 0, &DataLength,
hDevice, ID_SERIAL_DEVICE_NUMBER, 0, &DataLength, pSerialDeviceNumber)); pSerialDeviceNumber));
} }
FUNCTION GLOBAL INT16 CALL_CONV profi_get_last_error(VOID) FUNCTION GLOBAL INT16 CALL_CONV profi_get_last_error(VOID)
...@@ -2080,55 +1772,6 @@ Possible return values: ...@@ -2080,55 +1772,6 @@ Possible return values:
#endif #endif
} }
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
FUNCTION BOOL WINAPI DllMain(
IN HINSTANCE hInstDLL, IN ULONG Reason, IN LPVOID pReserved)
/*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION
32Bit-DLL main function.
The function is called by MS-Windows during loading DLL.
Possible return values:
- TRUE
-----------------------------------------------------------------------------*/
{
LOCAL_VARIABLES
FUNCTION_BODY
switch (Reason) {
case DLL_PROCESS_ATTACH:
hServiceReadDevice = NULL;
hServiceWriteDevice = NULL;
hDpDataDevice = NULL;
hDpsInputDataDevice = NULL;
hDpsOutputDataDevice = NULL;
CurrentBoardNumber = 0;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
profi_end();
break;
default:
break;
}
return TRUE;
}
#endif
#if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16) #if defined(WIN32) || defined(_WIN32) || defined(WIN16) || defined(_WIN16)
#pragma check_stack #pragma check_stack
#endif #endif
/*
* 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.
*/
#define BUILD_NUMBER 52 #define BUILD_NUMBER 52
#define BUILD_NUMBER_STR "52" #define BUILD_NUMBER_STR "52"
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME BUSPARAM.C FILE_NAME BUSPARAM.C
...@@ -55,25 +20,11 @@ MODULE BUSPARAM ...@@ -55,25 +20,11 @@ MODULE BUSPARAM
COMPONENT_LIBRARY PBT LIBs and DLL (16-Bit) COMPONENT_LIBRARY PBT LIBs and DLL (16-Bit)
PBTOOLS DLL (32-Bit) PBTOOLS DLL (32-Bit)
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.00 VERSION 5.21.0.00.release
5.01
5.02 DATE February-1998
5.10
5.11
5.20.0.00.alpha
5.20.0.00.release
5.21.0.00.release
DATE 24-November-1995
31-January-1996
14-July-1996
20-Febrary-1997
18-March-1997
30-July-1997
17-October-1997
27-February-1998
STATUS finished STATUS finished
...@@ -138,7 +89,8 @@ possible return values: ...@@ -138,7 +89,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (baud_rate) { switch (baud_rate)
{
case 0: /* 9,6 KBaud */ case 0: /* 9,6 KBaud */
case 1: /* 19,2 KBaud */ case 1: /* 19,2 KBaud */
case 2: /* 93,75 KBaud */ case 2: /* 93,75 KBaud */
...@@ -242,7 +194,8 @@ possible return values: ...@@ -242,7 +194,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (baud_rate) { switch (baud_rate)
{
case 0: /* 9,6 KBaud */ case 0: /* 9,6 KBaud */
bus_param_ptr->tsl = 100; bus_param_ptr->tsl = 100;
bus_param_ptr->min_tsdr = 30; bus_param_ptr->min_tsdr = 30;
...@@ -365,7 +318,8 @@ possible return values: ...@@ -365,7 +318,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (baud_rate) { switch (baud_rate)
{
case 0: /* 9,6 KBaud */ case 0: /* 9,6 KBaud */
bus_param_ptr->tsl = 125; bus_param_ptr->tsl = 125;
bus_param_ptr->min_tsdr = 30; bus_param_ptr->min_tsdr = 30;
...@@ -481,8 +435,8 @@ possible return values: ...@@ -481,8 +435,8 @@ possible return values:
} }
} }
FUNCTION GLOBAL PB_BOOL CALL_CONV pbt_get_dp_def_bus_param(IN USIGN8 baud_rate, FUNCTION GLOBAL PB_BOOL CALL_CONV pbt_get_dp_def_bus_param(
IN USIGN8 station_addr, IN USIGN16 mode, IN USIGN8 baud_rate, IN USIGN8 station_addr, IN USIGN16 mode,
OUT T_DP_BUS_PARA_SET FAR* bus_param_ptr) OUT T_DP_BUS_PARA_SET FAR* bus_param_ptr)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
...@@ -510,7 +464,8 @@ possible return values: ...@@ -510,7 +464,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
ret_val = PB_TRUE; ret_val = PB_TRUE;
switch (mode) { switch (mode)
{
case DP_MODE: /* only DP mode */ case DP_MODE: /* only DP mode */
ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param); ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param);
break; break;
...@@ -524,7 +479,8 @@ possible return values: ...@@ -524,7 +479,8 @@ possible return values:
break; break;
} }
if (ret_val == PB_TRUE) { if (ret_val == PB_TRUE)
{
/* -- set variable busparametes ---------------------------------------- */ /* -- set variable busparametes ---------------------------------------- */
bus_param_ptr->tsl = bus_param.tsl; bus_param_ptr->tsl = bus_param.tsl;
bus_param_ptr->min_tsdr = bus_param.min_tsdr; bus_param_ptr->min_tsdr = bus_param.min_tsdr;
...@@ -583,7 +539,8 @@ possible return values: ...@@ -583,7 +539,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
if (pbt_get_bus_param_for_fms(baud_rate, &bus_param)) { if (pbt_get_bus_param_for_fms(baud_rate, &bus_param))
{
/* -- set variable busparametes -------------------------------------- */ /* -- set variable busparametes -------------------------------------- */
bus_param_ptr->tsl = bus_param.tsl; bus_param_ptr->tsl = bus_param.tsl;
bus_param_ptr->min_tsdr = bus_param.min_tsdr; bus_param_ptr->min_tsdr = bus_param.min_tsdr;
...@@ -607,7 +564,9 @@ possible return values: ...@@ -607,7 +564,9 @@ possible return values:
bus_param_ptr->ident[3] = 0; bus_param_ptr->ident[3] = 0;
return (PB_TRUE); return (PB_TRUE);
} else { }
else
{
return (PB_FALSE); return (PB_FALSE);
} }
} }
...@@ -644,7 +603,8 @@ possible return values: ...@@ -644,7 +603,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (mode) { switch (mode)
{
case DP_MODE: /* only DP mode */ case DP_MODE: /* only DP mode */
ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param); ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param);
break; break;
...@@ -662,7 +622,8 @@ possible return values: ...@@ -662,7 +622,8 @@ possible return values:
break; break;
} }
if (ret_val == PB_TRUE) { if (ret_val == PB_TRUE)
{
/* -- set variable busparametes ---------------------------------------- */ /* -- set variable busparametes ---------------------------------------- */
bus_param_ptr->tsl = bus_param.tsl; bus_param_ptr->tsl = bus_param.tsl;
bus_param_ptr->min_tsdr = bus_param.min_tsdr; bus_param_ptr->min_tsdr = bus_param.min_tsdr;
...@@ -689,9 +650,9 @@ possible return values: ...@@ -689,9 +650,9 @@ possible return values:
return (ret_val); return (ret_val);
} }
FUNCTION GLOBAL PB_BOOL CALL_CONV pbt_get_fmb_def_bus_param(IN USIGN8 baud_rate, FUNCTION GLOBAL PB_BOOL CALL_CONV pbt_get_fmb_def_bus_param(
IN USIGN8 station_addr, IN PB_BOOL in_ring_desired, IN USIGN16 mode, IN USIGN8 baud_rate, IN USIGN8 station_addr, IN PB_BOOL in_ring_desired,
OUT T_FMB_SET_BUSPARAMETER_REQ FAR* bus_param_ptr) IN USIGN16 mode, OUT T_FMB_SET_BUSPARAMETER_REQ FAR* bus_param_ptr)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -720,7 +681,8 @@ possible return values: ...@@ -720,7 +681,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (mode) { switch (mode)
{
case DP_MODE: /* only DP mode */ case DP_MODE: /* only DP mode */
ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param); ret_val = pbt_get_bus_param_for_dp(baud_rate, &bus_param);
break; break;
...@@ -738,7 +700,8 @@ possible return values: ...@@ -738,7 +700,8 @@ possible return values:
break; break;
} }
if (ret_val == PB_TRUE) { if (ret_val == PB_TRUE)
{
/* -- set variable busparametes ---------------------------------------- */ /* -- set variable busparametes ---------------------------------------- */
bus_param_ptr->tsl = bus_param.tsl; bus_param_ptr->tsl = bus_param.tsl;
bus_param_ptr->min_tsdr = bus_param.min_tsdr; bus_param_ptr->min_tsdr = bus_param.min_tsdr;
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME CCRL.C FILE_NAME CCRL.C
PROJECT_NAME PROFIBUS PROJECT_NAME PROFIBUS
...@@ -54,25 +20,11 @@ MODULE CCRL ...@@ -54,25 +20,11 @@ MODULE CCRL
COMPONENT_LIBRARY PBT LIBs and DLL (16-Bit) COMPONENT_LIBRARY PBT LIBs and DLL (16-Bit)
PBTOOLS.DLL (32-Bit) PBTOOLS.DLL (32-Bit)
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.00 VERSION 5.21.0.00.release
5.01
5.02 DATE February-1998
5.10
5.11
5.20.0.00.alpha
5.20.0.00.release
5.21.0.00.release
DATE 24-November-1995
31-January-1996
14-July-1996
20-Febrary-1997
18-March-1997
30-July-1997
17-October-1997
27-February-1998
STATUS finished STATUS finished
...@@ -133,14 +85,12 @@ INCLUDES ...@@ -133,14 +85,12 @@ INCLUDES
#include <windows.h> #include <windows.h>
#endif #endif
#include "co_math.h" #include <pb_type.h>
#include <pb_if.h>
#include "pb_type.h" #include <pb_fmb.h>
#include "pb_if.h" #include <pb_fm7.h>
#include "pb_fmb.h" #include <pb_err.h>
#include "pb_fm7.h" #include <pb_tools.h>
#include "pb_err.h"
#include "pb_tools.h"
LOCAL_DEFINES LOCAL_DEFINES
...@@ -156,17 +106,29 @@ LOCAL_DEFINES ...@@ -156,17 +106,29 @@ LOCAL_DEFINES
#define _IS_I_CONN(x) ((x & 0x03) == I_CONN) #define _IS_I_CONN(x) ((x & 0x03) == I_CONN)
#define _IS_CYCLIC(type) (type & 0x02) #define _IS_CYCLIC(type) (type & 0x02)
#define _WITHOUT_SLAVE_INITIATIVE(type) (!(type & 0x04)) #define _WITHOUT_SLAVE_INITIATIVE(type) (!(type & 0x04))
#define _IS_CONN_LESS(x) ((x & 0x09) == BRCT)
#define _IS_CONN_ORIENTED(x) (!_IS_CONN_LESS(x))
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
LOCAL_TYPEDEFS LOCAL_TYPEDEFS
typedef struct _T_CCRL_CONN_RESRCES { typedef struct _T_CCRL_CONN_RESRCES
{
USIGN8 no_of_fal_sdbs; USIGN8 no_of_fal_sdbs;
USIGN8 no_of_fdl_sdbs; USIGN8 no_of_fdl_sdbs;
USIGN8 no_of_data_buffer; USIGN8 no_of_data_buffer;
USIGN8 no_of_api_buffer; USIGN8 no_of_api_buffer;
} T_CCRL_CONN_RESRCES; } T_CCRL_CONN_RESRCES;
typedef struct _T_CCRL { typedef struct _T_CCRL
{
T_FMB_CONFIG_CRL ccrl; T_FMB_CONFIG_CRL ccrl;
USIGN8 poll_sap; USIGN8 poll_sap;
PB_BOOL mms_exist; PB_BOOL mms_exist;
...@@ -188,8 +150,8 @@ static T_CCRL ccrl_obj; ...@@ -188,8 +150,8 @@ static T_CCRL ccrl_obj;
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION LOCAL USIGN16 ccrl_determine_role( FUNCTION LOCAL USIGN16 ccrl_determine_role(IN T_CRL_STATIC FAR* crl_ptr,
IN T_CRL_STATIC FAR* crl_ptr, IN USIGN8* role_ptr) IN USIGN8* role_ptr)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -210,7 +172,8 @@ R_CL -> Receiver of multicast/broadcast messages ...@@ -210,7 +172,8 @@ R_CL -> Receiver of multicast/broadcast messages
FUNCTION_BODY FUNCTION_BODY
switch ((USIGN8)(crl_ptr->conn_type & 0x0F)) { switch ((USIGN8)(crl_ptr->conn_type & 0x0F))
{
case MMAC: case MMAC:
*role_ptr = M_MM; *role_ptr = M_MM;
return (E_OK); return (E_OK);
...@@ -238,8 +201,8 @@ R_CL -> Receiver of multicast/broadcast messages ...@@ -238,8 +201,8 @@ R_CL -> Receiver of multicast/broadcast messages
} }
} }
FUNCTION LOCAL VOID ccrl_correct_crl_entry( FUNCTION LOCAL VOID ccrl_correct_crl_entry(IN USIGN16 cr, IN USIGN8 role,
IN USIGN16 cr, IN USIGN8 role, INOUT T_CRL_STATIC FAR* crl_ptr) INOUT T_CRL_STATIC FAR* crl_ptr)
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -250,15 +213,18 @@ FUNCTIONAL_DESCRIPTION ...@@ -250,15 +213,18 @@ FUNCTIONAL_DESCRIPTION
FUNCTION_BODY FUNCTION_BODY
if (crl_ptr->lli_sap == 1) { if (crl_ptr->lli_sap == 1)
if (cr > 1) { {
if (cr > 1)
{
/* There is a management client ----------------------------------------- /* There is a management client -----------------------------------------
*/ */
crl_ptr->max_scc = 1; crl_ptr->max_scc = 1;
crl_ptr->max_sac = 0; crl_ptr->max_sac = 0;
crl_ptr->max_rcc = 0; crl_ptr->max_rcc = 0;
crl_ptr->max_rac = 0; crl_ptr->max_rac = 0;
} else /* (cr == 1) */ }
else /* (cr == 1) */
{ {
/* There is a management server ----------------------------------------- /* There is a management server -----------------------------------------
*/ */
...@@ -269,14 +235,17 @@ FUNCTIONAL_DESCRIPTION ...@@ -269,14 +235,17 @@ FUNCTIONAL_DESCRIPTION
} }
} }
if (role == M_MS) { if (role == M_MS)
{
crl_ptr->max_rcc = 0; crl_ptr->max_rcc = 0;
if (_IS_CYCLIC(crl_ptr->conn_type)) if (_IS_CYCLIC(crl_ptr->conn_type))
crl_ptr->max_scc = 0; crl_ptr->max_scc = 0;
if (_WITHOUT_SLAVE_INITIATIVE(crl_ptr->conn_type)) if (_WITHOUT_SLAVE_INITIATIVE(crl_ptr->conn_type))
crl_ptr->max_rac = 0; crl_ptr->max_rac = 0;
} else if (role == S_MS) { }
else if (role == S_MS)
{
crl_ptr->max_scc = 0; crl_ptr->max_scc = 0;
if (_IS_CYCLIC(crl_ptr->conn_type)) if (_IS_CYCLIC(crl_ptr->conn_type))
...@@ -288,8 +257,8 @@ FUNCTIONAL_DESCRIPTION ...@@ -288,8 +257,8 @@ FUNCTIONAL_DESCRIPTION
return; return;
} }
FUNCTION LOCAL VOID ccrl_update_resrc_ctr( FUNCTION LOCAL VOID ccrl_update_resrc_ctr(INOUT USIGN8* stored_number_ptr,
INOUT USIGN8* stored_number_ptr, INOUT USIGN8* current_number_ptr) INOUT USIGN8* current_number_ptr)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -302,18 +271,22 @@ FUNCTIONAL_DESCRIPTION ...@@ -302,18 +271,22 @@ FUNCTIONAL_DESCRIPTION
FUNCTION_BODY FUNCTION_BODY
if (*stored_number_ptr < *current_number_ptr) { if (*stored_number_ptr < *current_number_ptr)
{
diff = (USIGN8)(*current_number_ptr - *stored_number_ptr); diff = (USIGN8)(*current_number_ptr - *stored_number_ptr);
*stored_number_ptr = *current_number_ptr; *stored_number_ptr = *current_number_ptr;
*current_number_ptr = diff; *current_number_ptr = diff;
} else { }
else
{
*current_number_ptr = 0; *current_number_ptr = 0;
} }
return; return;
} }
FUNCTION LOCAL VOID ccrl_adapt_resrces(IN T_CCRL_CONN_RESRCES* in_resrces_ptr, FUNCTION LOCAL VOID
ccrl_adapt_resrces(IN T_CCRL_CONN_RESRCES* in_resrces_ptr,
INOUT T_CCRL_CONN_RESRCES* out_resrces_ptr) INOUT T_CCRL_CONN_RESRCES* out_resrces_ptr)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
...@@ -325,14 +298,14 @@ FUNCTIONAL_DESCRIPTION ...@@ -325,14 +298,14 @@ FUNCTIONAL_DESCRIPTION
FUNCTION_BODY FUNCTION_BODY
ccrl_update_resrc_ctr( ccrl_update_resrc_ctr(&in_resrces_ptr->no_of_fal_sdbs,
&in_resrces_ptr->no_of_fal_sdbs, &out_resrces_ptr->no_of_fal_sdbs); &out_resrces_ptr->no_of_fal_sdbs);
ccrl_update_resrc_ctr( ccrl_update_resrc_ctr(&in_resrces_ptr->no_of_fdl_sdbs,
&in_resrces_ptr->no_of_fdl_sdbs, &out_resrces_ptr->no_of_fdl_sdbs); &out_resrces_ptr->no_of_fdl_sdbs);
ccrl_update_resrc_ctr( ccrl_update_resrc_ctr(&in_resrces_ptr->no_of_data_buffer,
&in_resrces_ptr->no_of_data_buffer, &out_resrces_ptr->no_of_data_buffer); &out_resrces_ptr->no_of_data_buffer);
ccrl_update_resrc_ctr( ccrl_update_resrc_ctr(&in_resrces_ptr->no_of_api_buffer,
&in_resrces_ptr->no_of_api_buffer, &out_resrces_ptr->no_of_api_buffer); &out_resrces_ptr->no_of_api_buffer);
return; return;
} }
...@@ -370,7 +343,8 @@ possible return values: ...@@ -370,7 +343,8 @@ possible return values:
ccrl_obj.poll_sap = crl_hdr_ptr->poll_sap; ccrl_obj.poll_sap = crl_hdr_ptr->poll_sap;
ccrl_obj.mms_exist = PB_FALSE; ccrl_obj.mms_exist = PB_FALSE;
for (i = 0; i < 65; i++) { for (i = 0; i < 65; i++)
{
ccrl_obj.isap_resrces[i].no_of_fal_sdbs = 0; ccrl_obj.isap_resrces[i].no_of_fal_sdbs = 0;
ccrl_obj.isap_resrces[i].no_of_fdl_sdbs = 0; ccrl_obj.isap_resrces[i].no_of_fdl_sdbs = 0;
ccrl_obj.isap_resrces[i].no_of_data_buffer = 0; ccrl_obj.isap_resrces[i].no_of_data_buffer = 0;
...@@ -380,8 +354,9 @@ possible return values: ...@@ -380,8 +354,9 @@ possible return values:
return; return;
} }
FUNCTION GLOBAL USIGN16 CALL_CONV ccrl_resrces_add_entry(IN USIGN16 cr, FUNCTION GLOBAL USIGN16 CALL_CONV
IN T_CRL_STATIC FAR* crl_ptr, OUT T_FMB_CONFIG_CRL FAR* config_ptr) ccrl_resrces_add_entry(IN USIGN16 cr, IN T_CRL_STATIC FAR* crl_ptr,
OUT T_FMB_CONFIG_CRL FAR* config_ptr)
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -483,57 +458,60 @@ possible return values: ...@@ -483,57 +458,60 @@ possible return values:
fdl_sap = 0; /* (FDL) */ fdl_sap = 0; /* (FDL) */
fdl_rsap = 0; /* (DATA or FDL + DATA) */ fdl_rsap = 0; /* (DATA or FDL + DATA) */
switch (role) { switch (role)
{
case M_MM: case M_MM:
/* Master in Master/Master Connection ----------------------------- */ /* Master in Master/Master Connection ----------------------------- */
snd_req = (USIGN8)(MAX(1, /* snd ASS.req */ snd_req = (USIGN8)(max(1, /* snd ASS.req */
(max_scc /* snd DTC.req */ (max_scc /* snd DTC.req */
+ max_sac)) /* snd DTA.req */ + max_sac)) /* snd DTA.req */
+ 1 /* snd ABT.req */ + 1 /* snd ABT.req */
); );
lli_api_snd_resrc = (USIGN8)(MIN(ci, 1) /* snd IDLE.req */ lli_api_snd_resrc = (USIGN8)(min(ci, 1) /* snd IDLE.req */
+ 1 /* LLI abort resrc */ + 1 /* LLI abort resrc */
); );
rcv_res = (USIGN8)(MAX(1, /* rcv ASS_RES_PDU */ rcv_res = (USIGN8)(max(1, /* rcv ASS_RES_PDU */
(max_scc /* rcv DTC_RES_PDU */ (max_scc /* rcv DTC_RES_PDU */
+ max_sac)) /* rcv DTA_ACK_PDU */ + max_sac)) /* rcv DTA_ACK_PDU */
); );
rcv_ind = (USIGN8)(MAX(1, /* rcv ASS_REQ_PDU */ rcv_ind = (USIGN8)(max(1, /* rcv ASS_REQ_PDU */
(max_rcc /* rcv DTC_REQ_PDU */ (max_rcc /* rcv DTC_REQ_PDU */
+ max_rac)) /* rcv DTA_REQ_PDU */ + max_rac)) /* rcv DTA_REQ_PDU */
+ 1 /* rcv ABT_REQ_PDU */ + 1 /* rcv ABT_REQ_PDU */
); );
lli_rcv_ind = (USIGN8)MIN(ci, 1); /* rcv IDLE_REQ_PDU */ lli_rcv_ind = (USIGN8)min(ci, 1); /* rcv IDLE_REQ_PDU */
fdl_sap = 1; /* act/deact LSAP */ fdl_sap = 1; /* act/deact LSAP */
break; break;
case M_MS: case M_MS:
/* Master in a cyclic master/slave connection --------------------- */ /* Master in a cyclic master/slave connection --------------------- */
if (_IS_CYCLIC(crl_ptr->conn_type)) { if (_IS_CYCLIC(crl_ptr->conn_type))
{
max_scc = 1; max_scc = 1;
ci = 0; ci = 0;
lli_idm = 1; /* image data memory */ lli_idm = 1; /* image data memory */
if (crl_ptr->conn_type & LLI_EVT_BIT) if (crl_ptr->conn_type & LLI_EVT_BIT)
lli_evt_resrc = 1; lli_evt_resrc = 1;
} else /* _IS_ACYCLIC (crl_ptr->conn_type) */ }
else /* _IS_ACYCLIC (crl_ptr->conn_type) */
{ {
multiplier = 1; multiplier = 1;
} }
lli_poll_elem = (USIGN8)(MAX(multiplier, 1)); /* poll_list_element */ lli_poll_elem = (USIGN8)(max(multiplier, 1)); /* poll_list_element */
lli_api_resrc = (USIGN8)(MIN(ci, 1) /* snd IDLE_REQ_PDU */ lli_api_resrc = (USIGN8)(min(ci, 1) /* snd IDLE_REQ_PDU */
+ 1 /* LLI abort resrc */ + 1 /* LLI abort resrc */
); );
snd_req_csrd = (USIGN8)(MAX(1, /* snd ASS.req */ snd_req_csrd = (USIGN8)(max(1, /* snd ASS.req */
(max_scc /* snd DTC.req */ (max_scc /* snd DTC.req */
+ max_sac)) /* snd DTA.req */ + max_sac)) /* snd DTA.req */
+ 1 /* snd ABT.req */ + 1 /* snd ABT.req */
...@@ -547,7 +525,8 @@ possible return values: ...@@ -547,7 +525,8 @@ possible return values:
snd_res_srd = max_rac; /* snd DTA.ack (high)*/ snd_res_srd = max_rac; /* snd DTA.ack (high)*/
if (!ccrl_obj.mms_exist) { if (!ccrl_obj.mms_exist)
{
fdl_sap = 1; fdl_sap = 1;
ccrl_obj.mms_exist = PB_TRUE; ccrl_obj.mms_exist = PB_TRUE;
} }
...@@ -558,7 +537,8 @@ possible return values: ...@@ -558,7 +537,8 @@ possible return values:
fdl_rsap = 1; /* reply update buffer */ fdl_rsap = 1; /* reply update buffer */
if (_IS_CYCLIC(crl_ptr->conn_type)) { if (_IS_CYCLIC(crl_ptr->conn_type))
{
max_rcc = 1; max_rcc = 1;
ci = 0; ci = 0;
lli_idm = 1; /* image data memory */ lli_idm = 1; /* image data memory */
...@@ -570,17 +550,17 @@ possible return values: ...@@ -570,17 +550,17 @@ possible return values:
rcv_res = max_sac; /* rcv DTA_ACK_PDU */ rcv_res = max_sac; /* rcv DTA_ACK_PDU */
lli_sr_snd_resrc = (USIGN8)(MIN(ci, 1) /* snd IDLE.req */ lli_sr_snd_resrc = (USIGN8)(min(ci, 1) /* snd IDLE.req */
+ 1 /* LLI abort resrc */ + 1 /* LLI abort resrc */
); );
rcv_ind = (USIGN8)(MAX(1, /* rcv ASS_REQ_PDU */ rcv_ind = (USIGN8)(max(1, /* rcv ASS_REQ_PDU */
(max_rcc /* rcv DTC_REQ_PDU */ (max_rcc /* rcv DTC_REQ_PDU */
+ max_rac)) /* rcv DTA_REQ_PDU */ + max_rac)) /* rcv DTA_REQ_PDU */
+ 1 /* rcv ABT_REQ_PDU */ + 1 /* rcv ABT_REQ_PDU */
); );
lli_rcv_ind = (USIGN8)(MIN(ci, 1) /* rcv IDLE_REQ_PDU */ lli_rcv_ind = (USIGN8)(min(ci, 1) /* rcv IDLE_REQ_PDU */
+ 2 /* rcv poll telegrams */ + 2 /* rcv poll telegrams */
); );
fdl_sap = 1; /* act/deact LSAP */ fdl_sap = 1; /* act/deact LSAP */
...@@ -589,13 +569,13 @@ possible return values: ...@@ -589,13 +569,13 @@ possible return values:
case S_CL: case S_CL:
/* Broadcast/Multicast Sender ------------------------------------- */ /* Broadcast/Multicast Sender ------------------------------------- */
snd_req = (USIGN8)MAX(1, max_sac); /* snd DTU.req */ snd_req = (USIGN8)max(1, max_sac); /* snd DTU.req */
fdl_sap = 1; /* act/deact LSAP */ fdl_sap = 1; /* act/deact LSAP */
break; break;
case R_CL: case R_CL:
/* Broadcast/Multicast Receiver ----------------------------------- */ /* Broadcast/Multicast Receiver ----------------------------------- */
rcv_ind = (USIGN8)MAX(1, max_rac); /* rcv DTU_REQ_PDU */ rcv_ind = (USIGN8)max(1, max_rac); /* rcv DTU_REQ_PDU */
fdl_sap = 1; /* act/deact LSAP */ fdl_sap = 1; /* act/deact LSAP */
break; break;
...@@ -603,24 +583,28 @@ possible return values: ...@@ -603,24 +583,28 @@ possible return values:
return (E_FM7_CRL_INVALID_ENTRY); return (E_FM7_CRL_INVALID_ENTRY);
} }
no_of_fal_sdbs = (USIGN16)(snd_req + snd_req_csrd + rcv_ind + rcv_ind_csrd no_of_fal_sdbs = (USIGN16)(snd_req + snd_req_csrd + rcv_ind + rcv_ind_csrd +
+ lli_api_resrc + lli_api_snd_resrc + lli_sr_snd_resrc + lli_evt_resrc); lli_api_resrc + lli_api_snd_resrc +
lli_sr_snd_resrc + lli_evt_resrc);
no_of_fdl_sdbs = (USIGN16)(snd_req + snd_req_srd + rcv_res + rcv_ind no_of_fdl_sdbs =
+ snd_res_srd + lli_api_snd_resrc + lli_sr_snd_resrc + lli_rcv_ind (USIGN16)(snd_req + snd_req_srd + rcv_res + rcv_ind + snd_res_srd +
+ fdl_sap + lli_poll_elem); lli_api_snd_resrc + lli_sr_snd_resrc + lli_rcv_ind + fdl_sap +
lli_poll_elem);
no_of_fdl_sdbs = (USIGN16)(no_of_fdl_sdbs + fdl_rsap); no_of_fdl_sdbs = (USIGN16)(no_of_fdl_sdbs + fdl_rsap);
no_of_data_buffer = (USIGN16)(snd_req + snd_req_csrd + snd_req_srd + rcv_res no_of_data_buffer =
+ rcv_ind + rcv_ind_csrd + lli_sr_snd_resrc + lli_poll_elem + lli_idm (USIGN16)(snd_req + snd_req_csrd + snd_req_srd + rcv_res + rcv_ind +
+ lli_rcv_ind + fdl_rsap + lli_evt_resrc); rcv_ind_csrd + lli_sr_snd_resrc + lli_poll_elem + lli_idm +
lli_rcv_ind + fdl_rsap + lli_evt_resrc);
no_of_api_buffer = (USIGN16)( no_of_api_buffer = (USIGN16)(snd_res_srd + lli_api_resrc + lli_api_snd_resrc +
snd_res_srd + lli_api_resrc + lli_api_snd_resrc + lli_poll_elem); lli_poll_elem);
if ((no_of_fal_sdbs > 0xFF) || (no_of_fdl_sdbs > 0xFF) if ((no_of_fal_sdbs > 0xFF) || (no_of_fdl_sdbs > 0xFF) ||
|| (no_of_data_buffer > 0xFF) || (no_of_api_buffer > 0xFF)) { (no_of_data_buffer > 0xFF) || (no_of_api_buffer > 0xFF))
{
return (E_FM7_CRL_INVALID_ENTRY); return (E_FM7_CRL_INVALID_ENTRY);
} }
...@@ -631,26 +615,27 @@ possible return values: ...@@ -631,26 +615,27 @@ possible return values:
conn_resrc.no_of_data_buffer = (USIGN8)no_of_data_buffer; conn_resrc.no_of_data_buffer = (USIGN8)no_of_data_buffer;
conn_resrc.no_of_api_buffer = (USIGN8)no_of_api_buffer; conn_resrc.no_of_api_buffer = (USIGN8)no_of_api_buffer;
if ((role == M_MM) && (_IS_I_CONN(crl_ptr->conn_attr))) { if ((role == M_MM) && (_IS_I_CONN(crl_ptr->conn_attr)))
{
ccrl_adapt_resrces( ccrl_adapt_resrces(
&ccrl_obj.isap_resrces[_CCRL_MAP_SAP_NR(crl_ptr->loc_lsap)], &ccrl_obj.isap_resrces[_CCRL_MAP_SAP_NR(crl_ptr->loc_lsap)],
&conn_resrc); &conn_resrc);
} }
ccrl_obj.ccrl.max_no_fal_sdbs ccrl_obj.ccrl.max_no_fal_sdbs =
= (USIGN16)(ccrl_obj.ccrl.max_no_fal_sdbs + conn_resrc.no_of_fal_sdbs); (USIGN16)(ccrl_obj.ccrl.max_no_fal_sdbs + conn_resrc.no_of_fal_sdbs);
ccrl_obj.ccrl.max_no_fdl_sdbs ccrl_obj.ccrl.max_no_fdl_sdbs =
= (USIGN16)(ccrl_obj.ccrl.max_no_fdl_sdbs + conn_resrc.no_of_fdl_sdbs); (USIGN16)(ccrl_obj.ccrl.max_no_fdl_sdbs + conn_resrc.no_of_fdl_sdbs);
ccrl_obj.ccrl.max_no_data_buffer = (USIGN16)( ccrl_obj.ccrl.max_no_data_buffer = (USIGN16)(
ccrl_obj.ccrl.max_no_data_buffer + conn_resrc.no_of_data_buffer); ccrl_obj.ccrl.max_no_data_buffer + conn_resrc.no_of_data_buffer);
ccrl_obj.ccrl.max_no_api_buffer = (USIGN16)( ccrl_obj.ccrl.max_no_api_buffer =
ccrl_obj.ccrl.max_no_api_buffer + conn_resrc.no_of_api_buffer); (USIGN16)(ccrl_obj.ccrl.max_no_api_buffer + conn_resrc.no_of_api_buffer);
ccrl_obj.ccrl.max_no_poll_entries ccrl_obj.ccrl.max_no_poll_entries =
= (USIGN16)(ccrl_obj.ccrl.max_no_poll_entries + lli_poll_elem); (USIGN16)(ccrl_obj.ccrl.max_no_poll_entries + lli_poll_elem);
*config_ptr = ccrl_obj.ccrl; *config_ptr = ccrl_obj.ccrl;
......
...@@ -62,13 +62,14 @@ Discription ...@@ -62,13 +62,14 @@ Discription
int hDevDrv = INVALID_HANDLE_VALUE; // handle to cifDevDrv int hDevDrv = INVALID_HANDLE_VALUE; // handle to cifDevDrv
static unsigned short DrvOpenCount = 0; // no Application is logged in static unsigned short DrvOpenCount = 0; // no Application is logged in
typedef struct DEV_DPM_SIZEtag { typedef struct DEV_DPM_SIZEtag
{
unsigned int ulDpmSize; unsigned int ulDpmSize;
unsigned int ulDpmIOSize; unsigned int ulDpmIOSize;
} DEV_DPM_SIZE; } DEV_DPM_SIZE;
DEV_DPM_SIZE tDevDPMSize[MAX_DEV_BOARDS] = { { 0L, 0L }, { 0L, 0L }, { 0L, 0L }, DEV_DPM_SIZE tDevDPMSize[MAX_DEV_BOARDS] = {
{ 0L, 0L } }; // DPM size of each board {0L, 0L}, {0L, 0L}, {0L, 0L}, {0L, 0L}}; // DPM size of each board
/* <ST> /* <ST>
================================================================================= =================================================================================
...@@ -86,17 +87,22 @@ short DevOpenDriver() ...@@ -86,17 +87,22 @@ short DevOpenDriver()
{ {
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
// first application, search CIF device driver // first application, search CIF device driver
if ((hDevDrv = open("/dev/cif", O_RDONLY)) if ((hDevDrv = open("/dev/cif", O_RDONLY)) == -1)
== -1) { // handle of file with attributes to copy { // handle of file with attributes to copy
// error open CIF driver // error open CIF driver
sRet = DRV_USR_OPEN_ERROR; sRet = DRV_USR_OPEN_ERROR;
} else { }
else
{
// driver is opend for the 1st. time, store application in DrvOpencount // driver is opend for the 1st. time, store application in DrvOpencount
DrvOpenCount = 1; DrvOpenCount = 1;
} }
} else { }
else
{
// driver is already opend, store application in DrvOpencount // driver is already opend, store application in DrvOpencount
DrvOpenCount++; DrvOpenCount++;
} }
...@@ -122,14 +128,20 @@ short DevCloseDriver() ...@@ -122,14 +128,20 @@ short DevCloseDriver()
{ {
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else { }
else
{
// test if other applications are logged in // test if other applications are logged in
if (DrvOpenCount > 1) { if (DrvOpenCount > 1)
{
// there are more applications logged in, do not close the driver // there are more applications logged in, do not close the driver
DrvOpenCount--; DrvOpenCount--;
} else { }
else
{
// no more application are logged in, close File Handle // no more application are logged in, close File Handle
close(hDevDrv); // handle of object to close close(hDevDrv); // handle of object to close
DrvOpenCount = 0; DrvOpenCount = 0;
...@@ -160,15 +172,18 @@ short DevGetBoardInfo(BOARD_INFO* pvData) ...@@ -160,15 +172,18 @@ short DevGetBoardInfo(BOARD_INFO* pvData)
BOARD_INFO* ptBoardInfo = NULL; BOARD_INFO* ptBoardInfo = NULL;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else { }
if ((ptBuffer else
= (DEVIO_GETBOARDINFOCMD*)malloc(sizeof(DEVIO_GETBOARDINFOCMD))) {
== NULL) if ((ptBuffer = (DEVIO_GETBOARDINFOCMD*)malloc(
sizeof(DEVIO_GETBOARDINFOCMD))) == NULL)
return DRV_USR_SENDBUF_PTR_NULL; return DRV_USR_SENDBUF_PTR_NULL;
if ((ptBuffer->ptBoardInfo = (BOARD_INFO*)malloc(sizeof(BOARD_INFO))) if ((ptBuffer->ptBoardInfo = (BOARD_INFO*)malloc(sizeof(BOARD_INFO))) ==
== NULL) { NULL)
{
free(ptBuffer); free(ptBuffer);
return DRV_USR_SENDBUF_PTR_NULL; return DRV_USR_SENDBUF_PTR_NULL;
} }
...@@ -176,10 +191,13 @@ short DevGetBoardInfo(BOARD_INFO* pvData) ...@@ -176,10 +191,13 @@ short DevGetBoardInfo(BOARD_INFO* pvData)
ptBuffer->usInfoLen = sizeof(BOARD_INFO); ptBuffer->usInfoLen = sizeof(BOARD_INFO);
ptBoardInfo = ptBuffer->ptBoardInfo; ptBoardInfo = ptBuffer->ptBoardInfo;
if (!ioctl(hDevDrv, CIF_IOCTLBOARDINFO, (unsigned long)ptBuffer)) { if (!ioctl(hDevDrv, CIF_IOCTLBOARDINFO, (unsigned long)ptBuffer))
{
// fprintf(stderr, "CIF_IOCTLBOARDINFO: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLBOARDINFO: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
ptBuffer->ptBoardInfo = ptBoardInfo; ptBuffer->ptBoardInfo = ptBoardInfo;
// printf("sRet=%X, &tBuffer=%lX, ->ptBI=%lX\n",sRet,(unsigned // printf("sRet=%X, &tBuffer=%lX, ->ptBI=%lX\n",sRet,(unsigned
// long)tBuffer,(unsigned long)ptBoardInfo); // long)tBuffer,(unsigned long)ptBoardInfo);
...@@ -217,16 +235,19 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData) ...@@ -217,16 +235,19 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData)
BOARD_INFOEX* ptBoardInfoEx = NULL; BOARD_INFOEX* ptBoardInfoEx = NULL;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else { }
if ((ptBuffer else
= (DEVIO_GETBOARDINFOEXCMD*)malloc(sizeof(DEVIO_GETBOARDINFOEXCMD))) {
== NULL) if ((ptBuffer = (DEVIO_GETBOARDINFOEXCMD*)malloc(
sizeof(DEVIO_GETBOARDINFOEXCMD))) == NULL)
return DRV_USR_SENDBUF_PTR_NULL; return DRV_USR_SENDBUF_PTR_NULL;
ptBuffer->usInfoLen = sizeof(BOARD_INFOEX); ptBuffer->usInfoLen = sizeof(BOARD_INFOEX);
if ((ptBuffer->ptBoard = (BOARD_INFOEX*)malloc(sizeof(BOARD_INFOEX))) if ((ptBuffer->ptBoard = (BOARD_INFOEX*)malloc(sizeof(BOARD_INFOEX))) ==
== NULL) { NULL)
{
free(ptBuffer); free(ptBuffer);
return DRV_USR_SENDBUF_PTR_NULL; return DRV_USR_SENDBUF_PTR_NULL;
} }
...@@ -234,10 +255,13 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData) ...@@ -234,10 +255,13 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData)
ptBuffer->usInfoLen = sizeof(BOARD_INFOEX); ptBuffer->usInfoLen = sizeof(BOARD_INFOEX);
ptBuffer->sError = sRet; ptBuffer->sError = sRet;
if (!ioctl(hDevDrv, CIF_IOCTLBOARDINFOEX, (unsigned long)ptBuffer)) { if (!ioctl(hDevDrv, CIF_IOCTLBOARDINFOEX, (unsigned long)ptBuffer))
{
// fprintf(stderr, "CIF_IOCTLBOARDINFOEX: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLBOARDINFOEX: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
sRet = ptBuffer->sError; sRet = ptBuffer->sError;
ptBuffer->ptBoard = ptBoardInfoEx; ptBuffer->ptBoard = ptBoardInfoEx;
memcpy(pvData, ptBoardInfoEx, sizeof(BOARD_INFOEX)); memcpy(pvData, ptBoardInfoEx, sizeof(BOARD_INFOEX));
...@@ -260,27 +284,35 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData) ...@@ -260,27 +284,35 @@ short DevGetBoardInfoEx(BOARD_INFOEX* pvData)
================================================================================= =================================================================================
<En> */ <En> */
short DevSetOpMode( short DevSetOpMode(unsigned short usBoard, unsigned short usMode,
unsigned short usBoard, unsigned short usMode, unsigned short* usIrq) unsigned short* usIrq)
{ {
DEVIO_SETOPMODE tBuffer; DEVIO_SETOPMODE tBuffer;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usBoard >= MAX_DEV_BOARDS) { }
else if (usBoard >= MAX_DEV_BOARDS)
{
// number is invalid // number is invalid
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else { }
else
{
// clear all data buffers // clear all data buffers
tBuffer.usBoard = usBoard; tBuffer.usBoard = usBoard;
tBuffer.usMode = usMode; tBuffer.usMode = usMode;
tBuffer.sError = sRet; tBuffer.sError = sRet;
if (!ioctl(hDevDrv, CIF_IOCTL_IRQ_POLL, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTL_IRQ_POLL, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIFAPI (CIF_IOCTL_IRQ_POLL): %s\n", strerror(errno)); // fprintf(stderr, "CIFAPI (CIF_IOCTL_IRQ_POLL): %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
sRet = tBuffer.sError; sRet = tBuffer.sError;
*usIrq = tBuffer.usIrq; *usIrq = tBuffer.usIrq;
} }
...@@ -307,28 +339,37 @@ short DevInitBoard(unsigned short usDevNumber) ...@@ -307,28 +339,37 @@ short DevInitBoard(unsigned short usDevNumber)
DEVIO_RESETCMD tBuffer; DEVIO_RESETCMD tBuffer;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
// number is invalid // number is invalid
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else { }
else
{
// clear all data buffers // clear all data buffers
tBuffer.usBoard = usDevNumber; tBuffer.usBoard = usDevNumber;
tBuffer.sError = sRet; tBuffer.sError = sRet;
if (!ioctl(hDevDrv, CIF_IOCTLINITDRV, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLINITDRV, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIFAPI (CIF_IOCTLINITDRV): %s\n", strerror(errno)); // fprintf(stderr, "CIFAPI (CIF_IOCTLINITDRV): %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
sRet = tBuffer.sError; sRet = tBuffer.sError;
// printf("CIFAPI (CIF_IOCTLINITDRV): sRet = %d\n", sRet); // printf("CIFAPI (CIF_IOCTLINITDRV): sRet = %d\n", sRet);
if (sRet == DRV_NO_ERROR) { if (sRet == DRV_NO_ERROR)
{
// Save the DPM size for further function calls and calculate the length // Save the DPM size for further function calls and calculate the length
// of the DPM-IO data area // of the DPM-IO data area
tDevDPMSize[usDevNumber].ulDpmSize = tBuffer.ulDpmSize; tDevDPMSize[usDevNumber].ulDpmSize = tBuffer.ulDpmSize;
tDevDPMSize[usDevNumber].ulDpmIOSize tDevDPMSize[usDevNumber].ulDpmIOSize =
= ((tBuffer.ulDpmSize * 1024) - 1024) / 2; ((tBuffer.ulDpmSize * 1024) - 1024) / 2;
} }
} }
} }
...@@ -350,22 +391,29 @@ short DevInitBoard(unsigned short usDevNumber) ...@@ -350,22 +391,29 @@ short DevInitBoard(unsigned short usDevNumber)
================================================================================= =================================================================================
<En> */ <En> */
short DevReset( short DevReset(unsigned char usDevNumber, unsigned short usMode,
unsigned char usDevNumber, unsigned short usMode, unsigned long ulTimeout) unsigned long ulTimeout)
{ {
DEVIO_RESETCMD tBuffer; DEVIO_RESETCMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usMode != COLDSTART) && (usMode != WARMSTART) }
&& (usMode != BOOTSTART)) { else if ((usMode != COLDSTART) && (usMode != WARMSTART) &&
(usMode != BOOTSTART))
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -376,10 +424,13 @@ short DevReset( ...@@ -376,10 +424,13 @@ short DevReset(
// printf("CIF_IOCTLRESETDEV: BOARD = %d, mode = %d, tout = %ld\n", // printf("CIF_IOCTLRESETDEV: BOARD = %d, mode = %d, tout = %ld\n",
// tBuffer.ucBoard, tBuffer.usMode, tBuffer.ulTimeout); // tBuffer.ucBoard, tBuffer.usMode, tBuffer.ulTimeout);
if (!ioctl(hDevDrv, CIF_IOCTLRESETDEV, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLRESETDEV, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLRESETDEV: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLRESETDEV: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
} }
...@@ -410,59 +461,76 @@ short DevGetInfo(unsigned short usDevNumber, unsigned short usInfoArea, ...@@ -410,59 +461,76 @@ short DevGetInfo(unsigned short usDevNumber, unsigned short usInfoArea,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usSize == 0) { }
else if (usSize == 0)
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else { }
else
{
// test area spezific data // test area spezific data
switch (usInfoArea) { switch (usInfoArea)
{
case GET_VERSION_INFO: case GET_VERSION_INFO:
if (usSize > sizeof(VERSIONINFO)) { if (usSize > sizeof(VERSIONINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_DRIVER_INFO: case GET_DRIVER_INFO:
if (usSize > sizeof(DRIVERINFO)) { if (usSize > sizeof(DRIVERINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_FIRMWARE_INFO: case GET_FIRMWARE_INFO:
if (usSize > sizeof(FIRMWAREINFO)) { if (usSize > sizeof(FIRMWAREINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_RCS_INFO: case GET_RCS_INFO:
if (usSize > sizeof(RCSINFO)) { if (usSize > sizeof(RCSINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_DEV_INFO: case GET_DEV_INFO:
if (usSize > sizeof(DEVINFO)) { if (usSize > sizeof(DEVINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_TASK_INFO: case GET_TASK_INFO:
if (usSize > sizeof(TASKINFO)) { if (usSize > sizeof(TASKINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_IO_INFO: case GET_IO_INFO:
if (usSize > sizeof(IOINFO)) { if (usSize > sizeof(IOINFO))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
case GET_IO_SEND_DATA: case GET_IO_SEND_DATA:
if (usSize > tDevDPMSize[usDevNumber].ulDpmIOSize) { if (usSize > tDevDPMSize[usDevNumber].ulDpmIOSize)
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} }
break; break;
default: default:
sRet = DRV_USR_INFO_AREA_INVALID; sRet = DRV_USR_INFO_AREA_INVALID;
} /* end switch */ } /* end switch */
if (sRet == DRV_NO_ERROR) { if (sRet == DRV_NO_ERROR)
{
// complete buffer length with return data // complete buffer length with return data
// usDataBufferLen = usSize; // usDataBufferLen = usSize;
// fill in parameter data // fill in parameter data
...@@ -471,15 +539,18 @@ short DevGetInfo(unsigned short usDevNumber, unsigned short usInfoArea, ...@@ -471,15 +539,18 @@ short DevGetInfo(unsigned short usDevNumber, unsigned short usInfoArea,
tBuffer.usBoard = usDevNumber; tBuffer.usBoard = usDevNumber;
tBuffer.usInfoArea = usInfoArea; tBuffer.usInfoArea = usInfoArea;
tBuffer.usInfoLen = usSize; tBuffer.usInfoLen = usSize;
tBuffer.pabInfoData tBuffer.pabInfoData =
= pvData; // needed in kernel-space to copy data back to it! pvData; // needed in kernel-space to copy data back to it!
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLGETINFO, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLGETINFO, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "(CIFAPI: (CIF_IOCTLGETINFO): %s\n", // fprintf(stderr, "(CIFAPI: (CIF_IOCTLGETINFO): %s\n",
// strerror(errno)); // strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
// memcpy(pvData, tBuffer.pabInfoData, usSize); already copied by // memcpy(pvData, tBuffer.pabInfoData, usSize); already copied by
// driver direct !!! // driver direct !!!
sRet = tBuffer.sError; sRet = tBuffer.sError;
...@@ -512,18 +583,28 @@ short DevPutTaskParameter(unsigned short usDevNumber, unsigned short usNumber, ...@@ -512,18 +583,28 @@ short DevPutTaskParameter(unsigned short usDevNumber, unsigned short usNumber,
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usNumber < 1) }
|| (usNumber > 7)) { // 3...7 wird in MailBox memory area geschrieben else if ((usNumber < 1) || (usNumber > 7))
{ // 3...7 wird in MailBox memory area geschrieben
sRet = DRV_USR_NUMBER_INVALID; sRet = DRV_USR_NUMBER_INVALID;
} else if (usSize == 0) { }
else if (usSize == 0)
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else if (usSize > sizeof(TASKPARAM)) { }
else if (usSize > sizeof(TASKPARAM))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set command buffer // set command buffer
...@@ -534,10 +615,12 @@ short DevPutTaskParameter(unsigned short usDevNumber, unsigned short usNumber, ...@@ -534,10 +615,12 @@ short DevPutTaskParameter(unsigned short usDevNumber, unsigned short usNumber,
usSize); usSize);
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLPARAMETER, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLPARAMETER, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLRESETDEV: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLRESETDEV: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -567,17 +650,28 @@ short DevGetTaskState(unsigned short usDevNumber, unsigned short usNumber, ...@@ -567,17 +650,28 @@ short DevGetTaskState(unsigned short usDevNumber, unsigned short usNumber,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usNumber < 1 || usNumber > 2) { }
else if (usNumber < 1 || usNumber > 2)
{
sRet = DRV_USR_NUMBER_INVALID; sRet = DRV_USR_NUMBER_INVALID;
} else if (usSize == 0) { }
else if (usSize == 0)
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else if (usSize > sizeof(TASKSTATE)) { }
else if (usSize > sizeof(TASKSTATE))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
...@@ -588,10 +682,13 @@ short DevGetTaskState(unsigned short usDevNumber, unsigned short usNumber, ...@@ -588,10 +682,13 @@ short DevGetTaskState(unsigned short usDevNumber, unsigned short usNumber,
// memcpy( tBuffer.TaskState, pvData, usSize); // memcpy( tBuffer.TaskState, pvData, usSize);
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLTASKSTATE, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLTASKSTATE, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLTASKSTATE: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLTASKSTATE: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
memcpy(pvData, tBuffer.TaskState, usSize); memcpy(pvData, tBuffer.TaskState, usSize);
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
...@@ -621,11 +718,16 @@ short DevGetMBXState(unsigned short usDevNumber, unsigned short* pusDevMbxState, ...@@ -621,11 +718,16 @@ short DevGetMBXState(unsigned short usDevNumber, unsigned short* pusDevMbxState,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -634,10 +736,13 @@ short DevGetMBXState(unsigned short usDevNumber, unsigned short* pusDevMbxState, ...@@ -634,10 +736,13 @@ short DevGetMBXState(unsigned short usDevNumber, unsigned short* pusDevMbxState,
tBuffer.usHostMbxState = 0x00; //*pusHostMbxState; tBuffer.usHostMbxState = 0x00; //*pusHostMbxState;
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLMBXINFO, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLMBXINFO, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLMBXINFO: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLMBXINFO: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
*pusDevMbxState = tBuffer.usDevMbxState; *pusDevMbxState = tBuffer.usDevMbxState;
*pusHostMbxState = tBuffer.usHostMbxState; *pusHostMbxState = tBuffer.usHostMbxState;
sRet = tBuffer.sError; sRet = tBuffer.sError;
...@@ -669,16 +774,24 @@ short DevGetMBXData(unsigned short usDevNumber, unsigned short usHostSize, ...@@ -669,16 +774,24 @@ short DevGetMBXData(unsigned short usDevNumber, unsigned short usHostSize,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usHostSize == 0) || (usDevSize == 0)) { }
else if ((usHostSize == 0) || (usDevSize == 0))
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else if ((usHostSize > sizeof(MSG_STRUC)) }
|| (usDevSize > sizeof(MSG_STRUC))) { else if ((usHostSize > sizeof(MSG_STRUC)) || (usDevSize > sizeof(MSG_STRUC)))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
...@@ -705,7 +818,9 @@ short DevGetMBXData(unsigned short usDevNumber, unsigned short usHostSize, ...@@ -705,7 +818,9 @@ short DevGetMBXData(unsigned short usDevNumber, unsigned short usHostSize,
// fprintf(stderr, "CIF_IOCTLGETMBX: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLGETMBX: %s\n", strerror(errno));
// function error // function error
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
printf("cif_api::DevGetMBXData: after CIF_IOCTLGETMBX ...\n"); printf("cif_api::DevGetMBXData: after CIF_IOCTLGETMBX ...\n");
memcpy(pvDevData, tBuffer.abDevMbx, usDevSize); memcpy(pvDevData, tBuffer.abDevMbx, usDevSize);
printf("cif_api::DevGetMBXData: after memcpy ...\n"); printf("cif_api::DevGetMBXData: after memcpy ...\n");
...@@ -736,12 +851,17 @@ short DevExitBoard(unsigned short usDevNumber) ...@@ -736,12 +851,17 @@ short DevExitBoard(unsigned short usDevNumber)
unsigned short usDrvOpenCount = 0; unsigned short usDrvOpenCount = 0;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
// number is invalid // number is invalid
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else { }
else
{
// valid handle available, driver is open // valid handle available, driver is open
// clear all data buffers // clear all data buffers
lBytesReturned = 0; lBytesReturned = 0;
...@@ -749,10 +869,13 @@ short DevExitBoard(unsigned short usDevNumber) ...@@ -749,10 +869,13 @@ short DevExitBoard(unsigned short usDevNumber)
// tBuffer.usDrvOpenCount = usDrvOpenCount; // [out] // tBuffer.usDrvOpenCount = usDrvOpenCount; // [out]
// tBuffer.sError = sRet; // [out] // tBuffer.sError = sRet; // [out]
if (!ioctl(hDevDrv, CIF_IOCTLEXITDRV, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLEXITDRV, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLEXITDRV: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLEXITDRV: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
tBuffer.usDrvOpenCount = usDrvOpenCount; // [out] tBuffer.usDrvOpenCount = usDrvOpenCount; // [out]
sRet = tBuffer.sError; // [out] sRet = tBuffer.sError; // [out]
} }
...@@ -784,15 +907,22 @@ short DevReadSendData(unsigned short usDevNumber, unsigned short usOffset, ...@@ -784,15 +907,22 @@ short DevReadSendData(unsigned short usDevNumber, unsigned short usOffset,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usSize != 0) }
&& ((usSize + usOffset) else if ((usSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usSize + usOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -803,10 +933,13 @@ short DevReadSendData(unsigned short usDevNumber, unsigned short usOffset, ...@@ -803,10 +933,13 @@ short DevReadSendData(unsigned short usDevNumber, unsigned short usOffset,
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLREADSEND, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLREADSEND, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
} }
...@@ -834,13 +967,20 @@ short DevTriggerWatchDog(unsigned short usDevNumber, unsigned short usMode, ...@@ -834,13 +967,20 @@ short DevTriggerWatchDog(unsigned short usDevNumber, unsigned short usMode,
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usMode > WATCHDOG_START) { }
else if (usMode > WATCHDOG_START)
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -850,10 +990,13 @@ short DevTriggerWatchDog(unsigned short usDevNumber, unsigned short usMode, ...@@ -850,10 +990,13 @@ short DevTriggerWatchDog(unsigned short usDevNumber, unsigned short usMode,
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLTRIGGERWD, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLTRIGGERWD, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
*pusDevWatchDog = tBuffer.usTriggerValue; *pusDevWatchDog = tBuffer.usTriggerValue;
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
...@@ -883,13 +1026,20 @@ short DevSpecialControl(unsigned short usDevNumber, unsigned short usMode, ...@@ -883,13 +1026,20 @@ short DevSpecialControl(unsigned short usDevNumber, unsigned short usMode,
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (pusCtrlAck == NULL) { }
else if (pusCtrlAck == NULL)
{
sRet = DRV_USR_BUF_PTR_NULL; sRet = DRV_USR_BUF_PTR_NULL;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -898,10 +1048,13 @@ short DevSpecialControl(unsigned short usDevNumber, unsigned short usMode, ...@@ -898,10 +1048,13 @@ short DevSpecialControl(unsigned short usDevNumber, unsigned short usMode,
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLSPCONTROL, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLSPCONTROL, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLREADSEND: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
*pusCtrlAck = tBuffer.usTriggerValue; *pusCtrlAck = tBuffer.usTriggerValue;
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
...@@ -932,17 +1085,28 @@ short DevExtendedData(unsigned short usDevNumber, unsigned short usMode, ...@@ -932,17 +1085,28 @@ short DevExtendedData(unsigned short usDevNumber, unsigned short usMode,
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usSize == 0) { }
else if (usSize == 0)
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else if (usSize > EXTDATASIZE) { }
else if (usSize > EXTDATASIZE)
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else if ((usMode == 0) || (usMode > 100)) { }
else if ((usMode == 0) || (usMode > 100))
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
...@@ -957,10 +1121,12 @@ short DevExtendedData(unsigned short usDevNumber, unsigned short usMode, ...@@ -957,10 +1121,12 @@ short DevExtendedData(unsigned short usDevNumber, unsigned short usMode,
// error into the tDataBuffer. // error into the tDataBuffer.
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLEXTDATA, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLEXTDATA, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLEXTDATA: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLEXTDATA: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -990,17 +1156,28 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber, ...@@ -990,17 +1156,28 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usNumber < 1) || (usNumber > 2)) { }
else if ((usNumber < 1) || (usNumber > 2))
{
sRet = DRV_USR_NUMBER_INVALID; sRet = DRV_USR_NUMBER_INVALID;
} else if (usSize == 0) { }
else if (usSize == 0)
{
sRet = DRV_USR_SIZE_ZERO; sRet = DRV_USR_SIZE_ZERO;
} else if (usSize > sizeof(TASKPARAM)) { }
else if (usSize > sizeof(TASKPARAM))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set command buffer // set command buffer
...@@ -1010,10 +1187,13 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber, ...@@ -1010,10 +1187,13 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber,
// tBuffer.ptTaskParam = pvData; // tBuffer.ptTaskParam = pvData;
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLGETPARAMETER, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLGETPARAMETER, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLGETPARAMETER: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLGETPARAMETER: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
memcpy((unsigned char*)pvData, (unsigned char*)&(tBuffer.TaskParameter), memcpy((unsigned char*)pvData, (unsigned char*)&(tBuffer.TaskParameter),
usSize); usSize);
sRet = tBuffer.sError; sRet = tBuffer.sError;
...@@ -1036,25 +1216,35 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber, ...@@ -1036,25 +1216,35 @@ short DevGetTaskParameter(unsigned short usDevNumber, unsigned short usNumber,
<En> */ <En> */
short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode, short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode,
unsigned short usOffset, unsigned short usSize, void* pvData) unsigned short usOffset, unsigned short usSize,
void* pvData)
{ {
DEVIO_RWDPMDATACMD tBuffer; DEVIO_RWDPMDATACMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usMode != PARAMETER_READ) && (usMode != PARAMETER_WRITE)) { }
else if ((usMode != PARAMETER_READ) && (usMode != PARAMETER_WRITE))
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else if ((usSize != 0) }
&& ((usSize + usOffset) else if ((usSize != 0) &&
> (unsigned short)(tDevDPMSize[usDevNumber].ulDpmSize * 1024))) { ((usSize + usOffset) >
(unsigned short)(tDevDPMSize[usDevNumber].ulDpmSize * 1024)))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
; ;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
tBuffer.usBoard = usDevNumber; tBuffer.usBoard = usDevNumber;
...@@ -1065,10 +1255,12 @@ short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode, ...@@ -1065,10 +1255,12 @@ short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode,
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLRWDPMDATA, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLRWDPMDATA, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLRWDPMDATA: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLRWDPMDATA: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} /* endif */ } /* endif */
return sRet; return sRet;
...@@ -1091,22 +1283,32 @@ short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode, ...@@ -1091,22 +1283,32 @@ short DevReadWriteDPMData(unsigned short usDevNumber, unsigned short usMode,
<En> */ <En> */
short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode, short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode,
unsigned short usOffset, unsigned short usSize, void* pvData) unsigned short usOffset, unsigned short usSize,
void* pvData)
{ {
DEVIO_RWRAWDATACMD tBuffer; DEVIO_RWRAWDATACMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usSize + usOffset) > sizeof(RAWDATA)) { }
else if ((usSize + usOffset) > sizeof(RAWDATA))
{
sRet = DRV_USR_SIZE_TOO_LONG; sRet = DRV_USR_SIZE_TOO_LONG;
} else if ((usMode != PARAMETER_READ) && (usMode != PARAMETER_WRITE)) { }
else if ((usMode != PARAMETER_READ) && (usMode != PARAMETER_WRITE))
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
tBuffer.usBoard = usDevNumber; tBuffer.usBoard = usDevNumber;
...@@ -1117,10 +1319,12 @@ short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode, ...@@ -1117,10 +1319,12 @@ short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode,
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLRWRAW, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLRWRAW, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLRWRAW: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLRWRAW: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} /* endif */ } /* endif */
return sRet; return sRet;
...@@ -1142,27 +1346,38 @@ short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode, ...@@ -1142,27 +1346,38 @@ short DevReadWriteDPMRaw(unsigned short usDevNumber, unsigned short usMode,
<En> */ <En> */
short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset, short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset,
unsigned short usSendSize, void* pvSendData, unsigned short usReceiveOffset, unsigned short usSendSize, void* pvSendData,
unsigned short usReceiveSize, void* pvReceiveData, unsigned long ulTimeout) unsigned short usReceiveOffset,
unsigned short usReceiveSize, void* pvReceiveData,
unsigned long ulTimeout)
{ {
DEVIO_EXIOCMD tBuffer; DEVIO_EXIOCMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
int lRet = 0; int lRet = 0;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usSendSize != 0) }
&& ((usSendSize + usSendOffset) else if ((usSendSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usSendSize + usSendOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_SENDSIZE_TOO_LONG; sRet = DRV_USR_SENDSIZE_TOO_LONG;
} else if ((usReceiveSize != 0) }
&& ((usReceiveSize + usReceiveOffset) else if ((usReceiveSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usReceiveSize + usReceiveOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_RECVSIZE_TOO_LONG; sRet = DRV_USR_RECVSIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -1178,10 +1393,12 @@ short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset, ...@@ -1178,10 +1393,12 @@ short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset,
// activate function // activate function
lRet = ioctl(hDevDrv, CIF_IOCTLEXIO, (unsigned long)(&tBuffer)); lRet = ioctl(hDevDrv, CIF_IOCTLEXIO, (unsigned long)(&tBuffer));
if (lRet <= 0) { if (lRet <= 0)
{
// fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -1204,9 +1421,10 @@ short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset, ...@@ -1204,9 +1421,10 @@ short DevExchangeIO(unsigned short usDevNumber, unsigned short usSendOffset,
<En> */ <En> */
short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode, short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode,
unsigned short usSendOffset, unsigned short usSendSize, void* pvSendData, unsigned short usSendOffset, unsigned short usSendSize,
unsigned short usReceiveOffset, unsigned short usReceiveSize, void* pvSendData, unsigned short usReceiveOffset,
void* pvReceiveData, unsigned long ulTimeout) unsigned short usReceiveSize, void* pvReceiveData,
unsigned long ulTimeout)
{ {
DEVIO_EXIOCMDEX tBuffer; DEVIO_EXIOCMDEX tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
...@@ -1214,21 +1432,32 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode, ...@@ -1214,21 +1432,32 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode,
int lRet = 0; int lRet = 0;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usSendSize != 0) }
&& ((usSendSize + usSendOffset) else if ((usSendSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usSendSize + usSendOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_SENDSIZE_TOO_LONG; sRet = DRV_USR_SENDSIZE_TOO_LONG;
} else if ((usReceiveSize != 0) }
&& ((usReceiveSize + usReceiveOffset) else if ((usReceiveSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usReceiveSize + usReceiveOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_RECVSIZE_TOO_LONG; sRet = DRV_USR_RECVSIZE_TOO_LONG;
} else if (usMode > 4) { }
else if (usMode > 4)
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
...@@ -1246,10 +1475,12 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode, ...@@ -1246,10 +1475,12 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode,
// activate function // activate function
lRet = ioctl(hDevDrv, CIF_IOCTLEXIOEX, (unsigned long)(&tBuffer)); lRet = ioctl(hDevDrv, CIF_IOCTLEXIOEX, (unsigned long)(&tBuffer));
if (lRet <= 0) { if (lRet <= 0)
{
// fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -1272,9 +1503,10 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode, ...@@ -1272,9 +1503,10 @@ short DevExchangeIOEx(unsigned short usDevNumber, unsigned short usMode,
<En> */ <En> */
short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset, short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset,
unsigned short usSendSize, void* pvSendData, unsigned short usReceiveOffset, unsigned short usSendSize, void* pvSendData,
unsigned short usReceiveSize, void* pvReceiveData, COMSTATE* ptState, unsigned short usReceiveOffset,
unsigned long ulTimeout) unsigned short usReceiveSize, void* pvReceiveData,
COMSTATE* ptState, unsigned long ulTimeout)
{ {
DEVIO_EXIOCMDERR tBuffer; DEVIO_EXIOCMDERR tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
...@@ -1282,19 +1514,28 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset, ...@@ -1282,19 +1514,28 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset,
int lRet = 0; int lRet = 0;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((usSendSize != 0) }
&& ((usSendSize + usSendOffset) else if ((usSendSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usSendSize + usSendOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_SENDSIZE_TOO_LONG; sRet = DRV_USR_SENDSIZE_TOO_LONG;
} else if ((usReceiveSize != 0) }
&& ((usReceiveSize + usReceiveOffset) else if ((usReceiveSize != 0) &&
> (unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize)) { ((usReceiveSize + usReceiveOffset) >
(unsigned short)tDevDPMSize[usDevNumber].ulDpmIOSize))
{
sRet = DRV_USR_RECVSIZE_TOO_LONG; sRet = DRV_USR_RECVSIZE_TOO_LONG;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -1311,10 +1552,12 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset, ...@@ -1311,10 +1552,12 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset,
// activate function // activate function
lRet = ioctl(hDevDrv, CIF_IOCTLEXIOERR, (unsigned long)(&tBuffer)); lRet = ioctl(hDevDrv, CIF_IOCTLEXIOERR, (unsigned long)(&tBuffer));
if (lRet <= 0) { if (lRet <= 0)
{
// fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLEXIO: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -1334,21 +1577,28 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset, ...@@ -1334,21 +1577,28 @@ short DevExchangeIOErr(unsigned short usDevNumber, unsigned short usSendOffset,
================================================================================= =================================================================================
<En> */ <En> */
short DevSetHostState( short DevSetHostState(unsigned short usDevNumber, unsigned short usMode,
unsigned short usDevNumber, unsigned short usMode, unsigned long ulTimeout) unsigned long ulTimeout)
{ {
DEVIO_TRIGGERCMD tBuffer; DEVIO_TRIGGERCMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usMode > HOST_READY) { }
else if (usMode > HOST_READY)
{
sRet = DRV_USR_MODE_INVALID; sRet = DRV_USR_MODE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
...@@ -1358,10 +1608,12 @@ short DevSetHostState( ...@@ -1358,10 +1608,12 @@ short DevSetHostState(
tBuffer.ulTimeout = ulTimeout; tBuffer.ulTimeout = ulTimeout;
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLSETHOST, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLSETHOST, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLSETHOST: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLSETHOST: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -1382,19 +1634,24 @@ short DevSetHostState( ...@@ -1382,19 +1634,24 @@ short DevSetHostState(
================================================================================= =================================================================================
<En> */ <En> */
short DevPutMessage( short DevPutMessage(unsigned short usDevNumber, MSG_STRUC* ptMessage,
unsigned short usDevNumber, MSG_STRUC* ptMessage, unsigned long ulTimeout) unsigned long ulTimeout)
{ {
DEVIO_PUTMESSAGECMD tBuffer; DEVIO_PUTMESSAGECMD tBuffer;
unsigned int lBytesReturned; unsigned int lBytesReturned;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -1404,10 +1661,12 @@ short DevPutMessage( ...@@ -1404,10 +1661,12 @@ short DevPutMessage(
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLPUTMSG, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLPUTMSG, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLPUTMSG: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLPUTMSG: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else }
else
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
return sRet; return sRet;
...@@ -1438,13 +1697,20 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize, ...@@ -1438,13 +1697,20 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if (usSize == 0 || usSize > sizeof(MSG_STRUC)) { }
else if (usSize == 0 || usSize > sizeof(MSG_STRUC))
{
sRet = DRV_USR_SIZE_INVALID; sRet = DRV_USR_SIZE_INVALID;
} else { }
else
{
// fill in parameter data // fill in parameter data
lBytesReturned = 0; lBytesReturned = 0;
// set output buffer // set output buffer
...@@ -1452,10 +1718,13 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize, ...@@ -1452,10 +1718,13 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize,
tBuffer.ulTimeout = ulTimeout; tBuffer.ulTimeout = ulTimeout;
tBuffer.sError = sRet; tBuffer.sError = sRet;
// activate function // activate function
if (!ioctl(hDevDrv, CIF_IOCTLGETMSG, (unsigned long)(&tBuffer))) { if (!ioctl(hDevDrv, CIF_IOCTLGETMSG, (unsigned long)(&tBuffer)))
{
// fprintf(stderr, "CIF_IOCTLGETMSG: %s\n", strerror(errno)); // fprintf(stderr, "CIF_IOCTLGETMSG: %s\n", strerror(errno));
sRet = DRV_USR_COMM_ERR; sRet = DRV_USR_COMM_ERR;
} else { }
else
{
memcpy(ptMessage, &tBuffer.tMsg, sizeof(MSG_STRUC)); memcpy(ptMessage, &tBuffer.tMsg, sizeof(MSG_STRUC));
sRet = tBuffer.sError; sRet = tBuffer.sError;
} }
...@@ -1481,14 +1750,16 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize, ...@@ -1481,14 +1750,16 @@ short DevGetMessage(unsigned short usDevNumber, unsigned short usSize,
#define TO_LAST_MSG 15000L #define TO_LAST_MSG 15000L
// File data structure // File data structure
typedef struct tagFILEDATA { typedef struct tagFILEDATA
{
int fd; int fd;
// struct stat *Info;//struct _stat *Info; // struct stat *Info;//struct _stat *Info;
char* pabBuffer; char* pabBuffer;
int lSize; int lSize;
} FILEDATA; } FILEDATA;
typedef struct tagDEVICE_TYPE_INFO { typedef struct tagDEVICE_TYPE_INFO
{
unsigned char bHerstellerkennung; unsigned char bHerstellerkennung;
unsigned char bDeviceType; unsigned char bDeviceType;
unsigned char bDeviceModel; unsigned char bDeviceModel;
...@@ -1508,8 +1779,10 @@ typedef struct tagDEVICE_TYPE_INFO { ...@@ -1508,8 +1779,10 @@ typedef struct tagDEVICE_TYPE_INFO {
<En> */ <En> */
void closeFile(FILEDATA* ptFile) void closeFile(FILEDATA* ptFile)
{ {
if (ptFile->fd >= 0) { if (ptFile->fd >= 0)
if (ptFile->pabBuffer != NULL) { {
if (ptFile->pabBuffer != NULL)
{
free(ptFile->pabBuffer); free(ptFile->pabBuffer);
} }
close(ptFile->fd); close(ptFile->fd);
...@@ -1539,30 +1812,41 @@ short openFile(const char* fileName, FILEDATA* ptFile) ...@@ -1539,30 +1812,41 @@ short openFile(const char* fileName, FILEDATA* ptFile)
// open the existing file // open the existing file
ptFile->fd = open(fileName, O_RDONLY); ptFile->fd = open(fileName, O_RDONLY);
if (ptFile->fd < 0) { if (ptFile->fd < 0)
{
// File not opend // File not opend
sRet = DRV_USR_FILE_OPEN_FAILED; sRet = DRV_USR_FILE_OPEN_FAILED;
} else { }
else
{
// Get the file size // Get the file size
ptFile->lSize = lseek(ptFile->fd, 0, SEEK_END); ptFile->lSize = lseek(ptFile->fd, 0, SEEK_END);
if (ptFile->lSize <= 0) { if (ptFile->lSize <= 0)
{
// File size is zero // File size is zero
sRet = DRV_USR_FILE_SIZE_ZERO; sRet = DRV_USR_FILE_SIZE_ZERO;
} else { }
else
{
if (lseek(ptFile->fd, 0, SEEK_SET) < 0) if (lseek(ptFile->fd, 0, SEEK_SET) < 0)
sRet = DRV_USR_FILE_READ_FAILED; sRet = DRV_USR_FILE_READ_FAILED;
else { else
{
// Allocate memory for file data // Allocate memory for file data
if ((ptFile->pabBuffer = (char*)malloc(ptFile->lSize)) == NULL) { if ((ptFile->pabBuffer = (char*)malloc(ptFile->lSize)) == NULL)
{
// Error by memory allocation // Error by memory allocation
sRet = DRV_USR_FILE_NO_MEMORY; sRet = DRV_USR_FILE_NO_MEMORY;
closeFile(ptFile); closeFile(ptFile);
} else { }
else
{
// Read file data into memory // Read file data into memory
if ((lNumberOfBytesRead = read(ptFile->fd, // handle of file to read if ((lNumberOfBytesRead = read(
ptFile->fd, // handle of file to read
ptFile->pabBuffer, // address of buffer that receives data ptFile->pabBuffer, // address of buffer that receives data
ptFile->lSize)) ptFile->lSize)) < 0)
< 0) { // number of bytes to read { // number of bytes to read
// File read into memory failed // File read into memory failed
sRet = DRV_USR_FILE_READ_FAILED; sRet = DRV_USR_FILE_READ_FAILED;
closeFile(ptFile); closeFile(ptFile);
...@@ -1586,17 +1870,24 @@ short FreeRecvMailbox(unsigned short usDevNumber) ...@@ -1586,17 +1870,24 @@ short FreeRecvMailbox(unsigned short usDevNumber)
// Read until no msg available // Read until no msg available
usIdx = 0; usIdx = 0;
do { do
if ((sRet = DevGetMBXState(usDevNumber, &usDevState, &usHostState)) {
!= DRV_NO_ERROR) { if ((sRet = DevGetMBXState(usDevNumber, &usDevState, &usHostState)) !=
DRV_NO_ERROR)
{
// Something wrong, end function // Something wrong, end function
break; break;
} else { }
else
{
// Check if message available // Check if message available
if (usHostState == HOST_MBX_FULL) { if (usHostState == HOST_MBX_FULL)
{
// Read message and throw away // Read message and throw away
DevGetMessage(usDevNumber, sizeof(MSG_STRUC), &tRecvMsg, 100L); DevGetMessage(usDevNumber, sizeof(MSG_STRUC), &tRecvMsg, 100L);
} else { }
else
{
break; break;
} }
} }
...@@ -1609,8 +1900,8 @@ short FreeRecvMailbox(unsigned short usDevNumber) ...@@ -1609,8 +1900,8 @@ short FreeRecvMailbox(unsigned short usDevNumber)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Create checksum // Create checksum
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
unsigned short CreateChecksum( unsigned short CreateChecksum(unsigned char* pabData, int lDataLen,
unsigned char* pabData, int lDataLen, MSG_STRUC* ptSendMsg) MSG_STRUC* ptSendMsg)
{ {
int lIdx, lTempLen; int lIdx, lTempLen;
unsigned short usCheckSum, usTemp; unsigned short usCheckSum, usTemp;
...@@ -1623,7 +1914,8 @@ unsigned short CreateChecksum( ...@@ -1623,7 +1914,8 @@ unsigned short CreateChecksum(
pByte = &ptSendMsg->data[3]; pByte = &ptSendMsg->data[3];
// Calculate the Checksum, start with the first message Msg.d[3] up to // Calculate the Checksum, start with the first message Msg.d[3] up to
// Msg.d[64] // Msg.d[64]
for (lIdx = 0; lIdx < 31; lIdx++) { for (lIdx = 0; lIdx < 31; lIdx++)
{
usTemp = (*(pByte + 1)); usTemp = (*(pByte + 1));
usTemp = (unsigned short)((usTemp << 8) | (*pByte)); usTemp = (unsigned short)((usTemp << 8) | (*pByte));
usCheckSum = (unsigned short)(usCheckSum + usTemp); usCheckSum = (unsigned short)(usCheckSum + usTemp);
...@@ -1632,7 +1924,8 @@ unsigned short CreateChecksum( ...@@ -1632,7 +1924,8 @@ unsigned short CreateChecksum(
pByte = &pabData[64]; pByte = &pabData[64];
// Create cheksum for the rest of the file // Create cheksum for the rest of the file
do { do
{
usTemp = (*(pByte + 1)); usTemp = (*(pByte + 1));
usTemp = (unsigned short)((usTemp << 8) | (*pByte)); usTemp = (unsigned short)((usTemp << 8) | (*pByte));
usCheckSum = (unsigned short)(usCheckSum + usTemp); usCheckSum = (unsigned short)(usCheckSum + usTemp);
...@@ -1653,21 +1946,28 @@ short TransferMessage(unsigned short usDevNumber, MSG_STRUC* ptSendMsg, ...@@ -1653,21 +1946,28 @@ short TransferMessage(unsigned short usDevNumber, MSG_STRUC* ptSendMsg,
int lCount = 0; int lCount = 0;
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
if ((sRet = DevPutMessage(usDevNumber, ptSendMsg, TO_SEND_MSG)) if ((sRet = DevPutMessage(usDevNumber, ptSendMsg, TO_SEND_MSG)) ==
== DRV_NO_ERROR) { DRV_NO_ERROR)
do { {
if ((sRet = DevGetMessage( do
usDevNumber, sizeof(MSG_STRUC), ptRecvMsg, lTimeout)) {
== DRV_NO_ERROR) { if ((sRet = DevGetMessage(usDevNumber, sizeof(MSG_STRUC), ptRecvMsg,
lTimeout)) == DRV_NO_ERROR)
{
// Check on message errors // Check on message errors
if ((ptRecvMsg->tx == ptSendMsg->rx) && (ptRecvMsg->rx == ptSendMsg->tx) if ((ptRecvMsg->tx == ptSendMsg->rx) &&
&& (ptRecvMsg->a == ptSendMsg->b) && (ptRecvMsg->b == 0) (ptRecvMsg->rx == ptSendMsg->tx) &&
&& (ptRecvMsg->nr == ptSendMsg->nr)) { (ptRecvMsg->a == ptSendMsg->b) && (ptRecvMsg->b == 0) &&
(ptRecvMsg->nr == ptSendMsg->nr))
{
// Check on message error // Check on message error
if (ptRecvMsg->f != 0) { if (ptRecvMsg->f != 0)
{
sRet = (short)(ptRecvMsg->f + DRV_RCS_ERROR_OFFSET); sRet = (short)(ptRecvMsg->f + DRV_RCS_ERROR_OFFSET);
break; break;
} else { }
else
{
break; break;
} }
} }
...@@ -1692,7 +1992,8 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName) ...@@ -1692,7 +1992,8 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName)
memset(&tSendMsg, 0, sizeof(MSG_STRUC)); memset(&tSendMsg, 0, sizeof(MSG_STRUC));
memset(&tRecvMsg, 0, sizeof(MSG_STRUC)); memset(&tRecvMsg, 0, sizeof(MSG_STRUC));
if ((sRet = FreeRecvMailbox(usDevNumber)) == DRV_NO_ERROR) { if ((sRet = FreeRecvMailbox(usDevNumber)) == DRV_NO_ERROR)
{
// Insert data into message // Insert data into message
tSendMsg.rx = RCS_TASK; tSendMsg.rx = RCS_TASK;
tSendMsg.tx = MSG_SYSTEM_TX; tSendMsg.tx = MSG_SYSTEM_TX;
...@@ -1704,14 +2005,17 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName) ...@@ -1704,14 +2005,17 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName)
tSendMsg.e = 0; tSendMsg.e = 0;
// Insert data // Insert data
tSendMsg.data[0] = MODE_GET_PROJ_WERTE_HW; tSendMsg.data[0] = MODE_GET_PROJ_WERTE_HW;
if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg, TO_SEND_MSG)) if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
== DRV_NO_ERROR) { TO_SEND_MSG)) == DRV_NO_ERROR)
{
// Check entry // Check entry
dwStrLen = strlen(fileName); dwStrLen = strlen(fileName);
pInfo = (DEVICE_TYPE_INFO*)&tRecvMsg.data[0]; pInfo = (DEVICE_TYPE_INFO*)&tRecvMsg.data[0];
if ((pInfo->bHerstellerkennung != (char)(toupper(fileName[dwStrLen - 3]))) if ((pInfo->bHerstellerkennung !=
|| (pInfo->bDeviceType != (char)(toupper(fileName[dwStrLen - 2]))) (char)(toupper(fileName[dwStrLen - 3]))) ||
|| (pInfo->bDeviceModel != (char)(toupper(fileName[dwStrLen - 1])))) { (pInfo->bDeviceType != (char)(toupper(fileName[dwStrLen - 2]))) ||
(pInfo->bDeviceModel != (char)(toupper(fileName[dwStrLen - 1]))))
{
sRet = DRV_USR_INVALID_FILETYPE; sRet = DRV_USR_INVALID_FILETYPE;
} }
} }
...@@ -1732,8 +2036,8 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName) ...@@ -1732,8 +2036,8 @@ short ReadDeviceInformation(unsigned short usDevNumber, const char* fileName)
Return : DRV_NO_ERROR - Download successfully Return : DRV_NO_ERROR - Download successfully
================================================================================= =================================================================================
<En> */ <En> */
short RunFirmwareDownload( short RunFirmwareDownload(unsigned short usDevNumber, FILEDATA* ptFile,
unsigned short usDevNumber, FILEDATA* ptFile, unsigned long* pdwByte) unsigned long* pdwByte)
{ {
int lFileLength, lSendLen, lActIdx; int lFileLength, lSendLen, lActIdx;
unsigned short usCheckSum, usTemp; unsigned short usCheckSum, usTemp;
...@@ -1764,8 +2068,10 @@ short RunFirmwareDownload( ...@@ -1764,8 +2068,10 @@ short RunFirmwareDownload(
dwState = RCS_FIRST_MSK; dwState = RCS_FIRST_MSK;
fRet = TRUE; fRet = TRUE;
// Run download // Run download
do { do
switch (dwState) { {
switch (dwState)
{
//-------------------------- //--------------------------
// Send first message // Send first message
//-------------------------- //--------------------------
...@@ -1799,12 +2105,14 @@ short RunFirmwareDownload( ...@@ -1799,12 +2105,14 @@ short RunFirmwareDownload(
tSendMsg.data[2] = (unsigned char)((usCheckSum >> 8) & 0x00FF); tSendMsg.data[2] = (unsigned char)((usCheckSum >> 8) & 0x00FF);
// Process message // Process message
if ((sRet if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
= TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg, TO_1ST_MSG)) TO_1ST_MSG)) != DRV_NO_ERROR)
!= DRV_NO_ERROR) { {
// Could not process this message // Could not process this message
fRet = FALSE; fRet = FALSE;
} else { }
else
{
// ---------------------------- // ----------------------------
// Message send second message // Message send second message
// ---------------------------- // ----------------------------
...@@ -1826,25 +2134,30 @@ short RunFirmwareDownload( ...@@ -1826,25 +2134,30 @@ short RunFirmwareDownload(
memcpy(&tSendMsg.data[0], &tSendMsg.data[1], 64); memcpy(&tSendMsg.data[0], &tSendMsg.data[1], 64);
// Insert byte 64 to 239 from the abData[64] // Insert byte 64 to 239 from the abData[64]
memcpy( memcpy(&tSendMsg.data[64], &pabData[64],
&tSendMsg.data[64], &pabData[64], (unsigned char)(lSendLen - 64)); (unsigned char)(lSendLen - 64));
// Process message // Process message
if ((sRet = TransferMessage( if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
usDevNumber, &tSendMsg, &tRecvMsg, TO_1ST_MSG)) TO_1ST_MSG)) != DRV_NO_ERROR)
!= DRV_NO_ERROR) { {
// Could not process this message // Could not process this message
fRet = FALSE; fRet = FALSE;
} else { }
else
{
// No error, send next message // No error, send next message
lActIdx += lSendLen; // Add send size to actual index lActIdx += lSendLen; // Add send size to actual index
*pdwByte = lActIdx; *pdwByte = lActIdx;
// Calculate next message length // Calculate next message length
if (lFileLength <= (lSendLen + lActIdx)) { if (lFileLength <= (lSendLen + lActIdx))
{
lSendLen = lFileLength - lActIdx; // Set length to rest of data lSendLen = lFileLength - lActIdx; // Set length to rest of data
dwState = RCS_LAST_MSK; dwState = RCS_LAST_MSK;
} else { }
else
{
dwState = RCS_CONT_MSK; dwState = RCS_CONT_MSK;
} }
} }
...@@ -1862,12 +2175,14 @@ short RunFirmwareDownload( ...@@ -1862,12 +2175,14 @@ short RunFirmwareDownload(
memcpy(&tSendMsg.data[0], &pabData[lActIdx], lSendLen); memcpy(&tSendMsg.data[0], &pabData[lActIdx], lSendLen);
// Process message // Process message
if ((sRet if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
= TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg, TO_CONT_MSG)) TO_CONT_MSG)) != DRV_NO_ERROR)
!= DRV_NO_ERROR) { {
// Could not process this message // Could not process this message
fRet = FALSE; fRet = FALSE;
} else { }
else
{
// printf("(A)===========================flen = %ld, Sndlen = %ld, // printf("(A)===========================flen = %ld, Sndlen = %ld,
// ActIdx = %ld\n", lFileLength, lSendLen, lActIdx); // ActIdx = %ld\n", lFileLength, lSendLen, lActIdx);
// No error, send next message // No error, send next message
...@@ -1875,10 +2190,13 @@ short RunFirmwareDownload( ...@@ -1875,10 +2190,13 @@ short RunFirmwareDownload(
*pdwByte = lActIdx; *pdwByte = lActIdx;
// Calculate next message length // Calculate next message length
if (lFileLength <= (lSendLen + lActIdx)) { if (lFileLength <= (lSendLen + lActIdx))
{
lSendLen = lFileLength - lActIdx; // Set length to rest of data lSendLen = lFileLength - lActIdx; // Set length to rest of data
dwState = RCS_LAST_MSK; dwState = RCS_LAST_MSK;
} else { }
else
{
dwState = RCS_CONT_MSK; dwState = RCS_CONT_MSK;
} }
} }
...@@ -1921,8 +2239,8 @@ short RunFirmwareDownload( ...@@ -1921,8 +2239,8 @@ short RunFirmwareDownload(
Return : DRV_NO_ERROR - Download successfully Return : DRV_NO_ERROR - Download successfully
================================================================================= =================================================================================
<En> */ <En> */
short RunConfigDownload( short RunConfigDownload(unsigned short usDevNumber, FILEDATA* ptFile,
unsigned short usDevNumber, FILEDATA* ptFile, unsigned long* pdwByte) unsigned long* pdwByte)
{ {
unsigned int dwState; unsigned int dwState;
int lSendLen, lActIdx, lOffset, lFileLength; int lSendLen, lActIdx, lOffset, lFileLength;
...@@ -1962,8 +2280,10 @@ short RunConfigDownload( ...@@ -1962,8 +2280,10 @@ short RunConfigDownload(
// Set program state // Set program state
dwState = RCS_FIRST_MSK; dwState = RCS_FIRST_MSK;
fRet = TRUE; fRet = TRUE;
do { do
switch (dwState) { {
switch (dwState)
{
//-------------------------- //--------------------------
// Send first message // Send first message
//-------------------------- //--------------------------
...@@ -1988,12 +2308,14 @@ short RunConfigDownload( ...@@ -1988,12 +2308,14 @@ short RunConfigDownload(
// printf("cifAPI: %ld\n", dwState); // printf("cifAPI: %ld\n", dwState);
// Process message // Process message
if ((sRet if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
= TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg, TO_1ST_MSG)) TO_1ST_MSG)) != DRV_NO_ERROR)
!= DRV_NO_ERROR) { {
// Could not process this message // Could not process this message
fRet = FALSE; fRet = FALSE;
} else { }
else
{
// Set Index for next message, start at offset 44 // Set Index for next message, start at offset 44
lActIdx = 44; lActIdx = 44;
*pdwByte = lActIdx; *pdwByte = lActIdx;
...@@ -2020,20 +2342,25 @@ short RunConfigDownload( ...@@ -2020,20 +2342,25 @@ short RunConfigDownload(
memcpy(&tSendMsg.data[0], &pabData[lActIdx], lSendLen); memcpy(&tSendMsg.data[0], &pabData[lActIdx], lSendLen);
// Process message // Process message
if ((sRet if ((sRet = TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg,
= TransferMessage(usDevNumber, &tSendMsg, &tRecvMsg, TO_CONT_MSG)) TO_CONT_MSG)) != DRV_NO_ERROR)
!= DRV_NO_ERROR) { {
// Could not process this message // Could not process this message
fRet = FALSE; fRet = FALSE;
} else { }
else
{
// No error, send next message // No error, send next message
lActIdx += lSendLen; // Add send size to actual index lActIdx += lSendLen; // Add send size to actual index
*pdwByte = lActIdx; *pdwByte = lActIdx;
// Calculate next message length // Calculate next message length
if (lFileLength <= (lSendLen + lActIdx)) { if (lFileLength <= (lSendLen + lActIdx))
{
lSendLen = lFileLength - lActIdx; // Set length to rest of data lSendLen = lFileLength - lActIdx; // Set length to rest of data
dwState = RCS_LAST_MSK; // Set to last mask dwState = RCS_LAST_MSK; // Set to last mask
} else { }
else
{
// Continue message // Continue message
dwState = RCS_CONT_MSK; dwState = RCS_CONT_MSK;
} }
...@@ -2082,16 +2409,18 @@ short RunConfigDownload( ...@@ -2082,16 +2409,18 @@ short RunConfigDownload(
Return : DRV_NO_ERROR - Download successfully Return : DRV_NO_ERROR - Download successfully
================================================================================= =================================================================================
<En> */ <En> */
short FirmwareDownload( short FirmwareDownload(unsigned short usDevNumber, const char* fileName,
unsigned short usDevNumber, const char* fileName, unsigned long* pdwByte) unsigned long* pdwByte)
{ {
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
FILEDATA tFileData; FILEDATA tFileData;
// Read Device Information // Read Device Information
if ((sRet = ReadDeviceInformation(usDevNumber, fileName)) == DRV_NO_ERROR) { if ((sRet = ReadDeviceInformation(usDevNumber, fileName)) == DRV_NO_ERROR)
{
// Firmware name is OK // Firmware name is OK
if ((sRet = openFile(fileName, &tFileData)) == DRV_NO_ERROR) { if ((sRet = openFile(fileName, &tFileData)) == DRV_NO_ERROR)
{
// Firmware file opened and loaded into RAM // Firmware file opened and loaded into RAM
sRet = RunFirmwareDownload(usDevNumber, &tFileData, pdwByte); sRet = RunFirmwareDownload(usDevNumber, &tFileData, pdwByte);
closeFile(&tFileData); closeFile(&tFileData);
...@@ -2112,13 +2441,14 @@ short FirmwareDownload( ...@@ -2112,13 +2441,14 @@ short FirmwareDownload(
Return : DRV_NO_ERROR - Download successfully Return : DRV_NO_ERROR - Download successfully
================================================================================= =================================================================================
<En> */ <En> */
short ConfigDownload( short ConfigDownload(unsigned short usDevNumber, const char* fileName,
unsigned short usDevNumber, const char* fileName, unsigned long* pdwByte) unsigned long* pdwByte)
{ {
unsigned short sRet = DRV_NO_ERROR; unsigned short sRet = DRV_NO_ERROR;
FILEDATA tFileData; FILEDATA tFileData;
if ((sRet = openFile(fileName, &tFileData)) == DRV_NO_ERROR) { if ((sRet = openFile(fileName, &tFileData)) == DRV_NO_ERROR)
{
// Configuration file opened and loaded into RAM // Configuration file opened and loaded into RAM
sRet = RunConfigDownload(usDevNumber, &tFileData, pdwByte); sRet = RunConfigDownload(usDevNumber, &tFileData, pdwByte);
closeFile(&tFileData); closeFile(&tFileData);
...@@ -2146,17 +2476,26 @@ short DevDownload(unsigned short usDevNumber, unsigned short usMode, ...@@ -2146,17 +2476,26 @@ short DevDownload(unsigned short usDevNumber, unsigned short usMode,
short sRet = DRV_NO_ERROR; short sRet = DRV_NO_ERROR;
// valid handle available, driver is open // valid handle available, driver is open
if (hDevDrv == INVALID_HANDLE_VALUE) { if (hDevDrv == INVALID_HANDLE_VALUE)
{
sRet = DRV_USR_NOT_INITIALIZED; sRet = DRV_USR_NOT_INITIALIZED;
} else if (usDevNumber >= MAX_DEV_BOARDS) { }
else if (usDevNumber >= MAX_DEV_BOARDS)
{
sRet = DRV_USR_DEV_NUMBER_INVALID; sRet = DRV_USR_DEV_NUMBER_INVALID;
} else if ((pdwBytes == NULL) || (pszFileName == NULL) }
|| (pdwBytes == NULL)) { else if ((pdwBytes == NULL) || (pszFileName == NULL) || (pdwBytes == NULL))
{
sRet = DRV_USR_BUF_PTR_NULL; sRet = DRV_USR_BUF_PTR_NULL;
} else if (strlen((const char*)pszFileName) == 0) { }
else if (strlen((const char*)pszFileName) == 0)
{
sRet = DRV_USR_FILENAME_INVALID; sRet = DRV_USR_FILENAME_INVALID;
} else { }
switch (usMode) { else
{
switch (usMode)
{
case FIRMWARE_DOWNLOAD: case FIRMWARE_DOWNLOAD:
sRet = FirmwareDownload(usDevNumber, (const char*)pszFileName, pdwBytes); sRet = FirmwareDownload(usDevNumber, (const char*)pszFileName, pdwBytes);
break; break;
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME DPGDL.C FILE_NAME DPGDL.C
PROJECT_NAME PROFIBUS PROJECT_NAME PROFIBUS
...@@ -54,11 +20,11 @@ MODULE DPGDL ...@@ -54,11 +20,11 @@ MODULE DPGDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.22.0.00.release VERSION 5.45.0.00.release
DATE 26-February-1999 DATE Dezember-2009
STATUS finished STATUS finished
...@@ -103,7 +69,9 @@ LOCAL_DATA ...@@ -103,7 +69,9 @@ LOCAL_DATA
#endif #endif
FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
IN USIGN8 primitive, IN USIGN8 FAR* data_ptr, OUT INT16 FAR* data_len_ptr) IN USIGN8 primitive,
IN USIGN8 FAR* data_ptr,
OUT INT16 FAR* data_len_ptr)
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
/* FUNCTIONAL_DESCRIPTION */ /* FUNCTIONAL_DESCRIPTION */
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
...@@ -116,11 +84,14 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -116,11 +84,14 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
FUNCTION_BODY FUNCTION_BODY
switch (primitive) { switch (primitive)
{
/*--- USER REQUESTS ----------------------------------------------------*/ /*--- USER REQUESTS ----------------------------------------------------*/
case REQ: { case REQ:
switch (service) { {
switch (service)
{
case DP_DATA_TRANSFER: case DP_DATA_TRANSFER:
*data_len_ptr = 0; *data_len_ptr = 0;
break; break;
...@@ -144,15 +115,16 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -144,15 +115,16 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
break; break;
case DP_DOWNLOAD_LOC: case DP_DOWNLOAD_LOC:
case DP_DOWNLOAD: { case DP_DOWNLOAD:
if (((T_DP_DOWNLOAD_REQ FAR*)(data_ptr))->data_len {
> DP_MAX_DOWNLOAD_DATA_LEN) { if (((T_DP_DOWNLOAD_REQ FAR*)(data_ptr))->data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_DOWNLOAD_DATA_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_DOWNLOAD_REQ) *data_len_ptr = sizeof(T_DP_DOWNLOAD_REQ) +
+ ((T_DP_DOWNLOAD_REQ FAR*)(data_ptr))->data_len; ((T_DP_DOWNLOAD_REQ FAR*)(data_ptr))->data_len;
break; break;
} }
...@@ -171,31 +143,33 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -171,31 +143,33 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
break; break;
case DP_SET_PRM: case DP_SET_PRM:
case DP_SET_PRM_LOC: { case DP_SET_PRM_LOC:
{
service_data_len = swap_16_intel_motorola( service_data_len = swap_16_intel_motorola(
((T_DP_SET_PRM_REQ FAR*)(data_ptr))->prm_data.prm_data_len); ((T_DP_SET_PRM_REQ FAR*)(data_ptr))->prm_data.prm_data_len);
if (service_data_len > DP_MAX_PRM_DATA_LEN) { if (service_data_len > DP_MAX_PRM_DATA_LEN)
result = E_IF_INVALID_DATA_SIZE; {
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr *data_len_ptr =
= sizeof(T_DP_SET_PRM_REQ) - sizeof(T_DP_PRM_DATA) + service_data_len; sizeof(T_DP_SET_PRM_REQ) - sizeof(T_DP_PRM_DATA) + service_data_len;
break; break;
} }
case DP_CHK_CFG: { case DP_CHK_CFG:
{
service_data_len = swap_16_intel_motorola( service_data_len = swap_16_intel_motorola(
((T_DP_CHK_CFG_REQ FAR*)(data_ptr))->cfg_data.cfg_data_len); ((T_DP_CHK_CFG_REQ FAR*)(data_ptr))->cfg_data.cfg_data_len);
if (service_data_len > DP_MAX_CFG_DATA_LEN) { if (service_data_len > DP_MAX_CFG_DATA_LEN)
result = E_IF_INVALID_DATA_SIZE; {
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr *data_len_ptr =
= sizeof(T_DP_CHK_CFG_REQ) - sizeof(T_DP_CFG_DATA) + service_data_len; sizeof(T_DP_CHK_CFG_REQ) - sizeof(T_DP_CFG_DATA) + service_data_len;
break; break;
} }
...@@ -212,27 +186,30 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -212,27 +186,30 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
*data_len_ptr = sizeof(T_DP_RD_OUTP_REQ); *data_len_ptr = sizeof(T_DP_RD_OUTP_REQ);
break; break;
case DP_DATA_EXCHANGE: { case DP_DATA_EXCHANGE:
if (((T_DP_DATA_EXCHANGE_REQ FAR*)(data_ptr))->outp_data_len {
> DP_MAX_OUTPUT_DATA_LEN) { if (((T_DP_DATA_EXCHANGE_REQ FAR*)(data_ptr))->outp_data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_OUTPUT_DATA_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_DATA_EXCHANGE_REQ) *data_len_ptr = sizeof(T_DP_DATA_EXCHANGE_REQ) +
+ ((T_DP_DATA_EXCHANGE_REQ FAR*)(data_ptr))->outp_data_len; ((T_DP_DATA_EXCHANGE_REQ FAR*)(data_ptr))->outp_data_len;
break; break;
} }
case DP_SET_SLAVE_ADD: { case DP_SET_SLAVE_ADD:
if (((T_DP_SET_SLAVE_ADD_REQ FAR*)(data_ptr))->rem_slave_data_len {
> DP_MAX_REM_SLAVE_DATA_LEN) { if (((T_DP_SET_SLAVE_ADD_REQ FAR*)(data_ptr))->rem_slave_data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_REM_SLAVE_DATA_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_SET_SLAVE_ADD_REQ) *data_len_ptr =
+ ((T_DP_SET_SLAVE_ADD_REQ FAR*)(data_ptr))->rem_slave_data_len; sizeof(T_DP_SET_SLAVE_ADD_REQ) +
((T_DP_SET_SLAVE_ADD_REQ FAR*)(data_ptr))->rem_slave_data_len;
break; break;
} }
...@@ -249,37 +226,41 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -249,37 +226,41 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
*data_len_ptr = 0; *data_len_ptr = 0;
break; break;
case DP_SET_BUSPARAMETER: { case DP_SET_BUSPARAMETER:
if ((((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len {
> DP_MAX_SET_BUSPARAMETER_LEN) if ((((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len >
|| (((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len DP_MAX_SET_BUSPARAMETER_LEN) ||
< DP_MASTER_USER_DATA_LEN)) { (((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len <
result = E_IF_INVALID_DATA_SIZE; DP_MASTER_USER_DATA_LEN))
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_SET_BUSPARAMETER_REQ) *data_len_ptr =
+ ((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len sizeof(T_DP_SET_BUSPARAMETER_REQ) +
- DP_MASTER_USER_DATA_LEN; ((T_DP_SET_BUSPARAMETER_REQ FAR*)(data_ptr))->master_user_data_len -
DP_MASTER_USER_DATA_LEN;
break; break;
} }
case DP_SET_MASTER_PARAM: { case DP_SET_MASTER_PARAM:
if (((T_DP_SET_MASTER_PARAM_REQ FAR*)(data_ptr))->data_len {
> DP_MAX_TELEGRAM_LEN) { if (((T_DP_SET_MASTER_PARAM_REQ FAR*)(data_ptr))->data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_TELEGRAM_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_SET_MASTER_PARAM_REQ) *data_len_ptr = sizeof(T_DP_SET_MASTER_PARAM_REQ) +
+ ((T_DP_SET_MASTER_PARAM_REQ FAR*)(data_ptr))->data_len; ((T_DP_SET_MASTER_PARAM_REQ FAR*)(data_ptr))->data_len;
break; break;
} }
case DP_INITIATE: case DP_INITIATE:
*data_len_ptr = sizeof(T_DP_INITIATE_REQ) *data_len_ptr =
+ ((T_DP_INITIATE_REQ FAR*)(data_ptr))->add_addr_param.s_len sizeof(T_DP_INITIATE_REQ) +
+ ((T_DP_INITIATE_REQ FAR*)(data_ptr))->add_addr_param.d_len; ((T_DP_INITIATE_REQ FAR*)(data_ptr))->add_addr_param.s_len +
((T_DP_INITIATE_REQ FAR*)(data_ptr))->add_addr_param.d_len;
break; break;
case DP_ABORT: case DP_ABORT:
...@@ -291,17 +272,16 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -291,17 +272,16 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
break; break;
case DP_WRITE: case DP_WRITE:
*data_len_ptr *data_len_ptr =
= sizeof(T_DP_WRITE_REQ) + ((T_DP_WRITE_REQ FAR*)(data_ptr))->length; sizeof(T_DP_WRITE_REQ) + ((T_DP_WRITE_REQ FAR*)(data_ptr))->length;
break; break;
case DP_DATA_TRANSPORT: case DP_DATA_TRANSPORT:
*data_len_ptr = sizeof(T_DP_DATA_TRANSPORT_REQ) *data_len_ptr = sizeof(T_DP_DATA_TRANSPORT_REQ) +
+ ((T_DP_DATA_TRANSPORT_REQ FAR*)(data_ptr))->length; ((T_DP_DATA_TRANSPORT_REQ FAR*)(data_ptr))->length;
break; break;
default: default:
result = E_IF_INVALID_SERVICE;
return (E_IF_INVALID_SERVICE); return (E_IF_INVALID_SERVICE);
} /* switch serivce */ } /* switch serivce */
...@@ -310,8 +290,10 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -310,8 +290,10 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
/*---- USER RESPONSES --------------------------------------------------*/ /*---- USER RESPONSES --------------------------------------------------*/
case RES: { case RES:
switch (service) { {
switch (service)
{
case DP_ACT_PARAM: case DP_ACT_PARAM:
*data_len_ptr = sizeof(T_DP_ACT_PARAM_RES_CON); *data_len_ptr = sizeof(T_DP_ACT_PARAM_RES_CON);
break; break;
...@@ -325,32 +307,33 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -325,32 +307,33 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
*data_len_ptr = sizeof(T_DP_END_SEQ_RES_CON); *data_len_ptr = sizeof(T_DP_END_SEQ_RES_CON);
break; break;
case DP_UPLOAD: { case DP_UPLOAD:
if (((T_DP_UPLOAD_RES_CON FAR*)(data_ptr))->data_len {
> DP_MAX_UPLOAD_DATA_LEN) { if (((T_DP_UPLOAD_RES_CON FAR*)(data_ptr))->data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_UPLOAD_DATA_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_UPLOAD_RES_CON) *data_len_ptr = sizeof(T_DP_UPLOAD_RES_CON) +
+ ((T_DP_UPLOAD_RES_CON FAR*)(data_ptr))->data_len; ((T_DP_UPLOAD_RES_CON FAR*)(data_ptr))->data_len;
break; break;
} }
case DP_GET_MASTER_DIAG: { case DP_GET_MASTER_DIAG:
if (((T_DP_GET_MASTER_DIAG_RES_CON FAR*)(data_ptr))->data_len {
> DP_MAX_TELEGRAM_LEN) { if (((T_DP_GET_MASTER_DIAG_RES_CON FAR*)(data_ptr))->data_len >
result = E_IF_INVALID_DATA_SIZE; DP_MAX_TELEGRAM_LEN)
{
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DP_GET_MASTER_DIAG_RES_CON) *data_len_ptr = sizeof(T_DP_GET_MASTER_DIAG_RES_CON) +
+ ((T_DP_GET_MASTER_DIAG_RES_CON FAR*)(data_ptr))->data_len; ((T_DP_GET_MASTER_DIAG_RES_CON FAR*)(data_ptr))->data_len;
break; break;
} }
default: default:
result = E_IF_INVALID_SERVICE;
return (E_IF_INVALID_SERVICE); return (E_IF_INVALID_SERVICE);
} /* switch serivce */ } /* switch serivce */
...@@ -360,12 +343,9 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -360,12 +343,9 @@ FUNCTION PUBLIC INT16 dpgdl_get_data_len(IN INT16 result, IN USIGN8 service,
/*---- WRONG PRIMITIVE -------------------------------------------------*/ /*---- WRONG PRIMITIVE -------------------------------------------------*/
default: default:
result = E_IF_INVALID_PRIMITIVE;
return (E_IF_INVALID_PRIMITIVE); return (E_IF_INVALID_PRIMITIVE);
} /* switch primitive */ } /* switch primitive */
result = E_OK;
return (E_OK); return (E_OK);
} /* dp_get_data_len */ } /* dp_get_data_len */
......
...@@ -139,7 +139,8 @@ extern "C" { ...@@ -139,7 +139,8 @@ extern "C" {
/* device warm start parameter */ /* device warm start parameter */
/* --------------------------- */ /* --------------------------- */
typedef struct DPM_PLC_PARAMETERtag { typedef struct DPM_PLC_PARAMETERtag
{
unsigned char bMode; /* handshake of process data */ unsigned char bMode; /* handshake of process data */
#define DPM_SET_MODE_BUSSYNC_DEVICE_CONTROLLED 0 #define DPM_SET_MODE_BUSSYNC_DEVICE_CONTROLLED 0
#define DPM_SET_MODE_BUFFERED_DEVICE_CONTROLLED 1 #define DPM_SET_MODE_BUFFERED_DEVICE_CONTROLLED 1
...@@ -157,7 +158,8 @@ typedef struct DPM_PLC_PARAMETERtag { ...@@ -157,7 +158,8 @@ typedef struct DPM_PLC_PARAMETERtag {
bSlStateMethod; /* defines the update method od Sl_State field */ bSlStateMethod; /* defines the update method od Sl_State field */
#define DPM_SL_STATE_NOT_SYCHRONOUS 0 #define DPM_SL_STATE_NOT_SYCHRONOUS 0
#define DPM_SL_STATE_SYCHRONOUS 1 #define DPM_SL_STATE_SYCHRONOUS 1
struct { struct
{
unsigned char biIdentNumberActive : 1; unsigned char biIdentNumberActive : 1;
unsigned char biHighPriorHandshake : 1; unsigned char biHighPriorHandshake : 1;
unsigned char biReserved : 6; unsigned char biReserved : 6;
...@@ -173,9 +175,11 @@ typedef struct DPM_PLC_PARAMETERtag { ...@@ -173,9 +175,11 @@ typedef struct DPM_PLC_PARAMETERtag {
/* parameter data header structure of a slave station, /* parameter data header structure of a slave station,
described in norm EN 50170 page 101 */ described in norm EN 50170 page 101 */
typedef struct DPM_SL_PRM_HEADERtag { typedef struct DPM_SL_PRM_HEADERtag
{
unsigned short usSlaveParaLen; /* length of whole parameter data set */ unsigned short usSlaveParaLen; /* length of whole parameter data set */
struct { struct
{
unsigned char biReserved1 : 1; unsigned char biReserved1 : 1;
unsigned char biExtra_Alarm_SAP : 1; unsigned char biExtra_Alarm_SAP : 1;
unsigned char biDPV1_Data_Types : 1; unsigned char biDPV1_Data_Types : 1;
...@@ -193,7 +197,8 @@ typedef struct DPM_SL_PRM_HEADERtag { ...@@ -193,7 +197,8 @@ typedef struct DPM_SL_PRM_HEADERtag {
unsigned char bDiag_Upd_Delay; unsigned char bDiag_Upd_Delay;
unsigned char bAlarm_Mode; unsigned char bAlarm_Mode;
struct { struct
{
unsigned char biNA_to_Abort : 1; unsigned char biNA_to_Abort : 1;
unsigned char biIgnore_Aclr : 1; unsigned char biIgnore_Aclr : 1;
unsigned char abiReserved : 6; unsigned char abiReserved : 6;
...@@ -207,13 +212,16 @@ typedef struct DPM_SL_PRM_HEADERtag { ...@@ -207,13 +212,16 @@ typedef struct DPM_SL_PRM_HEADERtag {
described in norm EN 50170 page 51 */ described in norm EN 50170 page 51 */
#define MAX_USR_PRM_LEN 237 #define MAX_USR_PRM_LEN 237
typedef struct DPV0_PRMtag { typedef struct DPV0_PRMtag
{
unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN]; /* user parameter data without unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN]; /* user parameter data without
DPV1-bytes */ DPV1-bytes */
} GNUC_PACKED DPV0_PRM; } GNUC_PACKED DPV0_PRM;
typedef struct DPV1_USR_PRMtag { typedef struct DPV1_USR_PRMtag
struct { {
struct
{
unsigned char bReserved1 : 2; unsigned char bReserved1 : 2;
unsigned char bWD_Base_1ms : 1; unsigned char bWD_Base_1ms : 1;
unsigned char bReserved2 : 2; unsigned char bReserved2 : 2;
...@@ -222,7 +230,8 @@ typedef struct DPV1_USR_PRMtag { ...@@ -222,7 +230,8 @@ typedef struct DPV1_USR_PRMtag {
unsigned char bDPV1_Enable : 1; unsigned char bDPV1_Enable : 1;
} GNUC_PACKED DPV1_Status_1; } GNUC_PACKED DPV1_Status_1;
struct { struct
{
unsigned char bRun_On_Cfg_Fault : 1; unsigned char bRun_On_Cfg_Fault : 1;
unsigned char bReserved1 : 1; unsigned char bReserved1 : 1;
unsigned char bEnable_Update_Alarm : 1; unsigned char bEnable_Update_Alarm : 1;
...@@ -233,26 +242,30 @@ typedef struct DPV1_USR_PRMtag { ...@@ -233,26 +242,30 @@ typedef struct DPV1_USR_PRMtag {
unsigned char bEnable_Pull_plug_Alarm : 1; unsigned char bEnable_Pull_plug_Alarm : 1;
} GNUC_PACKED DPV1_Status_2; } GNUC_PACKED DPV1_Status_2;
struct { struct
{
unsigned char bAlarm_Mode : 3; unsigned char bAlarm_Mode : 3;
unsigned char bIsoM_Req : 1; unsigned char bIsoM_Req : 1;
unsigned char bReserved1 : 4; unsigned char bReserved1 : 4;
} GNUC_PACKED DPV1_Status_3; } GNUC_PACKED DPV1_Status_3;
} GNUC_PACKED DPV1_USR_PRM; } GNUC_PACKED DPV1_USR_PRM;
typedef struct DPV1_PRMtag { typedef struct DPV1_PRMtag
{
DPV1_USR_PRM tDpv1; DPV1_USR_PRM tDpv1;
unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN - sizeof(DPV1_USR_PRM)]; unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN - sizeof(DPV1_USR_PRM)];
} GNUC_PACKED DPV1_PRM; } GNUC_PACKED DPV1_PRM;
typedef struct DPV2_HEADERtag { typedef struct DPV2_HEADERtag
{
unsigned char bStructure_Length; unsigned char bStructure_Length;
unsigned char bStructure_Type; unsigned char bStructure_Type;
unsigned char bSlot_Number; unsigned char bSlot_Number;
unsigned char bReserved; unsigned char bReserved;
} GNUC_PACKED DPV2_HEADER; } GNUC_PACKED DPV2_HEADER;
typedef struct DPV2_ISOM_PRMtag { typedef struct DPV2_ISOM_PRMtag
{
DPV2_HEADER tDpv2Header; DPV2_HEADER tDpv2Header;
unsigned char bVersion; unsigned char bVersion;
unsigned long bTBase_Dp; unsigned long bTBase_Dp;
...@@ -266,29 +279,34 @@ typedef struct DPV2_ISOM_PRMtag { ...@@ -266,29 +279,34 @@ typedef struct DPV2_ISOM_PRMtag {
unsigned short bTPll_D; unsigned short bTPll_D;
} GNUC_PACKED DPV2_ISOM_PRM; } GNUC_PACKED DPV2_ISOM_PRM;
typedef struct DPV2_DBX_LINK_FILTERtag { typedef struct DPV2_DBX_LINK_FILTERtag
{
unsigned char bPublisher_Addr; unsigned char bPublisher_Addr;
unsigned char bPublisher_Length; unsigned char bPublisher_Length;
unsigned char bSample_Offset; unsigned char bSample_Offset;
unsigned char bSample_Length; unsigned char bSample_Length;
} GNUC_PACKED DPV2_DBX_LINK_FILTER; } GNUC_PACKED DPV2_DBX_LINK_FILTER;
typedef struct DPV2_DBX_LINKtag { typedef struct DPV2_DBX_LINKtag
{
DPV2_HEADER tDpv2Header; DPV2_HEADER tDpv2Header;
unsigned char bVersion; unsigned char bVersion;
DPV2_DBX_LINK_FILTER tDbxLinkFilter; DPV2_DBX_LINK_FILTER tDbxLinkFilter;
} GNUC_PACKED DPV2_DBX_LINK; } GNUC_PACKED DPV2_DBX_LINK;
typedef struct DPV2_PRMtag { typedef struct DPV2_PRMtag
{
DPV1_USR_PRM tDpv1; DPV1_USR_PRM tDpv1;
DPV2_ISOM_PRM tDpv2Iso; DPV2_ISOM_PRM tDpv2Iso;
unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN - sizeof(DPV1_USR_PRM) unsigned char abUsr_Prm_Data[MAX_USR_PRM_LEN - sizeof(DPV1_USR_PRM) -
- sizeof(DPV2_ISOM_PRM)]; sizeof(DPV2_ISOM_PRM)];
} GNUC_PACKED DPV2_PRM; } GNUC_PACKED DPV2_PRM;
typedef struct DPM_SL_PRM_PRM_DATAtag { typedef struct DPM_SL_PRM_PRM_DATAtag
{
unsigned short usPrmDataLen; /* length of PRM_PRM_DATA */ unsigned short usPrmDataLen; /* length of PRM_PRM_DATA */
struct { struct
{
unsigned char bReserved : 3; unsigned char bReserved : 3;
unsigned char bWD_On : 1; unsigned char bWD_On : 1;
unsigned char bFreeze_Req : 1; unsigned char bFreeze_Req : 1;
...@@ -315,7 +333,8 @@ typedef struct DPM_SL_PRM_PRM_DATAtag { ...@@ -315,7 +333,8 @@ typedef struct DPM_SL_PRM_PRM_DATAtag {
described in norm EN 50170 page 55 */ described in norm EN 50170 page 55 */
#define MAX_CFG_DATA_LEN 244 #define MAX_CFG_DATA_LEN 244
typedef struct DPM_SL_PRM_CFG_DATAtag { typedef struct DPM_SL_PRM_CFG_DATAtag
{
unsigned short usCfg_Data_Len; /* length of CFG_DATA */ unsigned short usCfg_Data_Len; /* length of CFG_DATA */
unsigned char abCfg_Data[MAX_CFG_DATA_LEN]; /* configuration data of the unsigned char abCfg_Data[MAX_CFG_DATA_LEN]; /* configuration data of the
slave station */ slave station */
...@@ -325,7 +344,8 @@ typedef struct DPM_SL_PRM_CFG_DATAtag { ...@@ -325,7 +344,8 @@ typedef struct DPM_SL_PRM_CFG_DATAtag {
described in norm EN 50170 page 103 */ described in norm EN 50170 page 103 */
#define MAX_EA_OFFSET_LEN 244 #define MAX_EA_OFFSET_LEN 244
typedef struct DPM_SL_PRM_ADD_TABtag { typedef struct DPM_SL_PRM_ADD_TABtag
{
unsigned short usAdd_Tab_Len; /* length of ADD_TAB */ unsigned short usAdd_Tab_Len; /* length of ADD_TAB */
unsigned char bInput_Count; /* counter of following input offsets */ unsigned char bInput_Count; /* counter of following input offsets */
unsigned char bOutput_Count; /* counter of following ouput offsets */ unsigned char bOutput_Count; /* counter of following ouput offsets */
...@@ -337,7 +357,8 @@ typedef struct DPM_SL_PRM_ADD_TABtag { ...@@ -337,7 +357,8 @@ typedef struct DPM_SL_PRM_ADD_TABtag {
described in norm EN 50170 page 103 */ described in norm EN 50170 page 103 */
#define MAX_SL_PRM_LEN 100 #define MAX_SL_PRM_LEN 100
typedef struct DPM_SL_PRM_USR_DATAtag { typedef struct DPM_SL_PRM_USR_DATAtag
{
unsigned short usSlave_Usr_Data_Len; /* length of USR_DATA */ unsigned short usSlave_Usr_Data_Len; /* length of USR_DATA */
unsigned char abSlave_Usr_Data[MAX_SL_PRM_LEN]; /* user paramteres */ unsigned char abSlave_Usr_Data[MAX_SL_PRM_LEN]; /* user paramteres */
} GNUC_PACKED DPM_SL_PRM_USR_DATA; } GNUC_PACKED DPM_SL_PRM_USR_DATA;
...@@ -348,7 +369,8 @@ typedef struct DPM_SL_PRM_USR_DATAtag { ...@@ -348,7 +369,8 @@ typedef struct DPM_SL_PRM_USR_DATAtag {
/* master parameter 'DPM_Bus_Dp' data set /* master parameter 'DPM_Bus_Dp' data set
described in norm DIN 19245-T3 page 98 */ described in norm DIN 19245-T3 page 98 */
typedef struct DPM_BUS_DPtag { typedef struct DPM_BUS_DPtag
{
unsigned short usBus_Para_Len; /* length of BUS_DP */ unsigned short usBus_Para_Len; /* length of BUS_DP */
unsigned char bFDL_Add; /* master address */ unsigned char bFDL_Add; /* master address */
unsigned char bBaudrate; /* baudrate, see. #defines */ unsigned char bBaudrate; /* baudrate, see. #defines */
...@@ -373,7 +395,8 @@ typedef struct DPM_BUS_DPtag { ...@@ -373,7 +395,8 @@ typedef struct DPM_BUS_DPtag {
unsigned char bG; /* gap update */ unsigned char bG; /* gap update */
unsigned char bHSA; /* highest active station address */ unsigned char bHSA; /* highest active station address */
unsigned char bMax_Retry_Limit; /* retries if error occurs */ unsigned char bMax_Retry_Limit; /* retries if error occurs */
struct { struct
{
unsigned char bReserved : 7; unsigned char bReserved : 7;
unsigned char bError_Action_Flag : 1; unsigned char bError_Action_Flag : 1;
} GNUC_PACKED Bp_Flag; /* auto_clear on/off */ } GNUC_PACKED Bp_Flag; /* auto_clear on/off */
...@@ -392,8 +415,10 @@ typedef struct DPM_BUS_DPtag { ...@@ -392,8 +415,10 @@ typedef struct DPM_BUS_DPtag {
#define MAX_EXT_DIAG_LEN 100 #define MAX_EXT_DIAG_LEN 100
/* slave specific diagnostic structure /* slave specific diagnostic structure
described in norm DIN 19245-T3 page 41 */ described in norm DIN 19245-T3 page 41 */
typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag { typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag
struct { {
struct
{
unsigned char bStation_Non_Existent : 1; /* no response */ unsigned char bStation_Non_Existent : 1; /* no response */
unsigned char bStation_Not_Ready : 1; /* station not ready */ unsigned char bStation_Not_Ready : 1; /* station not ready */
unsigned char bCfg_Fault : 1; /* configuration fault */ unsigned char bCfg_Fault : 1; /* configuration fault */
...@@ -405,7 +430,8 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag { ...@@ -405,7 +430,8 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag {
unsigned char bMaster_Lock : 1; /* locked by a master */ unsigned char bMaster_Lock : 1; /* locked by a master */
} GNUC_PACKED Stationstatus_1; } GNUC_PACKED Stationstatus_1;
struct { struct
{
unsigned char bPrm_Req : 1; /* request new parameters */ unsigned char bPrm_Req : 1; /* request new parameters */
unsigned char bStat_Diag : 1; /* static diagnostic */ unsigned char bStat_Diag : 1; /* static diagnostic */
unsigned char bTrue : 1; /* set to 1 by a slave */ unsigned char bTrue : 1; /* set to 1 by a slave */
...@@ -417,7 +443,8 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag { ...@@ -417,7 +443,8 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag {
unsigned char bDeactivated : 1; /* slave deactivated */ unsigned char bDeactivated : 1; /* slave deactivated */
} GNUC_PACKED Stationstatus_2; } GNUC_PACKED Stationstatus_2;
struct { struct
{
unsigned char bReserved : 7; unsigned char bReserved : 7;
unsigned char bExt_Diag_Overflow : 1; /* ext. diagnostic overflow */ unsigned char bExt_Diag_Overflow : 1; /* ext. diagnostic overflow */
} GNUC_PACKED Stationstatus_3; } GNUC_PACKED Stationstatus_3;
...@@ -434,9 +461,11 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag { ...@@ -434,9 +461,11 @@ typedef struct DPM_SLAVE_SINGLE_DIAGNOTICStag {
/* Protocol master state structure */ /* Protocol master state structure */
/* ======================================================================== */ /* ======================================================================== */
typedef struct DPM_DIAGNOSTICStag { typedef struct DPM_DIAGNOSTICStag
{
/* unsigned char field to show bus and master main errors */ /* unsigned char field to show bus and master main errors */
struct { struct
{
unsigned char bCtrl : 1; /* wrong parameterization */ unsigned char bCtrl : 1; /* wrong parameterization */
unsigned char bAClr : 1; /* auto_clear activated */ unsigned char bAClr : 1; /* auto_clear activated */
unsigned char bNonExch : 1; /* no data exchange to at least on station */ unsigned char bNonExch : 1; /* no data exchange to at least on station */
...@@ -455,7 +484,8 @@ typedef struct DPM_DIAGNOSTICStag { ...@@ -455,7 +484,8 @@ typedef struct DPM_DIAGNOSTICStag {
#define OPERATE 0xC0 #define OPERATE 0xC0
/* location of error and error code */ /* location of error and error code */
struct { struct
{
unsigned char bErr_Rem_Adr; /* 0-125, 255 */ unsigned char bErr_Rem_Adr; /* 0-125, 255 */
#define MST_ERR 0xFF #define MST_ERR 0xFF
...@@ -511,19 +541,22 @@ typedef struct DPM_DIAGNOSTICStag { ...@@ -511,19 +541,22 @@ typedef struct DPM_DIAGNOSTICStag {
#define UNDEFINED 1 #define UNDEFINED 1
typedef struct { typedef struct
{
unsigned char abNetwork_Address[6]; /* network address according ISO/OSI */ unsigned char abNetwork_Address[6]; /* network address according ISO/OSI */
unsigned char abMAC_Address[UNDEFINED]; /* MAC_Address */ unsigned char abMAC_Address[UNDEFINED]; /* MAC_Address */
} GNUC_PACKED ADDR_EXTENTION; } GNUC_PACKED ADDR_EXTENTION;
typedef struct { typedef struct
{
unsigned char bAPI; /* application process instance */ unsigned char bAPI; /* application process instance */
unsigned char bSCL; /* access level */ unsigned char bSCL; /* access level */
} GNUC_PACKED ADDR; } GNUC_PACKED ADDR;
#define MAX_ADD_TABLE_LEN 235 #define MAX_ADD_TABLE_LEN 235
typedef struct { typedef struct
{
#define TYPE_EXT_OFF 0 /* no optional Network/MAC address */ #define TYPE_EXT_OFF 0 /* no optional Network/MAC address */
#define TYPE_EXT_ON 1 /* optional Network/MAC address available */ #define TYPE_EXT_ON 1 /* optional Network/MAC address available */
...@@ -536,15 +569,18 @@ typedef struct { ...@@ -536,15 +569,18 @@ typedef struct {
} GNUC_PACKED ADD_ADDR_PARAM; } GNUC_PACKED ADD_ADDR_PARAM;
typedef struct { typedef struct
{
unsigned short usSend_Timeout; /* control time for supervision */ unsigned short usSend_Timeout; /* control time for supervision */
struct { struct
{
unsigned char biDPV1_RW : 1; /* support of MSAC2_READ and WRITE */ unsigned char biDPV1_RW : 1; /* support of MSAC2_READ and WRITE */
unsigned char abiReserved : 7; unsigned char abiReserved : 7;
} GNUC_PACKED bFeatures_Supported_1; } GNUC_PACKED bFeatures_Supported_1;
struct { struct
{
unsigned char abiReserved : 8; unsigned char abiReserved : 8;
} GNUC_PACKED bFeatures_Supported_2; } GNUC_PACKED bFeatures_Supported_2;
...@@ -556,13 +592,16 @@ typedef struct { ...@@ -556,13 +592,16 @@ typedef struct {
ADD_ADDR_PARAM tAdd_Addr_Param; ADD_ADDR_PARAM tAdd_Addr_Param;
} GNUC_PACKED DPM_MSAC2M_INITIATE_REQ; } GNUC_PACKED DPM_MSAC2M_INITIATE_REQ;
typedef struct { typedef struct
struct { {
struct
{
unsigned char biDPV1_RW : 1; /* support of MSAC2_READ and WRITE */ unsigned char biDPV1_RW : 1; /* support of MSAC2_READ and WRITE */
unsigned char abiReserved : 7; unsigned char abiReserved : 7;
} GNUC_PACKED bFeatures_Supported_1; } GNUC_PACKED bFeatures_Supported_1;
struct { struct
{
unsigned char abiReserved : 8; unsigned char abiReserved : 8;
} GNUC_PACKED bFeatures_Supported_2; } GNUC_PACKED bFeatures_Supported_2;
...@@ -627,7 +666,8 @@ typedef struct { ...@@ -627,7 +666,8 @@ typedef struct {
/* message command msg.b msg.a */ /* message command msg.b msg.a */
#define DDLM_Slave_Diag 0x42 #define DDLM_Slave_Diag 0x42
typedef struct DDLM_SLAVE_DIAG_CONFIRMtag { typedef struct DDLM_SLAVE_DIAG_CONFIRMtag
{
DPM_SLAVE_SINGLE_DIAGNOSTICS tDiagData; DPM_SLAVE_SINGLE_DIAGNOSTICS tDiagData;
} GNUC_PACKED DDLM_SLAVE_DIAG_CONFIRM; } GNUC_PACKED DDLM_SLAVE_DIAG_CONFIRM;
...@@ -638,12 +678,14 @@ typedef struct DDLM_SLAVE_DIAG_CONFIRMtag { ...@@ -638,12 +678,14 @@ typedef struct DDLM_SLAVE_DIAG_CONFIRMtag {
/* message command msg.b msg.a */ /* message command msg.b msg.a */
#define DDLM_Set_Prm 0x4a #define DDLM_Set_Prm 0x4a
typedef struct DDLM_SET_PRM_REQUESTtag { typedef struct DDLM_SET_PRM_REQUESTtag
{
unsigned char bRem_Add; unsigned char bRem_Add;
unsigned char abUsr_Prm_Data[DPM_MAX_LEN_DATA_UNIT]; unsigned char abUsr_Prm_Data[DPM_MAX_LEN_DATA_UNIT];
} GNUC_PACKED DDLM_SET_PRM_REQUEST; } GNUC_PACKED DDLM_SET_PRM_REQUEST;
typedef struct DDLM_SET_PRM_CONFIRMtag { typedef struct DDLM_SET_PRM_CONFIRMtag
{
unsigned char bRem_Add; unsigned char bRem_Add;
} GNUC_PACKED DDLM_SET_PRM_CONFIRM; } GNUC_PACKED DDLM_SET_PRM_CONFIRM;
...@@ -661,13 +703,15 @@ typedef struct DDLM_SET_PRM_CONFIRMtag { ...@@ -661,13 +703,15 @@ typedef struct DDLM_SET_PRM_CONFIRMtag {
/* message command msg.b msg.a */ /* message command msg.b msg.a */
#define DDLM_Start_Seq 0x43 #define DDLM_Start_Seq 0x43
typedef struct DDLM_START_SEQ_REQUESTtag { typedef struct DDLM_START_SEQ_REQUESTtag
{
unsigned char bReq_Add; /* 0 */ unsigned char bReq_Add; /* 0 */
unsigned char bArea_Code; /* 0 - 125 */ unsigned char bArea_Code; /* 0 - 125 */
unsigned short usTimeout; /* 0 - 65535 */ unsigned short usTimeout; /* 0 - 65535 */
} GNUC_PACKED DDLM_START_SEQ_REQUEST; } GNUC_PACKED DDLM_START_SEQ_REQUEST;
typedef struct DDLM_START_SEQ_CONFIRMtag { typedef struct DDLM_START_SEQ_CONFIRMtag
{
unsigned char bMax_Len_Data_Unit; /* 240 */ unsigned char bMax_Len_Data_Unit; /* 240 */
} GNUC_PACKED DDLM_START_SEQ_CONFIRM; } GNUC_PACKED DDLM_START_SEQ_CONFIRM;
...@@ -680,7 +724,8 @@ typedef struct DDLM_START_SEQ_CONFIRMtag { ...@@ -680,7 +724,8 @@ typedef struct DDLM_START_SEQ_CONFIRMtag {
#define DPM_DEVICE_PRM 127 #define DPM_DEVICE_PRM 127
/* message data structure */ /* message data structure */
typedef struct DDLM_DOWNLOAD_REQUESTtag { typedef struct DDLM_DOWNLOAD_REQUESTtag
{
unsigned char bReq_Add; /* 0 */ unsigned char bReq_Add; /* 0 */
unsigned char bArea_Code; /* 0 - 125, 127 */ unsigned char bArea_Code; /* 0 - 125, 127 */
unsigned short usAdd_Offset; /* 0 - 760 */ unsigned short usAdd_Offset; /* 0 - 760 */
...@@ -695,7 +740,8 @@ typedef struct DDLM_DOWNLOAD_REQUESTtag { ...@@ -695,7 +740,8 @@ typedef struct DDLM_DOWNLOAD_REQUESTtag {
#define DDLM_Upload 0x50 #define DDLM_Upload 0x50
/* message data structure */ /* message data structure */
typedef struct DDLM_UPLOAD_REQUESTtag { typedef struct DDLM_UPLOAD_REQUESTtag
{
unsigned char bReq_Add; /* 0 */ unsigned char bReq_Add; /* 0 */
unsigned char bArea_Code; /* 0 - 125, 127 */ unsigned char bArea_Code; /* 0 - 125, 127 */
unsigned short usAdd_Offset; /* 0 - 760 */ unsigned short usAdd_Offset; /* 0 - 760 */
...@@ -710,7 +756,8 @@ typedef struct DDLM_UPLOAD_REQUESTtag { ...@@ -710,7 +756,8 @@ typedef struct DDLM_UPLOAD_REQUESTtag {
#define DDLM_End_Seq 0x45 #define DDLM_End_Seq 0x45
/* message data structure */ /* message data structure */
typedef struct DDLM_END_SEQ_REQUESTtag { typedef struct DDLM_END_SEQ_REQUESTtag
{
unsigned char bReq_Add; /* 0 */ unsigned char bReq_Add; /* 0 */
} GNUC_PACKED DDLM_END_SEQ_REQUEST; } GNUC_PACKED DDLM_END_SEQ_REQUEST;
...@@ -722,7 +769,8 @@ typedef struct DDLM_END_SEQ_REQUESTtag { ...@@ -722,7 +769,8 @@ typedef struct DDLM_END_SEQ_REQUESTtag {
#define DDLM_Global_Control 0x46 #define DDLM_Global_Control 0x46
/* message data structure */ /* message data structure */
typedef struct DDLM_GLOBAL_CONTROL_REQUESTtag { typedef struct DDLM_GLOBAL_CONTROL_REQUESTtag
{
unsigned char bRem_Add; /* 0 - 127 */ unsigned char bRem_Add; /* 0 - 127 */
unsigned char bControl_Command; unsigned char bControl_Command;
#define CLEAR_DATA 0x02 #define CLEAR_DATA 0x02
...@@ -734,7 +782,8 @@ typedef struct DDLM_GLOBAL_CONTROL_REQUESTtag { ...@@ -734,7 +782,8 @@ typedef struct DDLM_GLOBAL_CONTROL_REQUESTtag {
unsigned char bGroup_Select; unsigned char bGroup_Select;
} GNUC_PACKED DDLM_GLOBAL_CONTROL_REQUEST; } GNUC_PACKED DDLM_GLOBAL_CONTROL_REQUEST;
typedef struct DDLM_GLOBAL_CONTROL_CONFIRMtag { typedef struct DDLM_GLOBAL_CONTROL_CONFIRMtag
{
unsigned char bRem_Add; /* 0 - 127 */ unsigned char bRem_Add; /* 0 - 127 */
} GNUC_PACKED DDLM_GLOBAL_CONTROL_CONFIRM; } GNUC_PACKED DDLM_GLOBAL_CONTROL_CONFIRM;
...@@ -773,12 +822,14 @@ typedef struct DDLM_GLOBAL_CONTROL_CONFIRMtag { ...@@ -773,12 +822,14 @@ typedef struct DDLM_GLOBAL_CONTROL_CONFIRMtag {
#define DATA_STU_SIZE 244 #define DATA_STU_SIZE 244
typedef struct octet_strtag { typedef struct octet_strtag
{
unsigned char bLen; /* length of data field 0 to 244 */ unsigned char bLen; /* length of data field 0 to 244 */
unsigned char bValue[DATA_STU_SIZE]; /* data field */ unsigned char bValue[DATA_STU_SIZE]; /* data field */
} GNUC_PACKED octet_str; } GNUC_PACKED octet_str;
typedef struct FDL_DATA_ACK_REQ_STUtag { typedef struct FDL_DATA_ACK_REQ_STUtag
{
unsigned char bSsap; /* Src.Serv.Acc.Point0-62,255 */ unsigned char bSsap; /* Src.Serv.Acc.Point0-62,255 */
unsigned char bDsap; /* Dest.Serv.Acc.Point0-63,255 */ unsigned char bDsap; /* Dest.Serv.Acc.Point0-63,255 */
unsigned char bRem_add_da; /* Remote Address 0-126 */ unsigned char bRem_add_da; /* Remote Address 0-126 */
...@@ -786,7 +837,8 @@ typedef struct FDL_DATA_ACK_REQ_STUtag { ...@@ -786,7 +837,8 @@ typedef struct FDL_DATA_ACK_REQ_STUtag {
octet_str tL_sdu; /* data field structure */ octet_str tL_sdu; /* data field structure */
} GNUC_PACKED FDL_DATA_ACK_REQ_STU; } GNUC_PACKED FDL_DATA_ACK_REQ_STU;
typedef struct FDL_DATA_ACK_IND_STUtag { typedef struct FDL_DATA_ACK_IND_STUtag
{
unsigned char bDsap; /* Dest.Serv.Acc.Point0-63,255 */ unsigned char bDsap; /* Dest.Serv.Acc.Point0-63,255 */
unsigned char bSsap; /* Src.Serv.Acc.Point0-62,255 */ unsigned char bSsap; /* Src.Serv.Acc.Point0-62,255 */
unsigned char bRem_add_da; /* Remote Address 0-126 */ unsigned char bRem_add_da; /* Remote Address 0-126 */
...@@ -810,7 +862,8 @@ typedef struct FDL_DATA_ACK_IND_STUtag { ...@@ -810,7 +862,8 @@ typedef struct FDL_DATA_ACK_IND_STUtag {
#define FDL_Send_Data_Reply_Con 0x82 #define FDL_Send_Data_Reply_Con 0x82
#define FDL_Send_Data_Reply_Ind 0xC2 #define FDL_Send_Data_Reply_Ind 0xC2
typedef struct FDL_DATA_REPLY_REQ_STUtag { typedef struct FDL_DATA_REPLY_REQ_STUtag
{
unsigned char bSsap; /* Source Service Access Point 0 to 126 */ unsigned char bSsap; /* Source Service Access Point 0 to 126 */
unsigned char bDsap; /* Destination Service Access Point 0 to 127 */ unsigned char bDsap; /* Destination Service Access Point 0 to 127 */
unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */ unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */
...@@ -818,7 +871,8 @@ typedef struct FDL_DATA_REPLY_REQ_STUtag { ...@@ -818,7 +871,8 @@ typedef struct FDL_DATA_REPLY_REQ_STUtag {
octet_str tL_sdu; /* data field structure */ octet_str tL_sdu; /* data field structure */
} GNUC_PACKED FDL_DATA_REPLY_REQ_STU; } GNUC_PACKED FDL_DATA_REPLY_REQ_STU;
typedef struct FDL_DATA_REPLY_CON_STUtag { typedef struct FDL_DATA_REPLY_CON_STUtag
{
unsigned char bSsap; /* Source Service Access Point 0 to 126 */ unsigned char bSsap; /* Source Service Access Point 0 to 126 */
unsigned char bDsap; /* Destination Service Access Point 0 to 127 */ unsigned char bDsap; /* Destination Service Access Point 0 to 127 */
unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */ unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */
...@@ -827,7 +881,8 @@ typedef struct FDL_DATA_REPLY_CON_STUtag { ...@@ -827,7 +881,8 @@ typedef struct FDL_DATA_REPLY_CON_STUtag {
octet_str tL_sdu; /* data field structure */ octet_str tL_sdu; /* data field structure */
} GNUC_PACKED FDL_DATA_REPLY_CON_STU; } GNUC_PACKED FDL_DATA_REPLY_CON_STU;
typedef struct FDL_DATA_REPLY_IND_STUtag { typedef struct FDL_DATA_REPLY_IND_STUtag
{
unsigned char bDsap; /* Destination Service Access Point 0 to 127 */ unsigned char bDsap; /* Destination Service Access Point 0 to 127 */
unsigned char bSsap; /* Source Service Access Point 0 to 126 */ unsigned char bSsap; /* Source Service Access Point 0 to 126 */
unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */ unsigned char bRem_add_da; /* Remote Address in PROFIBUS 0 to 127 */
...@@ -848,7 +903,8 @@ typedef struct FDL_DATA_REPLY_IND_STUtag { ...@@ -848,7 +903,8 @@ typedef struct FDL_DATA_REPLY_IND_STUtag {
#define FDL_Reply_Update_Req 0x83 #define FDL_Reply_Update_Req 0x83
typedef struct FDL_REPLY_UPDATE_REQ_STUtag { typedef struct FDL_REPLY_UPDATE_REQ_STUtag
{
unsigned char bSsap; /* Src.Serv.Acc.Point 0-62 */ unsigned char bSsap; /* Src.Serv.Acc.Point 0-62 */
unsigned char bDsap; /* not used */ unsigned char bDsap; /* not used */
unsigned char bRem_add_da; /* not used */ unsigned char bRem_add_da; /* not used */
...@@ -857,7 +913,8 @@ typedef struct FDL_REPLY_UPDATE_REQ_STUtag { ...@@ -857,7 +913,8 @@ typedef struct FDL_REPLY_UPDATE_REQ_STUtag {
octet_str tL_sdu; /* data field structure */ octet_str tL_sdu; /* data field structure */
} GNUC_PACKED FDL_REPLY_UPDATE_REQ_STU; } GNUC_PACKED FDL_REPLY_UPDATE_REQ_STU;
typedef struct FDL_REPLY_UPDATE_CON_STUtag { typedef struct FDL_REPLY_UPDATE_CON_STUtag
{
unsigned char bSsap; /* Src.Serv.Acc.Point 0-62 */ unsigned char bSsap; /* Src.Serv.Acc.Point 0-62 */
unsigned char bDsap; /* Dest.Serv.Acc.Point 0-63 */ unsigned char bDsap; /* Dest.Serv.Acc.Point 0-63 */
unsigned char bRem_add_da; /* Remote Address 0-126 */ unsigned char bRem_add_da; /* Remote Address 0-126 */
...@@ -872,7 +929,8 @@ typedef struct FDL_REPLY_UPDATE_CON_STUtag { ...@@ -872,7 +929,8 @@ typedef struct FDL_REPLY_UPDATE_CON_STUtag {
#define FDL_SSap_Activate_req 0x97 #define FDL_SSap_Activate_req 0x97
#define FDL_SSap_Activate_con 0x97 #define FDL_SSap_Activate_con 0x97
typedef struct FDL_SAP_ACTIVATE_REQ_STUtag { typedef struct FDL_SAP_ACTIVATE_REQ_STUtag
{
unsigned char bSsap; /* Source Service Access Point 0-63,65 */ unsigned char bSsap; /* Source Service Access Point 0-63,65 */
unsigned char bAccess; /* Accessright = 255 */ unsigned char bAccess; /* Accessright = 255 */
unsigned char bService_list_length; /* Length of followed list = 4 */ unsigned char bService_list_length; /* Length of followed list = 4 */
...@@ -889,7 +947,8 @@ typedef struct FDL_SAP_ACTIVATE_REQ_STUtag { ...@@ -889,7 +947,8 @@ typedef struct FDL_SAP_ACTIVATE_REQ_STUtag {
unsigned char abRole_in_service[4]; /* Configuration for the service */ unsigned char abRole_in_service[4]; /* Configuration for the service */
struct { struct
{
unsigned char bReq_low; /* Maximum length of buffer = 240 */ unsigned char bReq_low; /* Maximum length of buffer = 240 */
unsigned char bReq_high; /* Maximum length of buffer = 240 */ unsigned char bReq_high; /* Maximum length of buffer = 240 */
unsigned char bInd_low; /* Maximum length of buffer = 240 */ unsigned char bInd_low; /* Maximum length of buffer = 240 */
...@@ -898,7 +957,8 @@ typedef struct FDL_SAP_ACTIVATE_REQ_STUtag { ...@@ -898,7 +957,8 @@ typedef struct FDL_SAP_ACTIVATE_REQ_STUtag {
} GNUC_PACKED FDL_SAP_ACTIVATE_REQ_STU; } GNUC_PACKED FDL_SAP_ACTIVATE_REQ_STU;
typedef struct FDL_SAP_ACTIVATE_CON_STUtag { typedef struct FDL_SAP_ACTIVATE_CON_STUtag
{
unsigned char bSsap; /* Src. Service Access Pnt */ unsigned char bSsap; /* Src. Service Access Pnt */
unsigned char bM_status; unsigned char bM_status;
} GNUC_PACKED FDL_SAP_ACTIVATE_CON_STU; } GNUC_PACKED FDL_SAP_ACTIVATE_CON_STU;
...@@ -910,7 +970,8 @@ typedef struct FDL_SAP_ACTIVATE_CON_STUtag { ...@@ -910,7 +970,8 @@ typedef struct FDL_SAP_ACTIVATE_CON_STUtag {
#define FDL_RSap_Activate_Req 0x98 #define FDL_RSap_Activate_Req 0x98
#define FDL_RSap_Activate_Con 0x98 #define FDL_RSap_Activate_Con 0x98
typedef struct FDL_RSAP_ACTIVATE_REQ_STUtag { typedef struct FDL_RSAP_ACTIVATE_REQ_STUtag
{
unsigned char bSsap; /* Source Service Access Point 0-63,65 */ unsigned char bSsap; /* Source Service Access Point 0-63,65 */
unsigned char bAccess; /* Accessright = 255 */ unsigned char bAccess; /* Accessright = 255 */
unsigned char bIndication_mode; unsigned char bIndication_mode;
...@@ -922,7 +983,8 @@ typedef struct FDL_RSAP_ACTIVATE_REQ_STUtag { ...@@ -922,7 +983,8 @@ typedef struct FDL_RSAP_ACTIVATE_REQ_STUtag {
} GNUC_PACKED FDL_RSAP_ACTIVATE_REQ_STU; } GNUC_PACKED FDL_RSAP_ACTIVATE_REQ_STU;
typedef struct FDL_RSAP_ACTIVATE_CON_STUtag { typedef struct FDL_RSAP_ACTIVATE_CON_STUtag
{
unsigned char bSsap; /* Src. Service Access Pnt */ unsigned char bSsap; /* Src. Service Access Pnt */
unsigned char bM_status; unsigned char bM_status;
} GNUC_PACKED FDL_RSAP_ACTIVATE_CON_STU; } GNUC_PACKED FDL_RSAP_ACTIVATE_CON_STU;
...@@ -934,11 +996,13 @@ typedef struct FDL_RSAP_ACTIVATE_CON_STUtag { ...@@ -934,11 +996,13 @@ typedef struct FDL_RSAP_ACTIVATE_CON_STUtag {
#define FDL_Sap_Deactivate_Req 0x9A #define FDL_Sap_Deactivate_Req 0x9A
#define FDL_Sap_Deactivate_Con 0x9A #define FDL_Sap_Deactivate_Con 0x9A
typedef struct { typedef struct
{
unsigned char bSsap; /* Source Serv. Access Pnt 0-63,255 */ unsigned char bSsap; /* Source Serv. Access Pnt 0-63,255 */
} GNUC_PACKED FDL_SAP_DEACTIVATE_REQ_STU; } GNUC_PACKED FDL_SAP_DEACTIVATE_REQ_STU;
typedef struct { typedef struct
{
unsigned char bSsap; /* Src. Service Access Pnt 0-63,255 */ unsigned char bSsap; /* Src. Service Access Pnt 0-63,255 */
unsigned char bM_status; unsigned char bM_status;
} GNUC_PACKED FDL_SAP_DEACTIVATE_CON_STU; } GNUC_PACKED FDL_SAP_DEACTIVATE_CON_STU;
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1998-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME DPSGDL.C FILE_NAME DPSGDL.C
...@@ -55,12 +20,12 @@ MODULE DPSGDL ...@@ -55,12 +20,12 @@ MODULE DPSGDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 1.20.0.00.release (DP-Slave Stand-Alone for DOS) VERSION 1.30.0.00.release (DP-Slave Stand-Alone for DOS)
5.22.0.00.release (WIN95/WIN98 and WinNT) 5.22.0.00.release (WIN95/WIN98 and WinNT)
DATE 26-February-1999 DATE February-1999
STATUS finished STATUS finished
...@@ -107,7 +72,9 @@ LOCAL_DATA ...@@ -107,7 +72,9 @@ LOCAL_DATA
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
IN USIGN8 primitive, IN USIGN8 FAR* data_ptr, OUT INT16 FAR* data_len_ptr) IN USIGN8 primitive,
IN USIGN8 FAR* data_ptr,
OUT INT16 FAR* data_len_ptr)
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
/* FUNCTIONAL_DESCRIPTION */ /* FUNCTIONAL_DESCRIPTION */
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
...@@ -121,29 +88,33 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -121,29 +88,33 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
FUNCTION_BODY FUNCTION_BODY
switch (primitive) { switch (primitive)
{
/*--- USER REQUESTS ----------------------------------------------------*/ /*--- USER REQUESTS ----------------------------------------------------*/
case REQ: { case REQ:
switch (service) { {
case DPS_INIT_SLAVE: { switch (service)
{
case DPS_INIT_SLAVE:
{
init_slave_req_ptr = (T_DPS_INIT_SLAVE_REQ FAR*)data_ptr; init_slave_req_ptr = (T_DPS_INIT_SLAVE_REQ FAR*)data_ptr;
if ((init_slave_req_ptr->cfg_data_len == 0) if ((init_slave_req_ptr->cfg_data_len == 0) ||
|| (init_slave_req_ptr->cfg_data_len > DP_MAX_CFG_DATA_LEN)) { (init_slave_req_ptr->cfg_data_len > DP_MAX_CFG_DATA_LEN))
result = E_IF_INVALID_DATA_SIZE; {
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
if (init_slave_req_ptr->enhanced_init_data_len if (init_slave_req_ptr->enhanced_init_data_len >
> sizeof(init_slave_req_ptr->enhanced_init_data)) { sizeof(init_slave_req_ptr->enhanced_init_data))
result = E_IF_INVALID_DATA_SIZE; {
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DPS_INIT_SLAVE_REQ) *data_len_ptr = sizeof(T_DPS_INIT_SLAVE_REQ) -
- (sizeof(init_slave_req_ptr->enhanced_init_data) (sizeof(init_slave_req_ptr->enhanced_init_data) -
- init_slave_req_ptr->enhanced_init_data_len); init_slave_req_ptr->enhanced_init_data_len);
break; break;
} /* case DPS_INIT_SLAVE */ } /* case DPS_INIT_SLAVE */
...@@ -151,16 +122,18 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -151,16 +122,18 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
*data_len_ptr = 0; *data_len_ptr = 0;
break; break;
case DPS_SLAVE_DIAG: { case DPS_SLAVE_DIAG:
{
slave_diag_req_ptr = (T_DPS_SLAVE_DIAG_REQ FAR*)data_ptr; slave_diag_req_ptr = (T_DPS_SLAVE_DIAG_REQ FAR*)data_ptr;
if (slave_diag_req_ptr->ext_diag_data_len > DP_MAX_EXT_DIAG_DATA_LEN) { if (slave_diag_req_ptr->ext_diag_data_len > DP_MAX_EXT_DIAG_DATA_LEN)
result = E_IF_INVALID_DATA_SIZE; {
return (E_IF_INVALID_DATA_SIZE); return (E_IF_INVALID_DATA_SIZE);
} }
*data_len_ptr = sizeof(T_DPS_SLAVE_DIAG_REQ) *data_len_ptr =
- (DP_MAX_EXT_DIAG_DATA_LEN - slave_diag_req_ptr->ext_diag_data_len); sizeof(T_DPS_SLAVE_DIAG_REQ) -
(DP_MAX_EXT_DIAG_DATA_LEN - slave_diag_req_ptr->ext_diag_data_len);
break; break;
} }
...@@ -171,11 +144,9 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -171,11 +144,9 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
case DPS_CHK_CFG: case DPS_CHK_CFG:
case DPS_SET_PRM: case DPS_SET_PRM:
case DPS_SET_SLAVE_ADD: case DPS_SET_SLAVE_ADD:
result = E_IF_INVALID_PRIMITIVE;
return (E_IF_INVALID_PRIMITIVE); return (E_IF_INVALID_PRIMITIVE);
default: default:
result = E_IF_INVALID_SERVICE;
return (E_IF_INVALID_SERVICE); return (E_IF_INVALID_SERVICE);
} /* switch serivce */ } /* switch serivce */
...@@ -185,8 +156,10 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -185,8 +156,10 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
/*---- USER RESPONSES --------------------------------------------------*/ /*---- USER RESPONSES --------------------------------------------------*/
case RES: { case RES:
switch (service) { {
switch (service)
{
case DPS_CHK_CFG: case DPS_CHK_CFG:
*data_len_ptr = sizeof(T_DPS_CHK_CFG_RES); *data_len_ptr = sizeof(T_DPS_CHK_CFG_RES);
break; break;
...@@ -195,7 +168,6 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -195,7 +168,6 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
break; break;
default: default:
result = E_IF_INVALID_SERVICE;
return (E_IF_INVALID_SERVICE); return (E_IF_INVALID_SERVICE);
} /* switch serivce */ } /* switch serivce */
...@@ -206,12 +178,10 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service, ...@@ -206,12 +178,10 @@ FUNCTION PUBLIC INT16 dpsgdl_get_data_len(IN INT16 result, IN USIGN8 service,
/*---- WRONG PRIMITIVE -------------------------------------------------*/ /*---- WRONG PRIMITIVE -------------------------------------------------*/
default: default:
result = E_IF_INVALID_PRIMITIVE;
return (E_IF_INVALID_PRIMITIVE); return (E_IF_INVALID_PRIMITIVE);
} /* switch primitive */ } /* switch primitive */
result = E_OK;
return (E_OK); return (E_OK);
} /* dpsgdl_get_data_len */ } /* dpsgdl_get_data_len */
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME FDLGDL.C FILE_NAME FDLGDL.C
...@@ -55,11 +20,11 @@ MODULE FDLGDL ...@@ -55,11 +20,11 @@ MODULE FDLGDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.23.0.00.release VERSION 5.23.0.00.release
DATE 30-October-2000 DATE October-2000
STATUS finished STATUS finished
...@@ -105,12 +70,13 @@ LOCAL_DATA ...@@ -105,12 +70,13 @@ LOCAL_DATA
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION PUBLIC INT16 fdlgdl_get_data_len(IN INT16 result, /* Service-Result */ FUNCTION PUBLIC INT16 fdlgdl_get_data_len(
IN INT16 result, /* Service-Result */
IN USIGN8 service, /* Service */ IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr, /* pointer to data */ IN USIGN8 FAR* data_ptr, /* pointer to data */
OUT INT16* data_len_ptr /* length of data */ OUT INT16* data_len_ptr /* length of data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -129,20 +95,26 @@ possible return values: ...@@ -129,20 +95,26 @@ possible return values:
*data_len_ptr = 0; *data_len_ptr = 0;
result = E_OK; result = E_OK;
if (primitive == REQ) { if (primitive == REQ)
switch (service) { {
switch (service)
{
case FDLIF_SDA: case FDLIF_SDA:
case FDLIF_SDN: case FDLIF_SDN:
case FDLIF_SRD: { case FDLIF_SRD:
{
T_FDLIF_SDN_SDA_SRD_REQ FAR* req = (T_FDLIF_SDN_SDA_SRD_REQ FAR*)data_ptr; T_FDLIF_SDN_SDA_SRD_REQ FAR* req = (T_FDLIF_SDN_SDA_SRD_REQ FAR*)data_ptr;
*data_len_ptr = sizeof(T_FDLIF_SDN_SDA_SRD_REQ) + req->length; *data_len_ptr = sizeof(T_FDLIF_SDN_SDA_SRD_REQ) + req->length;
} break; }
break;
case FDLIF_REPLY_UPDATE: case FDLIF_REPLY_UPDATE:
case FDLIF_REPLY_UPDATE_MULTIPLE: { case FDLIF_REPLY_UPDATE_MULTIPLE:
{
T_FDLIF_RUP_REQ FAR* req = (T_FDLIF_RUP_REQ FAR*)data_ptr; T_FDLIF_RUP_REQ FAR* req = (T_FDLIF_RUP_REQ FAR*)data_ptr;
*data_len_ptr = sizeof(T_FDLIF_RUP_REQ) + req->length; *data_len_ptr = sizeof(T_FDLIF_RUP_REQ) + req->length;
} break; }
break;
case FDLIF_SET_BUSPARAMETER: case FDLIF_SET_BUSPARAMETER:
*data_len_ptr = sizeof(T_FDLIF_SET_BUSPARAMETER_REQ); *data_len_ptr = sizeof(T_FDLIF_SET_BUSPARAMETER_REQ);
...@@ -177,7 +149,9 @@ possible return values: ...@@ -177,7 +149,9 @@ possible return values:
result = E_IF_INVALID_SERVICE; result = E_IF_INVALID_SERVICE;
break; break;
} }
} else { }
else
{
result = E_IF_INVALID_PRIMITIVE; result = E_IF_INVALID_PRIMITIVE;
} }
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME FM7GDL.C FILE_NAME FM7GDL.C
...@@ -55,11 +20,11 @@ MODULE FM7GDL ...@@ -55,11 +20,11 @@ MODULE FM7GDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.21.0.00.release VERSION 5.21.0.00.release
DATE 27-February-1998 DATE February-1998
STATUS finished STATUS finished
...@@ -111,9 +76,10 @@ LOCAL_DATA ...@@ -111,9 +76,10 @@ LOCAL_DATA
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION LOCAL INT16 fm7gdl_get_ctxt_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fm7gdl_get_ctxt_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive /* Service-Primitive */ IN USIGN8 primitive /* Service-Primitive */
) )
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -131,17 +97,21 @@ possible return values: ...@@ -131,17 +97,21 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
if (service == FM7_ABORT && primitive == REQ) { if (service == FM7_ABORT && primitive == REQ)
{
return (sizeof(T_FM7_ABORT_REQ)); return (sizeof(T_FM7_ABORT_REQ));
} else { }
else
{
return (0); return (0);
} }
} }
FUNCTION LOCAL INT16 fm7gdl_get_crl_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fm7gdl_get_crl_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -169,7 +139,8 @@ possible return values: ...@@ -169,7 +139,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FM7_LOAD_CRL_LOC: case FM7_LOAD_CRL_LOC:
case FM7_LOAD_CRL_REM: case FM7_LOAD_CRL_REM:
if (primitive == REQ) if (primitive == REQ)
...@@ -179,9 +150,12 @@ possible return values: ...@@ -179,9 +150,12 @@ possible return values:
case FM7_READ_CRL_LOC: case FM7_READ_CRL_LOC:
case FM7_READ_CRL_REM: case FM7_READ_CRL_REM:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_READ_CRL_REQ)); return (sizeof(T_READ_CRL_REQ));
} else { }
else
{
T_READ_CRL_CNF FAR* rsp = (T_READ_CRL_CNF FAR*)data_ptr; T_READ_CRL_CNF FAR* rsp = (T_READ_CRL_CNF FAR*)data_ptr;
if (rsp->desired_cr == 0) if (rsp->desired_cr == 0)
...@@ -199,7 +173,7 @@ FUNCTION LOCAL INT16 fm7gdl_get_s_r_value_data_len( ...@@ -199,7 +173,7 @@ FUNCTION LOCAL INT16 fm7gdl_get_s_r_value_data_len(
IN USIGN8 service, /* Service */ IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -224,13 +198,16 @@ possible return values: ...@@ -224,13 +198,16 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FM7_SET_VALUE_LOC: case FM7_SET_VALUE_LOC:
case FM7_SET_VALUE_REM: case FM7_SET_VALUE_REM:
if (primitive == REQ) { if (primitive == REQ)
{
T_SET_VALUE_REQ FAR* req = (T_SET_VALUE_REQ FAR*)data_ptr; T_SET_VALUE_REQ FAR* req = (T_SET_VALUE_REQ FAR*)data_ptr;
return (sizeof(T_SET_VALUE_REQ) + req->length); return (sizeof(T_SET_VALUE_REQ) + req->length);
} else }
else
return (0); return (0);
case FM7_SET_BUSPARAMETER: case FM7_SET_BUSPARAMETER:
...@@ -241,9 +218,12 @@ possible return values: ...@@ -241,9 +218,12 @@ possible return values:
case FM7_READ_VALUE_LOC: case FM7_READ_VALUE_LOC:
case FM7_READ_VALUE_REM: case FM7_READ_VALUE_REM:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_READ_VALUE_REQ)); return (sizeof(T_READ_VALUE_REQ));
} else { }
else
{
T_READ_VALUE_CNF FAR* rsp = (T_READ_VALUE_CNF FAR*)data_ptr; T_READ_VALUE_CNF FAR* rsp = (T_READ_VALUE_CNF FAR*)data_ptr;
return (sizeof(T_READ_VALUE_CNF) + rsp->length); return (sizeof(T_READ_VALUE_CNF) + rsp->length);
} }
...@@ -255,7 +235,7 @@ possible return values: ...@@ -255,7 +235,7 @@ possible return values:
FUNCTION LOCAL INT16 fm7gdl_get_ident_data_len( FUNCTION LOCAL INT16 fm7gdl_get_ident_data_len(
IN USIGN8 primitive /* Service-Primitive */ IN USIGN8 primitive /* Service-Primitive */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -349,7 +329,7 @@ possible return values: ...@@ -349,7 +329,7 @@ possible return values:
} }
FUNCTION LOCAL INT16 fm7gdl_get_error_data_len(IN USIGN8 service /* Service */ FUNCTION LOCAL INT16 fm7gdl_get_error_data_len(IN USIGN8 service /* Service */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -389,7 +369,8 @@ possible return values: ...@@ -389,7 +369,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FM7_INITIATE: case FM7_INITIATE:
return (sizeof(T_FM7_INIT_ERR_CNF)); return (sizeof(T_FM7_INIT_ERR_CNF));
...@@ -425,12 +406,13 @@ possible return values: ...@@ -425,12 +406,13 @@ possible return values:
} }
} }
FUNCTION PUBLIC INT16 fm7gdl_get_data_len(IN INT16 result, /* Service-Result */ FUNCTION PUBLIC INT16 fm7gdl_get_data_len(
IN INT16 result, /* Service-Result */
IN USIGN8 service, /* Service */ IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr, /* pointer to data */ IN USIGN8 FAR* data_ptr, /* pointer to data */
OUT INT16* data_len_ptr /* length of data */ OUT INT16* data_len_ptr /* length of data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -448,7 +430,8 @@ possible return values: ...@@ -448,7 +430,8 @@ possible return values:
*data_len_ptr = 0; *data_len_ptr = 0;
switch (service) { switch (service)
{
case FM7_READ_CRL_LOC: case FM7_READ_CRL_LOC:
case FM7_INIT_LOAD_CRL_LOC: case FM7_INIT_LOAD_CRL_LOC:
case FM7_LOAD_CRL_LOC: case FM7_LOAD_CRL_LOC:
...@@ -470,8 +453,8 @@ possible return values: ...@@ -470,8 +453,8 @@ possible return values:
case FM7_SET_VALUE_REM: case FM7_SET_VALUE_REM:
case FM7_READ_VALUE_REM: case FM7_READ_VALUE_REM:
if (result == POS) if (result == POS)
*data_len_ptr *data_len_ptr =
= fm7gdl_get_s_r_value_data_len(service, primitive, data_ptr); fm7gdl_get_s_r_value_data_len(service, primitive, data_ptr);
else else
*data_len_ptr = fm7gdl_get_error_data_len(service); *data_len_ptr = fm7gdl_get_error_data_len(service);
break; break;
...@@ -518,6 +501,7 @@ possible return values: ...@@ -518,6 +501,7 @@ possible return values:
default: default:
return (E_IF_INVALID_SERVICE); return (E_IF_INVALID_SERVICE);
break;
} }
return (E_OK); return (E_OK);
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME FMBGDL.C FILE_NAME FMBGDL.C
...@@ -55,11 +20,11 @@ MODULE FMBGDL ...@@ -55,11 +20,11 @@ MODULE FMBGDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.21.0.00.release VERSION 5.45.0.00.release
DATE 27-February-1998 DATE October-2009
STATUS finished STATUS finished
...@@ -105,12 +70,13 @@ LOCAL_DATA ...@@ -105,12 +70,13 @@ LOCAL_DATA
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION PUBLIC INT16 fmbgdl_get_data_len(IN INT16 result, /* Service-Result */ FUNCTION PUBLIC INT16 fmbgdl_get_data_len(
IN INT16 result, /* Service-Result */
IN USIGN8 service, /* Service */ IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr, /* pointer to data */ IN USIGN8 FAR* data_ptr, /* pointer to data */
OUT INT16* data_len_ptr /* length of data */ OUT INT16* data_len_ptr /* length of data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -129,24 +95,29 @@ possible return values: ...@@ -129,24 +95,29 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
if (primitive == REQ) { if (primitive == REQ)
switch (service) { {
case FMB_SET_CONFIGURATION: { switch (service)
T_FMB_SET_CONFIGURATION_REQ FAR* req_ptr {
= (T_FMB_SET_CONFIGURATION_REQ FAR*)data_ptr; case FMB_SET_CONFIGURATION:
{
T_FMB_SET_CONFIGURATION_REQ FAR* req_ptr =
(T_FMB_SET_CONFIGURATION_REQ FAR*)data_ptr;
#ifdef WIN32 #ifdef WIN32
req_ptr->sm7_active &= 0xFE; req_ptr->sm7_active &= 0xFE;
#else #else
req_ptr->sm7_active = PB_FALSE; req_ptr->sm7_active = PB_FALSE;
#endif #endif
*data_len_ptr = sizeof(T_FMB_SET_CONFIGURATION_REQ); *data_len_ptr = sizeof(T_FMB_SET_CONFIGURATION_REQ);
} break; }
break;
case FMB_SET_BUSPARAMETER: case FMB_SET_BUSPARAMETER:
*data_len_ptr = sizeof(T_FMB_SET_BUSPARAMETER_REQ); *data_len_ptr = sizeof(T_FMB_SET_BUSPARAMETER_REQ);
break; break;
case FMB_SET_VALUE: { case FMB_SET_VALUE:
{
T_FMB_SET_VALUE_REQ FAR* req = (T_FMB_SET_VALUE_REQ FAR*)data_ptr; T_FMB_SET_VALUE_REQ FAR* req = (T_FMB_SET_VALUE_REQ FAR*)data_ptr;
*data_len_ptr = (sizeof(T_FMB_SET_VALUE_REQ) + req->length); *data_len_ptr = (sizeof(T_FMB_SET_VALUE_REQ) + req->length);
break; break;
...@@ -160,6 +131,10 @@ possible return values: ...@@ -160,6 +131,10 @@ possible return values:
*data_len_ptr = sizeof(T_FMB_LSAP_STATUS_REQ); *data_len_ptr = sizeof(T_FMB_LSAP_STATUS_REQ);
break; break;
case FMB_VALIDATE_MASTER:
*data_len_ptr = sizeof(T_FMB_VALIDATE_MASTER_REQ);
break;
case FMB_GET_LIVE_LIST: case FMB_GET_LIVE_LIST:
case FMB_READ_BUSPARAMETER: case FMB_READ_BUSPARAMETER:
case FMB_EXIT: case FMB_EXIT:
...@@ -172,7 +147,9 @@ possible return values: ...@@ -172,7 +147,9 @@ possible return values:
ret_val = E_IF_INVALID_SERVICE; ret_val = E_IF_INVALID_SERVICE;
break; break;
} }
} else { }
else
{
ret_val = E_IF_INVALID_PRIMITIVE; ret_val = E_IF_INVALID_PRIMITIVE;
} }
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1995-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME FMSGDL.C FILE_NAME FMSGDL.C
...@@ -55,11 +20,11 @@ MODULE FMSGDL ...@@ -55,11 +20,11 @@ MODULE FMSGDL
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING AG AUTHOR SOFTING
VERSION 5.21.0.00.release VERSION 5.21.0.00.release
DATE 27-February-1998 DATE February-1998
STATUS finished STATUS finished
...@@ -105,9 +70,10 @@ LOCAL_DATA ...@@ -105,9 +70,10 @@ LOCAL_DATA
#pragma check_stack(off) #pragma check_stack(off)
#endif #endif
FUNCTION LOCAL INT16 fmsgdl_get_ctxt_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_ctxt_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive /* Service-Primitive */ IN USIGN8 primitive /* Service-Primitive */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -126,7 +92,8 @@ possible return values: ...@@ -126,7 +92,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_INITIATE: case FMS_INITIATE:
if (primitive == REQ) if (primitive == REQ)
return (sizeof(T_CTXT_INIT_REQ)); return (sizeof(T_CTXT_INIT_REQ));
...@@ -144,9 +111,10 @@ possible return values: ...@@ -144,9 +111,10 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_vfd_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_vfd_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive /* Service-Primitive */ IN USIGN8 primitive /* Service-Primitive */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -168,7 +136,8 @@ possible return values: ...@@ -168,7 +136,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_STATUS: case FMS_STATUS:
if (primitive == RES) if (primitive == RES)
return (sizeof(T_VFD_STATUS_CNF)); return (sizeof(T_VFD_STATUS_CNF));
...@@ -204,10 +173,11 @@ possible return values: ...@@ -204,10 +173,11 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_od_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_od_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -233,24 +203,32 @@ possible return values: ...@@ -233,24 +203,32 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_GET_OD: case FMS_GET_OD:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_GET_OD_REQ)); return (sizeof(T_GET_OD_REQ));
} else { }
else
{
T_GET_OD_CNF FAR* rsp = (T_GET_OD_CNF FAR*)data_ptr; T_GET_OD_CNF FAR* rsp = (T_GET_OD_CNF FAR*)data_ptr;
USIGN8 FAR* obj_descr_ptr = (USIGN8 FAR*)(rsp + 1); USIGN8 FAR* obj_descr_ptr = (USIGN8 FAR*)(rsp + 1);
USIGN16 offset = 0; USIGN16 offset = 0;
USIGN16 size = 0; USIGN16 size = 0;
USIGN8 i; USIGN8 i;
if (rsp->no_of_od_descr != 0) { if (rsp->no_of_od_descr != 0)
for (i = 0; i < rsp->no_of_od_descr; i++) { {
for (i = 0; i < rsp->no_of_od_descr; i++)
{
size += (obj_descr_ptr[offset] + 1); size += (obj_descr_ptr[offset] + 1);
offset = size; offset = size;
} }
return (sizeof(T_GET_OD_CNF) + size); return (sizeof(T_GET_OD_CNF) + size);
} else { }
else
{
return (0); return (0);
} }
} }
...@@ -262,19 +240,22 @@ possible return values: ...@@ -262,19 +240,22 @@ possible return values:
return (0); return (0);
case FMS_PUT_OD: case FMS_PUT_OD:
if (primitive == REQ) { if (primitive == REQ)
{
T_PUT_OD_REQ FAR* req = (T_PUT_OD_REQ FAR*)data_ptr; T_PUT_OD_REQ FAR* req = (T_PUT_OD_REQ FAR*)data_ptr;
USIGN8 FAR* obj_descr_ptr = (USIGN8 FAR*)(req + 1); USIGN8 FAR* obj_descr_ptr = (USIGN8 FAR*)(req + 1);
USIGN16 offset = 0; USIGN16 offset = 0;
USIGN16 size = 0; USIGN16 size = 0;
USIGN8 i; USIGN8 i;
for (i = 0; i < req->no_of_od_descr; i++) { for (i = 0; i < req->no_of_od_descr; i++)
{
size += (obj_descr_ptr[offset] + 1); size += (obj_descr_ptr[offset] + 1);
offset = size; offset = size;
} }
return (sizeof(T_PUT_OD_REQ) + size); return (sizeof(T_PUT_OD_REQ) + size);
} else }
else
return (0); return (0);
case FMS_INIT_LOAD_OD_LOC: case FMS_INIT_LOAD_OD_LOC:
...@@ -290,33 +271,37 @@ possible return values: ...@@ -290,33 +271,37 @@ possible return values:
return (0); return (0);
case FMS_LOAD_OD_LOC: case FMS_LOAD_OD_LOC:
if (primitive == REQ) { if (primitive == REQ)
{
T_LOAD_OD_REQ FAR* req = (T_LOAD_OD_REQ FAR*)data_ptr; T_LOAD_OD_REQ FAR* req = (T_LOAD_OD_REQ FAR*)data_ptr;
T_OD_NULL_OBJECT FAR* object T_OD_NULL_OBJECT FAR* object =
= (T_OD_NULL_OBJECT FAR*)&req->obj_descr.id.null_obj_descr; (T_OD_NULL_OBJECT FAR*)&req->obj_descr.id.null_obj_descr;
switch (object->obj_code) { switch (object->obj_code)
{
case TYPE_STRUCT_OBJECT: case TYPE_STRUCT_OBJECT:
return (sizeof(T_LOAD_OD_REQ) return (sizeof(T_LOAD_OD_REQ) +
+ (req->obj_descr.id.ds_obj_descr.no_of_elements (req->obj_descr.id.ds_obj_descr.no_of_elements *
* sizeof(T_OD_DT_LIST))); sizeof(T_OD_DT_LIST)));
case RECORD_OBJECT: case RECORD_OBJECT:
return (sizeof(T_LOAD_OD_REQ) return (sizeof(T_LOAD_OD_REQ) +
+ (req->obj_descr.id.r_var_obj_descr.no_of_address (req->obj_descr.id.r_var_obj_descr.no_of_address *
* sizeof(USIGN32))); sizeof(USIGN32)));
case VAR_LIST_OBJECT: case VAR_LIST_OBJECT:
return (sizeof(T_LOAD_OD_REQ) return (
+ (req->obj_descr.id.vlist_obj_descr.no_of_var * sizeof(USIGN16))); sizeof(T_LOAD_OD_REQ) +
(req->obj_descr.id.vlist_obj_descr.no_of_var * sizeof(USIGN16)));
case INVOCATION_OBJECT: case INVOCATION_OBJECT:
return (sizeof(T_LOAD_OD_REQ) return (sizeof(T_LOAD_OD_REQ) +
+ (req->obj_descr.id.pi_obj_descr.cnt_dom * sizeof(USIGN16))); (req->obj_descr.id.pi_obj_descr.cnt_dom * sizeof(USIGN16)));
default: default:
return (sizeof(T_LOAD_OD_REQ)); return (sizeof(T_LOAD_OD_REQ));
} }
} else }
else
return (0); return (0);
case FMS_OD_READ_LOC: case FMS_OD_READ_LOC:
...@@ -330,10 +315,11 @@ possible return values: ...@@ -330,10 +315,11 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_var_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_var_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -360,89 +346,113 @@ possible return values: ...@@ -360,89 +346,113 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_READ: case FMS_READ:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_VAR_READ_REQ)); return (sizeof(T_VAR_READ_REQ));
} else { }
else
{
T_VAR_READ_CNF FAR* rsp = (T_VAR_READ_CNF FAR*)data_ptr; T_VAR_READ_CNF FAR* rsp = (T_VAR_READ_CNF FAR*)data_ptr;
return (sizeof(T_VAR_READ_CNF) + rsp->length); return (sizeof(T_VAR_READ_CNF) + rsp->length);
} }
case FMS_READ_WITH_TYPE: case FMS_READ_WITH_TYPE:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_VAR_READ_WITH_TYPE_REQ)); return (sizeof(T_VAR_READ_WITH_TYPE_REQ));
} else { }
T_VAR_READ_WITH_TYPE_CNF FAR* rsp else
= (T_VAR_READ_WITH_TYPE_CNF FAR*)data_ptr; {
return (sizeof(T_VAR_READ_WITH_TYPE_CNF) T_VAR_READ_WITH_TYPE_CNF FAR* rsp =
+ (sizeof(T_TYPE_DESCR) * rsp->no_of_type_descr) + rsp->length); (T_VAR_READ_WITH_TYPE_CNF FAR*)data_ptr;
return (sizeof(T_VAR_READ_WITH_TYPE_CNF) +
(sizeof(T_TYPE_DESCR) * rsp->no_of_type_descr) + rsp->length);
} }
case FMS_WRITE: case FMS_WRITE:
if (primitive == REQ) { if (primitive == REQ)
{
T_VAR_WRITE_REQ FAR* req = (T_VAR_WRITE_REQ FAR*)data_ptr; T_VAR_WRITE_REQ FAR* req = (T_VAR_WRITE_REQ FAR*)data_ptr;
return (sizeof(T_VAR_WRITE_REQ) + req->length); return (sizeof(T_VAR_WRITE_REQ) + req->length);
} else }
else
return (0); return (0);
case FMS_WRITE_WITH_TYPE: case FMS_WRITE_WITH_TYPE:
if (primitive == REQ) { if (primitive == REQ)
T_VAR_WRITE_WITH_TYPE_REQ FAR* req {
= (T_VAR_WRITE_WITH_TYPE_REQ FAR*)data_ptr; T_VAR_WRITE_WITH_TYPE_REQ FAR* req =
return (sizeof(T_VAR_WRITE_WITH_TYPE_REQ) (T_VAR_WRITE_WITH_TYPE_REQ FAR*)data_ptr;
+ (sizeof(T_TYPE_DESCR) * req->no_of_type_descr) + req->length); return (sizeof(T_VAR_WRITE_WITH_TYPE_REQ) +
} else (sizeof(T_TYPE_DESCR) * req->no_of_type_descr) + req->length);
}
else
return (0); return (0);
case FMS_INFO_RPT: case FMS_INFO_RPT:
if (primitive == REQ) { if (primitive == REQ)
{
T_VAR_INFO_RPT_REQ FAR* req = (T_VAR_INFO_RPT_REQ FAR*)data_ptr; T_VAR_INFO_RPT_REQ FAR* req = (T_VAR_INFO_RPT_REQ FAR*)data_ptr;
return (sizeof(T_VAR_INFO_RPT_REQ) + req->length); return (sizeof(T_VAR_INFO_RPT_REQ) + req->length);
} else }
else
return (0); return (0);
case FMS_INFO_RPT_WITH_TYPE: case FMS_INFO_RPT_WITH_TYPE:
if (primitive == REQ) { if (primitive == REQ)
T_VAR_INFO_RPT_WITH_TYPE_REQ FAR* req {
= (T_VAR_INFO_RPT_WITH_TYPE_REQ FAR*)data_ptr; T_VAR_INFO_RPT_WITH_TYPE_REQ FAR* req =
return (sizeof(T_VAR_INFO_RPT_WITH_TYPE_REQ) (T_VAR_INFO_RPT_WITH_TYPE_REQ FAR*)data_ptr;
+ (sizeof(T_TYPE_DESCR) * req->no_of_type_descr) + req->length); return (sizeof(T_VAR_INFO_RPT_WITH_TYPE_REQ) +
} else (sizeof(T_TYPE_DESCR) * req->no_of_type_descr) + req->length);
}
else
return (0); return (0);
case FMS_PHYS_READ: case FMS_PHYS_READ:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_VAR_PHYS_READ_REQ)); return (sizeof(T_VAR_PHYS_READ_REQ));
} else { }
else
{
T_VAR_PHYS_READ_CNF FAR* rsp = (T_VAR_PHYS_READ_CNF FAR*)data_ptr; T_VAR_PHYS_READ_CNF FAR* rsp = (T_VAR_PHYS_READ_CNF FAR*)data_ptr;
return (sizeof(T_VAR_PHYS_READ_CNF) + rsp->length); return (sizeof(T_VAR_PHYS_READ_CNF) + rsp->length);
} }
case FMS_PHYS_WRITE: case FMS_PHYS_WRITE:
if (primitive == REQ) { if (primitive == REQ)
{
T_VAR_PHYS_WRITE_REQ FAR* req = (T_VAR_PHYS_WRITE_REQ FAR*)data_ptr; T_VAR_PHYS_WRITE_REQ FAR* req = (T_VAR_PHYS_WRITE_REQ FAR*)data_ptr;
return (sizeof(T_VAR_PHYS_WRITE_REQ) + req->length); return (sizeof(T_VAR_PHYS_WRITE_REQ) + req->length);
} else }
else
return (0); return (0);
case FMS_DEF_VAR_LIST: case FMS_DEF_VAR_LIST:
if (primitive == REQ) { if (primitive == REQ)
T_VAR_DEFINE_VAR_LIST_REQ FAR* req {
= (T_VAR_DEFINE_VAR_LIST_REQ FAR*)data_ptr; T_VAR_DEFINE_VAR_LIST_REQ FAR* req =
(T_VAR_DEFINE_VAR_LIST_REQ FAR*)data_ptr;
USIGN8 FAR* d_acc_spec_list = (USIGN8 FAR*)(req + 1); USIGN8 FAR* d_acc_spec_list = (USIGN8 FAR*)(req + 1);
USIGN16 offset = 0; USIGN16 offset = 0;
USIGN16 acc_spec_list_size = 0; USIGN16 acc_spec_list_size = 0;
USIGN8 i = 0; USIGN8 i = 0;
for (i = 0; i < req->no_of_var; i++) { for (i = 0; i < req->no_of_var; i++)
{
offset++; /* offset to length of acc_spec */ offset++; /* offset to length of acc_spec */
acc_spec_list_size += sizeof(T_DYN_ACC_SPEC) + d_acc_spec_list[offset]; acc_spec_list_size += sizeof(T_DYN_ACC_SPEC) + d_acc_spec_list[offset];
offset = acc_spec_list_size; offset = acc_spec_list_size;
} }
return (sizeof(T_VAR_DEFINE_VAR_LIST_REQ) + acc_spec_list_size); return (sizeof(T_VAR_DEFINE_VAR_LIST_REQ) + acc_spec_list_size);
} else { }
else
{
return (sizeof(T_VAR_DEFINE_VAR_LIST_CNF)); return (sizeof(T_VAR_DEFINE_VAR_LIST_CNF));
} }
...@@ -457,10 +467,11 @@ possible return values: ...@@ -457,10 +467,11 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_evn_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_evn_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -481,20 +492,25 @@ possible return values: ...@@ -481,20 +492,25 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_EVN_NOTIFY: case FMS_EVN_NOTIFY:
if (primitive == REQ) { if (primitive == REQ)
{
T_EVENT_NOTIFY_REQ FAR* req = (T_EVENT_NOTIFY_REQ FAR*)data_ptr; T_EVENT_NOTIFY_REQ FAR* req = (T_EVENT_NOTIFY_REQ FAR*)data_ptr;
return (sizeof(T_EVENT_NOTIFY_REQ) + req->data_length); return (sizeof(T_EVENT_NOTIFY_REQ) + req->data_length);
} else }
else
return (0); return (0);
case FMS_EVN_NOTIFY_WITH_TYPE: case FMS_EVN_NOTIFY_WITH_TYPE:
if (primitive == REQ) { if (primitive == REQ)
T_EVENT_NOTIFY_WITH_TYPE_REQ FAR* req {
= (T_EVENT_NOTIFY_WITH_TYPE_REQ FAR*)data_ptr; T_EVENT_NOTIFY_WITH_TYPE_REQ FAR* req =
(T_EVENT_NOTIFY_WITH_TYPE_REQ FAR*)data_ptr;
return (sizeof(T_EVENT_NOTIFY_WITH_TYPE_REQ) + req->data_length); return (sizeof(T_EVENT_NOTIFY_WITH_TYPE_REQ) + req->data_length);
} else }
else
return (0); return (0);
case FMS_ALT_EVN_CND_MNT: case FMS_ALT_EVN_CND_MNT:
...@@ -514,10 +530,11 @@ possible return values: ...@@ -514,10 +530,11 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_dom_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_dom_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -548,7 +565,8 @@ possible return values: ...@@ -548,7 +565,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_INIT_DOWNL_SEQ: case FMS_INIT_DOWNL_SEQ:
case FMS_GEN_INIT_DOWNL_SEQ: case FMS_GEN_INIT_DOWNL_SEQ:
case FMS_INIT_UPL_SEQ: case FMS_INIT_UPL_SEQ:
...@@ -560,9 +578,12 @@ possible return values: ...@@ -560,9 +578,12 @@ possible return values:
case FMS_DOWNL_SEG: case FMS_DOWNL_SEG:
case FMS_UPL_SEG: case FMS_UPL_SEG:
if (primitive == REQ) { if (primitive == REQ)
{
return (sizeof(T_DOM_REQ)); return (sizeof(T_DOM_REQ));
} else { }
else
{
T_DNL_UPL_SEG_CNF FAR* rsp = (T_DNL_UPL_SEG_CNF FAR*)data_ptr; T_DNL_UPL_SEG_CNF FAR* rsp = (T_DNL_UPL_SEG_CNF FAR*)data_ptr;
return (sizeof(T_DNL_UPL_SEG_CNF) + rsp->data_len); return (sizeof(T_DNL_UPL_SEG_CNF) + rsp->data_len);
} }
...@@ -574,10 +595,12 @@ possible return values: ...@@ -574,10 +595,12 @@ possible return values:
return (0); return (0);
case FMS_GEN_DOWNL_SEG: case FMS_GEN_DOWNL_SEG:
if (primitive == REQ) { if (primitive == REQ)
{
T_GEN_DNL_SEG_REQ FAR* req = (T_GEN_DNL_SEG_REQ FAR*)data_ptr; T_GEN_DNL_SEG_REQ FAR* req = (T_GEN_DNL_SEG_REQ FAR*)data_ptr;
return (sizeof(T_GEN_DNL_SEG_REQ) + req->data_len); return (sizeof(T_GEN_DNL_SEG_REQ) + req->data_len);
} else }
else
return (0); return (0);
case FMS_GEN_TERM_DOWNL_SEQ: case FMS_GEN_TERM_DOWNL_SEQ:
...@@ -588,10 +611,12 @@ possible return values: ...@@ -588,10 +611,12 @@ possible return values:
case FMS_REQ_DOM_DOWNL: case FMS_REQ_DOM_DOWNL:
case FMS_REQ_DOM_UPL: case FMS_REQ_DOM_UPL:
if (primitive == REQ) { if (primitive == REQ)
{
T_REQUEST_DOM_REQ FAR* req = (T_REQUEST_DOM_REQ FAR*)data_ptr; T_REQUEST_DOM_REQ FAR* req = (T_REQUEST_DOM_REQ FAR*)data_ptr;
return (sizeof(T_REQUEST_DOM_REQ) + req->add_info_length); return (sizeof(T_REQUEST_DOM_REQ) + req->add_info_length);
} else }
else
return (0); return (0);
default: default:
...@@ -599,10 +624,11 @@ possible return values: ...@@ -599,10 +624,11 @@ possible return values:
} }
} }
FUNCTION LOCAL INT16 fmsgdl_get_pi_data_len(IN USIGN8 service, /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_pi_data_len(
IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr /* pointer to data */ IN USIGN8 FAR* data_ptr /* pointer to data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -627,9 +653,11 @@ possible return values: ...@@ -627,9 +653,11 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_PI_CREATE: case FMS_PI_CREATE:
if (primitive == REQ) { if (primitive == REQ)
{
T_PI_CR8_REQ FAR* req = (T_PI_CR8_REQ FAR*)data_ptr; T_PI_CR8_REQ FAR* req = (T_PI_CR8_REQ FAR*)data_ptr;
USIGN8 FAR* d_acc_spec_list = (USIGN8 FAR*)(req + 1); USIGN8 FAR* d_acc_spec_list = (USIGN8 FAR*)(req + 1);
USIGN16 offset = 0; USIGN16 offset = 0;
...@@ -637,13 +665,16 @@ possible return values: ...@@ -637,13 +665,16 @@ possible return values:
USIGN8 i = 0; USIGN8 i = 0;
/* - dynamic access specification list --------------------------*/ /* - dynamic access specification list --------------------------*/
for (i = 0; i < req->cnt_dom; i++) { for (i = 0; i < req->cnt_dom; i++)
{
offset++; /* offset to length of acc_spec */ offset++; /* offset to length of acc_spec */
acc_spec_list_size += sizeof(T_DYN_ACC_SPEC) + d_acc_spec_list[offset]; acc_spec_list_size += sizeof(T_DYN_ACC_SPEC) + d_acc_spec_list[offset];
offset = acc_spec_list_size; offset = acc_spec_list_size;
} }
return (sizeof(T_PI_CR8_REQ) + acc_spec_list_size); return (sizeof(T_PI_CR8_REQ) + acc_spec_list_size);
} else { }
else
{
return (sizeof(T_PI_CR8_CNF)); return (sizeof(T_PI_CR8_CNF));
} }
...@@ -695,7 +726,7 @@ possible return values: ...@@ -695,7 +726,7 @@ possible return values:
} }
FUNCTION LOCAL INT16 fmsgdl_get_error_data_len(IN USIGN8 service /* Service */ FUNCTION LOCAL INT16 fmsgdl_get_error_data_len(IN USIGN8 service /* Service */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -748,7 +779,8 @@ possible return values: ...@@ -748,7 +779,8 @@ possible return values:
FUNCTION_BODY FUNCTION_BODY
switch (service) { switch (service)
{
case FMS_INITIATE: case FMS_INITIATE:
return (sizeof(T_CTXT_INIT_ERR_CNF)); return (sizeof(T_CTXT_INIT_ERR_CNF));
...@@ -797,12 +829,13 @@ possible return values: ...@@ -797,12 +829,13 @@ possible return values:
} }
} }
FUNCTION PUBLIC INT16 fmsgdl_get_data_len(IN INT16 result, /* Service-Result */ FUNCTION PUBLIC INT16 fmsgdl_get_data_len(
IN INT16 result, /* Service-Result */
IN USIGN8 service, /* Service */ IN USIGN8 service, /* Service */
IN USIGN8 primitive, /* Service-Primitive */ IN USIGN8 primitive, /* Service-Primitive */
IN USIGN8 FAR* data_ptr, /* pointer to data */ IN USIGN8 FAR* data_ptr, /* pointer to data */
OUT INT16* data_len_ptr /* length of data */ OUT INT16* data_len_ptr /* length of data */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -820,7 +853,8 @@ possible return values: ...@@ -820,7 +853,8 @@ possible return values:
*data_len_ptr = 0; *data_len_ptr = 0;
switch (service) { switch (service)
{
case FMS_INITIATE: case FMS_INITIATE:
case FMS_ABORT: case FMS_ABORT:
if (result == POS) if (result == POS)
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : KEYWORDS.H */ /* Filename : KEYWORDS.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This include file defines some keywords which are used */ /* Description : This include file defines some keywords which are used */
/* for structuring and formatting the PROFIBUS source files. These */ /* for structuring and formatting the PROFIBUS source files. These */
......
/* /******************************************************************************
* 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 Industrial Automation GmbH *
* Richard-Reitzner-Allee 6 * * Richard-Reitzner-Allee 6 *
* D-85540 Haar * * D-85540 Haar *
* Phone: ++49-89-4 56 56-0 * * Phone: (++49)-(0)89-45656-0 *
* Fax: ++49-89-4 56 56-3 99 * * Fax: (++49)-(0)89-45656-399 *
* * * *
* Copyright (C) SOFTING AG 1999-2003 * * Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 *
* All Rights Reserved * * All Rights Reserved *
* * * *
****************************************************************************** *******************************************************************************
FILE_NAME PAPIAUX.C FILE_NAME PAPIAUX.C
...@@ -55,11 +20,11 @@ MODULE PAPIAUX ...@@ -55,11 +20,11 @@ MODULE PAPIAUX
COMPONENT_LIBRARY PAPI Lib COMPONENT_LIBRARY PAPI Lib
PAPI DLL PAPI DLL
AUTHOR SOFTING GmbH AUTHOR SOFTING
VERSION 5.22.0.00.release VERSION 5.22.0.00.release
DATE 26-February-1999 DATE February-1999
STATUS finished STATUS finished
...@@ -109,8 +74,8 @@ LOCAL_DATA ...@@ -109,8 +74,8 @@ LOCAL_DATA
// *************************************************************************** // ***************************************************************************
#if defined(WIN32) || defined(_WIN32) #if defined(WIN32) || defined(_WIN32)
FUNCTION PUBLIC BOOL ReadBoardRegistryEntries( FUNCTION PUBLIC BOOL ReadBoardRegistryEntries(IN USIGN8 BoardNumber,
IN USIGN8 BoardNumber, OUT USIGN32* OperationMode) OUT USIGN32* OperationMode)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -134,19 +99,21 @@ return value: ...@@ -134,19 +99,21 @@ return value:
FUNCTION_BODY FUNCTION_BODY
if (ERROR_SUCCESS if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
== RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH_PARAMETER_FROM_HLM, 0, REGPATH_PARAMETER_FROM_HLM, 0, KEY_READ,
KEY_READ, &keyParameters)) { &keyParameters))
{
sprintf(szKeyBoard, "%s\\%d", REGPATH_PARAMETER_FROM_HLM, BoardNumber); sprintf(szKeyBoard, "%s\\%d", REGPATH_PARAMETER_FROM_HLM, BoardNumber);
if (ERROR_SUCCESS if (ERROR_SUCCESS ==
== RegOpenKeyEx( RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyBoard, 0, KEY_READ, &keyBoard))
HKEY_LOCAL_MACHINE, szKeyBoard, 0, KEY_READ, &keyBoard)) { {
SizeofBoardType = sizeof(szBoardType); SizeofBoardType = sizeof(szBoardType);
szBoardType[0] = '\0'; szBoardType[0] = '\0';
if ((RetVal = RegQueryValueEx(keyBoard, "Type", NULL, NULL, if ((RetVal = RegQueryValueEx(keyBoard, "Type", NULL, NULL,
(LPBYTE)szBoardType, &SizeofBoardType)) (LPBYTE)szBoardType, &SizeofBoardType)) ==
== ERROR_SUCCESS) { ERROR_SUCCESS)
{
RetVal |= RegQueryValueEx(keyBoard, "OperationMode", NULL, NULL, RetVal |= RegQueryValueEx(keyBoard, "OperationMode", NULL, NULL,
(LPBYTE)OperationMode, &sizeULONG); (LPBYTE)OperationMode, &sizeULONG);
...@@ -184,7 +151,8 @@ FUNCTION PUBLIC int kbhit(VOID) ...@@ -184,7 +151,8 @@ FUNCTION PUBLIC int kbhit(VOID)
timeout.tv_sec = 0L; timeout.tv_sec = 0L;
timeout.tv_usec = 1000L; /* wait 1 ms */ timeout.tv_usec = 1000L; /* wait 1 ms */
if (select(1, &rd_fds, NULL, NULL, &timeout) > 0) { if (select(1, &rd_fds, NULL, NULL, &timeout) > 0)
{
return (1); return (1);
} }
...@@ -199,7 +167,7 @@ FUNCTION PUBLIC int kbhit(VOID) ...@@ -199,7 +167,7 @@ FUNCTION PUBLIC int kbhit(VOID)
FUNCTION PUBLIC USIGN16 swap_16_intel_motorola( FUNCTION PUBLIC USIGN16 swap_16_intel_motorola(
IN USIGN16 input16 /* value to swap */ IN USIGN16 input16 /* value to swap */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -220,8 +188,7 @@ return value: ...@@ -220,8 +188,7 @@ return value:
FUNCTION_BODY FUNCTION_BODY
((USIGN8*)&inp16) ((USIGN8*)&inp16)
[0] [0] = ((USIGN8*)&input16)[1];
= ((USIGN8*)&input16)[1];
((USIGN8*)&inp16)[1] = ((USIGN8*)&input16)[0]; ((USIGN8*)&inp16)[1] = ((USIGN8*)&input16)[0];
return (inp16); return (inp16);
...@@ -229,7 +196,7 @@ return value: ...@@ -229,7 +196,7 @@ return value:
FUNCTION PUBLIC USIGN32 swap_32_intel_motorola( FUNCTION PUBLIC USIGN32 swap_32_intel_motorola(
IN USIGN32 input32 /* value to swap */ IN USIGN32 input32 /* value to swap */
) )
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -250,8 +217,7 @@ return value: ...@@ -250,8 +217,7 @@ return value:
FUNCTION_BODY FUNCTION_BODY
((USIGN8*)&inp32) ((USIGN8*)&inp32)
[0] [0] = ((USIGN8*)&input32)[3];
= ((USIGN8*)&input32)[3];
((USIGN8*)&inp32)[1] = ((USIGN8*)&input32)[2]; ((USIGN8*)&inp32)[1] = ((USIGN8*)&input32)[2];
((USIGN8*)&inp32)[2] = ((USIGN8*)&input32)[1]; ((USIGN8*)&inp32)[2] = ((USIGN8*)&input32)[1];
((USIGN8*)&inp32)[3] = ((USIGN8*)&input32)[0]; ((USIGN8*)&inp32)[3] = ((USIGN8*)&input32)[0];
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -49,13 +14,12 @@ ...@@ -49,13 +14,12 @@
/* PROFIBUS CONFIGURATION AND IMPLEMENTATION DEFINITIONS */ /* PROFIBUS CONFIGURATION AND IMPLEMENTATION DEFINITIONS */
/* */ /* */
/* Filename : PB_CONF.H */ /* Filename : PB_CONF.H */
/* Version : 5.26.0.00.release */ /* Version : 5.45.0.00.release */
/* Date : 14-February-2002 */ /* Date : December-2009 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the PROFIBUS configuration and */ /* Description : This file contains the PROFIBUS configuration and */
/* implementation definitions using Windows ME/98/95 or */ /* implementation definitions using Linux operating system */
/* Windows XP / 2000 / NT operating system */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -67,7 +31,7 @@ ...@@ -67,7 +31,7 @@
/*****************************************************************************/ /*****************************************************************************/
#ifndef PB_VER #ifndef PB_VER
#define PB_VER 526 #define PB_VER 545
#endif #endif
/*****************************************************************************/ /*****************************************************************************/
...@@ -99,9 +63,9 @@ ...@@ -99,9 +63,9 @@
#define HUGE #define HUGE
#define CALL_CONV #define CALL_CONV
#define CALLBACK #define CALLBACK
#define INVALID_HANDLE_VALUE ((HANDLE)NULL) #define INVALID_HANDLE_VALUE 0
#define getch() getchar() #define getch() getchar()
typedef long int HANDLE; typedef int HANDLE;
typedef unsigned long DWORD; typedef unsigned long DWORD;
#ifdef PB_API_FUNC_NOT_USED #ifdef PB_API_FUNC_NOT_USED
#undef CALL_CONV #undef CALL_CONV
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_DP.H */ /* Filename : PB_DP.H */
/* Version : 5.22.0.00.release */ /* Version : 5.22.0.00.release */
/* Date : 26-February-1999 */ /* Date : February-1999 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the global defines and types of */ /* Description : This file contains the global defines and types of */
/* component DP */ /* component DP */
...@@ -232,8 +197,8 @@ ...@@ -232,8 +197,8 @@
#define DP_PRM_WD_ON 0x08 #define DP_PRM_WD_ON 0x08
#define DP_PRM_STATION_STATUS \ #define DP_PRM_STATION_STATUS \
(DP_PRM_LOCK_REQ | DP_PRM_UNLOCK_REQ | DP_PRM_SYNC_REQ | DP_PRM_FREEZE_REQ \ (DP_PRM_LOCK_REQ | DP_PRM_UNLOCK_REQ | DP_PRM_SYNC_REQ | DP_PRM_FREEZE_REQ | \
| DP_PRM_WD_ON) DP_PRM_WD_ON)
/*--- DP SLAVE GLOBAL CONTROL BITS -----------------------------------------*/ /*--- DP SLAVE GLOBAL CONTROL BITS -----------------------------------------*/
...@@ -244,8 +209,8 @@ ...@@ -244,8 +209,8 @@
#define DP_CONTROL_CLEAR_DATA 0x02 #define DP_CONTROL_CLEAR_DATA 0x02
#define DP_CONTROL_COMMAND \ #define DP_CONTROL_COMMAND \
(DP_CONTROL_SYNC | DP_CONTROL_UNSYNC | DP_CONTROL_FREEZE \ (DP_CONTROL_SYNC | DP_CONTROL_UNSYNC | DP_CONTROL_FREEZE | \
| DP_CONTROL_UNFREEZE | DP_CONTROL_CLEAR_DATA) DP_CONTROL_UNFREEZE | DP_CONTROL_CLEAR_DATA)
/*--- DP AREA CODES --------------------------------------------------------*/ /*--- DP AREA CODES --------------------------------------------------------*/
...@@ -313,8 +278,8 @@ ...@@ -313,8 +278,8 @@
#define DP_DIAG_2_PRM_REQ 0x01 #define DP_DIAG_2_PRM_REQ 0x01
#define DP_DIAG_2_STATUS \ #define DP_DIAG_2_STATUS \
(DP_DIAG_2_DEACTIVATED | DP_DIAG_2_SYNC_MODE | DP_DIAG_2_FREEZE_MODE \ (DP_DIAG_2_DEACTIVATED | DP_DIAG_2_SYNC_MODE | DP_DIAG_2_FREEZE_MODE | \
| DP_DIAG_2_WD_ON | DP_DIAG_2_PRM_REQ) DP_DIAG_2_WD_ON | DP_DIAG_2_PRM_REQ)
#define DP_DIAG_3_EXT_DIAG_OVERFLOW 0x80 #define DP_DIAG_3_EXT_DIAG_OVERFLOW 0x80
...@@ -367,7 +332,8 @@ ...@@ -367,7 +332,8 @@
/*--- DP SLAVE PARAMETERIZATION DATA ---------------------------------------*/ /*--- DP SLAVE PARAMETERIZATION DATA ---------------------------------------*/
typedef struct _T_DP_PRM_DATA { typedef struct _T_DP_PRM_DATA
{
USIGN16 prm_data_len; /* 9..DP_MAX_PRM_DATA_LEN */ USIGN16 prm_data_len; /* 9..DP_MAX_PRM_DATA_LEN */
OCTET station_status; /* DP_PRM_xxx */ OCTET station_status; /* DP_PRM_xxx */
OCTET wd_fact_1; /* watch dog time factors */ OCTET wd_fact_1; /* watch dog time factors */
...@@ -381,7 +347,8 @@ typedef struct _T_DP_PRM_DATA { ...@@ -381,7 +347,8 @@ typedef struct _T_DP_PRM_DATA {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_CFG_DATA { typedef struct _T_DP_CFG_DATA
{
USIGN16 cfg_data_len; /* 2..244 */ USIGN16 cfg_data_len; /* 2..244 */
/* OCTET cfg_data [cfg_data_len - 2]; */ /* OCTET cfg_data [cfg_data_len - 2]; */
...@@ -389,7 +356,8 @@ typedef struct _T_DP_CFG_DATA { ...@@ -389,7 +356,8 @@ typedef struct _T_DP_CFG_DATA {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_AAT_DATA { typedef struct _T_DP_AAT_DATA
{
USIGN16 aat_data_len; /* 2..2^16-31 */ USIGN16 aat_data_len; /* 2..2^16-31 */
USIGN8 number_inputs; /* 0..244 */ USIGN8 number_inputs; /* 0..244 */
USIGN8 number_outputs; /* 0..244 */ USIGN8 number_outputs; /* 0..244 */
...@@ -400,7 +368,8 @@ typedef struct _T_DP_AAT_DATA { ...@@ -400,7 +368,8 @@ typedef struct _T_DP_AAT_DATA {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_USER_DATA { typedef struct _T_DP_SLAVE_USER_DATA
{
USIGN16 slave_user_data_len; /* 2..2^16-31 */ USIGN16 slave_user_data_len; /* 2..2^16-31 */
/* OCTET slave_user_data [slave_user_data_len - 2]; */ /* OCTET slave_user_data [slave_user_data_len - 2]; */
...@@ -408,7 +377,8 @@ typedef struct _T_DP_SLAVE_USER_DATA { ...@@ -408,7 +377,8 @@ typedef struct _T_DP_SLAVE_USER_DATA {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_PARA_SET { typedef struct _T_DP_SLAVE_PARA_SET
{
USIGN16 slave_para_len; /* 0..MAX_SLAVE_PARA_LEN */ USIGN16 slave_para_len; /* 0..MAX_SLAVE_PARA_LEN */
USIGN8 sl_flag; /* DP_SL_ACTIVE, DP_SL_FLAG_NEW_PRM */ USIGN8 sl_flag; /* DP_SL_ACTIVE, DP_SL_FLAG_NEW_PRM */
USIGN8 slave_type; /* DP_SLAVE_TYPE_DP */ USIGN8 slave_type; /* DP_SLAVE_TYPE_DP */
...@@ -422,7 +392,8 @@ typedef struct _T_DP_SLAVE_PARA_SET { ...@@ -422,7 +392,8 @@ typedef struct _T_DP_SLAVE_PARA_SET {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_BUS_PARA_SET { typedef struct _T_DP_BUS_PARA_SET
{
USIGN16 bus_para_len; /* 66..2^16-1 */ USIGN16 bus_para_len; /* 66..2^16-1 */
USIGN8 fdl_add; /* 0..125 */ USIGN8 fdl_add; /* 0..125 */
USIGN8 baud_rate; /* DP_xBAUD_xxx */ USIGN8 baud_rate; /* DP_xBAUD_xxx */
...@@ -448,7 +419,8 @@ typedef struct _T_DP_BUS_PARA_SET { ...@@ -448,7 +419,8 @@ typedef struct _T_DP_BUS_PARA_SET {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_DIAG_DATA { typedef struct _T_DP_DIAG_DATA
{
OCTET station_status_1; /* DP_DIAG_1_xxx */ OCTET station_status_1; /* DP_DIAG_1_xxx */
OCTET station_status_2; /* DP_DIAG_2_xxx */ OCTET station_status_2; /* DP_DIAG_2_xxx */
OCTET station_status_3; /* DP_DIAG_3_xxx */ OCTET station_status_3; /* DP_DIAG_3_xxx */
...@@ -460,7 +432,8 @@ typedef struct _T_DP_DIAG_DATA { ...@@ -460,7 +432,8 @@ typedef struct _T_DP_DIAG_DATA {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_MASTER_STATUS { typedef struct _T_DP_MASTER_STATUS
{
OCTET usif_state; /* DP_OP_MODE_xxx */ OCTET usif_state; /* DP_OP_MODE_xxx */
USIGN8 ident_number_high; /* alignment problem in DIN 19245-3 !!! */ USIGN8 ident_number_high; /* alignment problem in DIN 19245-3 !!! */
USIGN8 ident_number_low; /* USIGN16 ident_number at odd address !!! */ USIGN8 ident_number_low; /* USIGN16 ident_number at odd address !!! */
...@@ -474,7 +447,8 @@ typedef struct _T_DP_MASTER_STATUS { ...@@ -474,7 +447,8 @@ typedef struct _T_DP_MASTER_STATUS {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_PARAM_SLAVE_INFO { typedef struct _T_DP_SLAVE_PARAM_SLAVE_INFO
{
USIGN16 diag_entries; /* available DIAG messages */ USIGN16 diag_entries; /* available DIAG messages */
USIGN16 offset_inputs; /* offset of input area within I/O memory */ USIGN16 offset_inputs; /* offset of input area within I/O memory */
USIGN16 offset_outputs; /* offset of output area within I/O memory */ USIGN16 offset_outputs; /* offset of output area within I/O memory */
...@@ -487,7 +461,8 @@ typedef struct _T_DP_SLAVE_PARAM_SLAVE_INFO { ...@@ -487,7 +461,8 @@ typedef struct _T_DP_SLAVE_PARAM_SLAVE_INFO {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_PARAM_SYS_INFO { typedef struct _T_DP_SLAVE_PARAM_SYS_INFO
{
USIGN8 loaded_slaves; /* number downloaded slaves */ USIGN8 loaded_slaves; /* number downloaded slaves */
USIGN8 active_slaves; /* number active slaves */ USIGN8 active_slaves; /* number active slaves */
INT16 diag_entries; /* number available DIAG messages */ INT16 diag_entries; /* number available DIAG messages */
...@@ -497,7 +472,8 @@ typedef struct _T_DP_SLAVE_PARAM_SYS_INFO { ...@@ -497,7 +472,8 @@ typedef struct _T_DP_SLAVE_PARAM_SYS_INFO {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SET_IDENT_NUMBER { typedef struct _T_DP_SET_IDENT_NUMBER
{
USIGN16 ident_number; /* new master ident_number */ USIGN16 ident_number; /* new master ident_number */
OCTET dp_hardware_version; /* vendor specific release information */ OCTET dp_hardware_version; /* vendor specific release information */
OCTET dp_firmware_version; OCTET dp_firmware_version;
...@@ -510,7 +486,8 @@ typedef struct _T_DP_SET_IDENT_NUMBER { ...@@ -510,7 +486,8 @@ typedef struct _T_DP_SET_IDENT_NUMBER {
/*--- DP USIF SERVICE STRUCTURES -------------------------------------------*/ /*--- DP USIF SERVICE STRUCTURES -------------------------------------------*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_INIT_MASTER_REQ { typedef struct _T_DP_INIT_MASTER_REQ
{
USIGN8 master_default_address; /* station address for default BP */ USIGN8 master_default_address; /* station address for default BP */
PB_BOOL master_class2; /* use M2 requester functionality ? */ PB_BOOL master_class2; /* use M2 requester functionality ? */
STRINGV master_class2_name[32]; /* vendor name of M2 */ STRINGV master_class2_name[32]; /* vendor name of M2 */
...@@ -529,14 +506,16 @@ typedef struct _T_DP_INIT_MASTER_REQ { ...@@ -529,14 +506,16 @@ typedef struct _T_DP_INIT_MASTER_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_INIT_MASTER_CON { typedef struct _T_DP_INIT_MASTER_CON
{
USIGN16 status; /* OK, IV, NO */ USIGN16 status; /* OK, IV, NO */
} T_DP_INIT_MASTER_CON; } T_DP_INIT_MASTER_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_EXIT_MASTER_CON { typedef struct _T_DP_EXIT_MASTER_CON
{
USIGN16 status; /* OK, NO */ USIGN16 status; /* OK, NO */
} T_DP_EXIT_MASTER_CON; } T_DP_EXIT_MASTER_CON;
...@@ -563,7 +542,8 @@ typedef struct _T_DP_START_SEQ_IND /* MM: req_add --> function_num */ ...@@ -563,7 +542,8 @@ typedef struct _T_DP_START_SEQ_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_START_SEQ_RES_CON { typedef struct _T_DP_START_SEQ_RES_CON
{
USIGN16 status; /* status of start sequence service */ USIGN16 status; /* status of start sequence service */
USIGN8 max_len_data_unit; /* 1..240 */ USIGN8 max_len_data_unit; /* 1..240 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -590,7 +570,8 @@ typedef struct _T_DP_END_SEQ_IND /* MM: req_add --> function_num */ ...@@ -590,7 +570,8 @@ typedef struct _T_DP_END_SEQ_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_END_SEQ_RES_CON { typedef struct _T_DP_END_SEQ_RES_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, RE, */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, RE, */
/* NE, AD, IP, NI, SE, SC, EA, LE */ /* NE, AD, IP, NI, SE, SC, EA, LE */
...@@ -598,7 +579,8 @@ typedef struct _T_DP_END_SEQ_RES_CON { ...@@ -598,7 +579,8 @@ typedef struct _T_DP_END_SEQ_RES_CON {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_END_SEQ_LOC_IND { typedef struct _T_DP_END_SEQ_LOC_IND
{
USIGN16 status; /* TO */ USIGN16 status; /* TO */
} T_DP_END_SEQ_LOC_IND; } T_DP_END_SEQ_LOC_IND;
...@@ -629,7 +611,8 @@ typedef struct _T_DP_DOWNLOAD_IND /* MM: req_add --> function_num */ ...@@ -629,7 +611,8 @@ typedef struct _T_DP_DOWNLOAD_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_DOWNLOAD_RES_CON { typedef struct _T_DP_DOWNLOAD_RES_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, */
/* RE, NE, AD, EA, SC, NI, LE */ /* RE, NE, AD, EA, SC, NI, LE */
...@@ -661,7 +644,8 @@ typedef struct _T_DP_UPLOAD_IND /* MM: req_add --> function_num */ ...@@ -661,7 +644,8 @@ typedef struct _T_DP_UPLOAD_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_UPLOAD_RES_CON { typedef struct _T_DP_UPLOAD_RES_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, */
/* RE, NE, AD, EA, SC, NI, LE */ /* RE, NE, AD, EA, SC, NI, LE */
USIGN16 data_len; /* 1..DP_MAX_UPLOAD_DATA_LEN */ USIGN16 data_len; /* 1..DP_MAX_UPLOAD_DATA_LEN */
...@@ -693,7 +677,8 @@ typedef struct _T_DP_ACT_PARAM_IND /* MM: req_add --> function_num */ ...@@ -693,7 +677,8 @@ typedef struct _T_DP_ACT_PARAM_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_ACT_PARAM_RES_CON { typedef struct _T_DP_ACT_PARAM_RES_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, RE, */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, FE, RE, */
/* NE, AD, IP, SC, NI, DI, EA, LE */ /* NE, AD, IP, SC, NI, DI, EA, LE */
...@@ -719,7 +704,8 @@ typedef struct _T_DP_GET_MASTER_DIAG_IND /* MM: req_add --> function_num */ ...@@ -719,7 +704,8 @@ typedef struct _T_DP_GET_MASTER_DIAG_IND /* MM: req_add --> function_num */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_GET_MASTER_DIAG_RES_CON { typedef struct _T_DP_GET_MASTER_DIAG_RES_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, TO, */
/* FE, RE, NE, AD, IP, EA, LE */ /* FE, RE, NE, AD, IP, EA, LE */
USIGN16 data_len; /* 1..DP_MAX_MASTER_DIAG_DATA_LEN */ USIGN16 data_len; /* 1..DP_MAX_MASTER_DIAG_DATA_LEN */
...@@ -733,7 +719,8 @@ typedef VOID T_DP_GET_SLAVE_DIAG_REQ; ...@@ -733,7 +719,8 @@ typedef VOID T_DP_GET_SLAVE_DIAG_REQ;
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_GET_SLAVE_DIAG_CON { typedef struct _T_DP_GET_SLAVE_DIAG_CON
{
USIGN16 status; /* OK, NO */ USIGN16 status; /* OK, NO */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -753,7 +740,8 @@ typedef VOID T_DP_DATA_TRANSFER_REQ; /* no SDU */ ...@@ -753,7 +740,8 @@ typedef VOID T_DP_DATA_TRANSFER_REQ; /* no SDU */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_DATA_TRANSFER_CON { typedef struct _T_DP_DATA_TRANSFER_CON
{
USIGN16 status; /* OK, NO */ USIGN16 status; /* OK, NO */
INT16 diag_entries; /* -1..DP_MAX_SLAVE_DIAG_ENTRIES */ INT16 diag_entries; /* -1..DP_MAX_SLAVE_DIAG_ENTRIES */
...@@ -761,7 +749,8 @@ typedef struct _T_DP_DATA_TRANSFER_CON { ...@@ -761,7 +749,8 @@ typedef struct _T_DP_DATA_TRANSFER_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_GET_SLAVE_PARAM_REQ { typedef struct _T_DP_GET_SLAVE_PARAM_REQ
{
USIGN8 identifier; /* DP_SLAVE_PARAM_xxx */ USIGN8 identifier; /* DP_SLAVE_PARAM_xxx */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
...@@ -769,7 +758,8 @@ typedef struct _T_DP_GET_SLAVE_PARAM_REQ { ...@@ -769,7 +758,8 @@ typedef struct _T_DP_GET_SLAVE_PARAM_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_GET_SLAVE_PARAM_CON { typedef struct _T_DP_GET_SLAVE_PARAM_CON
{
USIGN16 status; /* OK, NO, IV, NE */ USIGN16 status; /* OK, NO, IV, NE */
USIGN16 data_len; /* 0..244 */ USIGN16 data_len; /* 0..244 */
/* OCTET slave_param_data [data_len]; data_len */ /* OCTET slave_param_data [data_len]; data_len */
...@@ -778,7 +768,8 @@ typedef struct _T_DP_GET_SLAVE_PARAM_CON { ...@@ -778,7 +768,8 @@ typedef struct _T_DP_GET_SLAVE_PARAM_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_SET_BUSPARAMETER_REQ { typedef struct _T_DP_SET_BUSPARAMETER_REQ
{
USIGN8 bp_flag; /* DP_BP_ERROR_ACTION */ USIGN8 bp_flag; /* DP_BP_ERROR_ACTION */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
USIGN16 min_slave_interval; /* 1..2^16-1 [100 micros] */ USIGN16 min_slave_interval; /* 1..2^16-1 [100 micros] */
...@@ -792,14 +783,16 @@ typedef struct _T_DP_SET_BUSPARAMETER_REQ { ...@@ -792,14 +783,16 @@ typedef struct _T_DP_SET_BUSPARAMETER_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SET_BUSPARAMETER_CON { typedef struct _T_DP_SET_BUSPARAMETER_CON
{
USIGN16 status; /* OK, IV, NO */ USIGN16 status; /* OK, IV, NO */
} T_DP_SET_BUSPARAMETER_CON; } T_DP_SET_BUSPARAMETER_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_SET_MASTER_PARAM_REQ { typedef struct _T_DP_SET_MASTER_PARAM_REQ
{
USIGN8 identifier; /* DP_SET_xxx */ USIGN8 identifier; /* DP_SET_xxx */
USIGN8 data_len; /* 0..DP_MAX_TELEGRAM_LEN */ USIGN8 data_len; /* 0..DP_MAX_TELEGRAM_LEN */
/* OCTET data [data_len]; data dependent on identifier */ /* OCTET data [data_len]; data dependent on identifier */
...@@ -808,7 +801,8 @@ typedef struct _T_DP_SET_MASTER_PARAM_REQ { ...@@ -808,7 +801,8 @@ typedef struct _T_DP_SET_MASTER_PARAM_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SET_MASTER_PARAM_CON { typedef struct _T_DP_SET_MASTER_PARAM_CON
{
USIGN16 status; /* OK, IV, NO */ USIGN16 status; /* OK, IV, NO */
} T_DP_SET_MASTER_PARAM_CON; } T_DP_SET_MASTER_PARAM_CON;
...@@ -817,7 +811,8 @@ typedef struct _T_DP_SET_MASTER_PARAM_CON { ...@@ -817,7 +811,8 @@ typedef struct _T_DP_SET_MASTER_PARAM_CON {
/*--- DP DDLM SERVICE STRUCTURES -------------------------------------------*/ /*--- DP DDLM SERVICE STRUCTURES -------------------------------------------*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_DIAG_REQ { typedef struct _T_DP_SLAVE_DIAG_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -825,7 +820,8 @@ typedef struct _T_DP_SLAVE_DIAG_REQ { ...@@ -825,7 +820,8 @@ typedef struct _T_DP_SLAVE_DIAG_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SLAVE_DIAG_CON { typedef struct _T_DP_SLAVE_DIAG_CON
{
USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */ USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
...@@ -836,7 +832,8 @@ typedef struct _T_DP_SLAVE_DIAG_CON { ...@@ -836,7 +832,8 @@ typedef struct _T_DP_SLAVE_DIAG_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_DATA_EXCHANGE_REQ { typedef struct _T_DP_DATA_EXCHANGE_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
USIGN16 outp_data_len; /* 0..DP_MAX_OUTPUT_DATA_LEN */ USIGN16 outp_data_len; /* 0..DP_MAX_OUTPUT_DATA_LEN */
...@@ -846,7 +843,8 @@ typedef struct _T_DP_DATA_EXCHANGE_REQ { ...@@ -846,7 +843,8 @@ typedef struct _T_DP_DATA_EXCHANGE_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_DATA_EXCHANGE_CON { typedef struct _T_DP_DATA_EXCHANGE_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
PB_BOOL diag_flag; /* DP_TRUE: DP Slave diagnostic data available */ PB_BOOL diag_flag; /* DP_TRUE: DP Slave diagnostic data available */
...@@ -857,7 +855,8 @@ typedef struct _T_DP_DATA_EXCHANGE_CON { ...@@ -857,7 +855,8 @@ typedef struct _T_DP_DATA_EXCHANGE_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_RD_INP_REQ { typedef struct _T_DP_RD_INP_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -865,7 +864,8 @@ typedef struct _T_DP_RD_INP_REQ { ...@@ -865,7 +864,8 @@ typedef struct _T_DP_RD_INP_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_RD_INP_CON { typedef struct _T_DP_RD_INP_CON
{
USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */ USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
...@@ -876,7 +876,8 @@ typedef struct _T_DP_RD_INP_CON { ...@@ -876,7 +876,8 @@ typedef struct _T_DP_RD_INP_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_RD_OUTP_REQ { typedef struct _T_DP_RD_OUTP_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -884,7 +885,8 @@ typedef struct _T_DP_RD_OUTP_REQ { ...@@ -884,7 +885,8 @@ typedef struct _T_DP_RD_OUTP_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_RD_OUTP_CON { typedef struct _T_DP_RD_OUTP_CON
{
USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */ USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
...@@ -895,7 +897,8 @@ typedef struct _T_DP_RD_OUTP_CON { ...@@ -895,7 +897,8 @@ typedef struct _T_DP_RD_OUTP_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_SET_PRM_REQ { typedef struct _T_DP_SET_PRM_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
T_DP_PRM_DATA prm_data; /* 9..DP_MAX_PRM_DATA_LEN */ T_DP_PRM_DATA prm_data; /* 9..DP_MAX_PRM_DATA_LEN */
...@@ -904,14 +907,16 @@ typedef struct _T_DP_SET_PRM_REQ { ...@@ -904,14 +907,16 @@ typedef struct _T_DP_SET_PRM_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SET_PRM_CON { typedef struct _T_DP_SET_PRM_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */
} T_DP_SET_PRM_CON; } T_DP_SET_PRM_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_CHK_CFG_REQ { typedef struct _T_DP_CHK_CFG_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
T_DP_CFG_DATA cfg_data; /* 3..DP_MAX_CFG_DATA_LEN */ T_DP_CFG_DATA cfg_data; /* 3..DP_MAX_CFG_DATA_LEN */
...@@ -920,14 +925,16 @@ typedef struct _T_DP_CHK_CFG_REQ { ...@@ -920,14 +925,16 @@ typedef struct _T_DP_CHK_CFG_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_CHK_CFG_CON { typedef struct _T_DP_CHK_CFG_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */
} T_DP_CHK_CFG_CON; } T_DP_CHK_CFG_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_GET_CFG_REQ { typedef struct _T_DP_GET_CFG_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -935,7 +942,8 @@ typedef struct _T_DP_GET_CFG_REQ { ...@@ -935,7 +942,8 @@ typedef struct _T_DP_GET_CFG_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_GET_CFG_CON { typedef struct _T_DP_GET_CFG_CON
{
USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */ USIGN16 status; /* OK, DS, NA, RS, UE, NR, RE */
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
...@@ -945,7 +953,8 @@ typedef struct _T_DP_GET_CFG_CON { ...@@ -945,7 +953,8 @@ typedef struct _T_DP_GET_CFG_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_GLOBAL_CONTROL_REQ { typedef struct _T_DP_GLOBAL_CONTROL_REQ
{
USIGN8 rem_add; /* 0..126, 127 DP_GLOBAL_STATION_ADDRESS */ USIGN8 rem_add; /* 0..126, 127 DP_GLOBAL_STATION_ADDRESS */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
USIGN8 control_command; /* DP_CONTROL_xxx */ USIGN8 control_command; /* DP_CONTROL_xxx */
...@@ -955,7 +964,8 @@ typedef struct _T_DP_GLOBAL_CONTROL_REQ { ...@@ -955,7 +964,8 @@ typedef struct _T_DP_GLOBAL_CONTROL_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_GLOBAL_CONTROL_CON { typedef struct _T_DP_GLOBAL_CONTROL_CON
{
USIGN16 status; /* OK, DS, NO, IV */ USIGN16 status; /* OK, DS, NO, IV */
USIGN8 rem_add; /* 0..126, 127 DP_GLOBAL_STATION_ADDRESS */ USIGN8 rem_add; /* 0..126, 127 DP_GLOBAL_STATION_ADDRESS */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -964,7 +974,8 @@ typedef struct _T_DP_GLOBAL_CONTROL_CON { ...@@ -964,7 +974,8 @@ typedef struct _T_DP_GLOBAL_CONTROL_CON {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_SET_SLAVE_ADD_REQ { typedef struct _T_DP_SET_SLAVE_ADD_REQ
{
USIGN8 rem_add; /* 0..125, 126 DP_DEFAULT_SLAVE_ADDRESS */ USIGN8 rem_add; /* 0..125, 126 DP_DEFAULT_SLAVE_ADDRESS */
USIGN8 dummy; /* PCI alignment byte */ USIGN8 dummy; /* PCI alignment byte */
USIGN16 rem_slave_data_len; /* 0..DP_MAX_REM_SLAVE_DATA_LEN */ USIGN16 rem_slave_data_len; /* 0..DP_MAX_REM_SLAVE_DATA_LEN */
...@@ -978,7 +989,8 @@ typedef struct _T_DP_SET_SLAVE_ADD_REQ { ...@@ -978,7 +989,8 @@ typedef struct _T_DP_SET_SLAVE_ADD_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_SET_SLAVE_ADD_CON { typedef struct _T_DP_SET_SLAVE_ADD_CON
{
USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */ USIGN16 status; /* OK, DS, NA, RS, RR, UE, RE */
USIGN8 rem_add; /* 0..125, 126 DP_DEFAULT_SLAVE_ADDRESS */ USIGN8 rem_add; /* 0..125, 126 DP_DEFAULT_SLAVE_ADDRESS */
USIGN8 dummy; /* SDU alignment byte */ USIGN8 dummy; /* SDU alignment byte */
...@@ -996,14 +1008,16 @@ typedef struct _T_DP_ACT_PARA_BRCT_REQ /* MM: function_num --> rem_add */ ...@@ -996,14 +1008,16 @@ typedef struct _T_DP_ACT_PARA_BRCT_REQ /* MM: function_num --> rem_add */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_ACT_PARA_BRCT_CON { typedef struct _T_DP_ACT_PARA_BRCT_CON
{
USIGN16 status; /* OK, DS */ USIGN16 status; /* OK, DS */
} T_DP_ACT_PARA_BRCT_CON; } T_DP_ACT_PARA_BRCT_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DP_FM2_EVENT_IND { typedef struct _T_DP_FM2_EVENT_IND
{
USIGN16 reason; /* FM2 event message */ USIGN16 reason; /* FM2 event message */
} T_DP_FM2_EVENT_IND; } T_DP_FM2_EVENT_IND;
...@@ -1012,7 +1026,8 @@ typedef struct _T_DP_FM2_EVENT_IND { ...@@ -1012,7 +1026,8 @@ typedef struct _T_DP_FM2_EVENT_IND {
/*--- DPV1 DATA STRUCTURES -------------------------------------------------*/ /*--- DPV1 DATA STRUCTURES -------------------------------------------------*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_ADDR { typedef struct _T_ADDR
{
USIGN8 api; /* default: set to 0 */ USIGN8 api; /* default: set to 0 */
USIGN8 scl; /* default: set to 0 */ USIGN8 scl; /* default: set to 0 */
OCTET network_address[6]; /* use only when [d|s]_type is set to 1 */ OCTET network_address[6]; /* use only when [d|s]_type is set to 1 */
...@@ -1023,7 +1038,8 @@ typedef struct _T_ADDR { ...@@ -1023,7 +1038,8 @@ typedef struct _T_ADDR {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_ADD_ADDR { typedef struct _T_ADD_ADDR
{
USIGN8 s_type; /* default: set to 0 */ USIGN8 s_type; /* default: set to 0 */
USIGN8 s_len; /* default: set to 2 */ USIGN8 s_len; /* default: set to 2 */
USIGN8 d_type; /* default: set to 0 */ USIGN8 d_type; /* default: set to 0 */
...@@ -1035,7 +1051,8 @@ typedef struct _T_ADD_ADDR { ...@@ -1035,7 +1051,8 @@ typedef struct _T_ADD_ADDR {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_INITIATE_REQ { typedef struct _T_DP_INITIATE_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 reserved[3]; USIGN8 reserved[3];
USIGN16 send_timeout; /* 1..2^16-1 [10 ms] */ USIGN16 send_timeout; /* 1..2^16-1 [10 ms] */
...@@ -1051,12 +1068,13 @@ typedef struct _T_DP_INITIATE_REQ { ...@@ -1051,12 +1068,13 @@ typedef struct _T_DP_INITIATE_REQ {
#define DP_INITIATE_S_ADDR(x) \ #define DP_INITIATE_S_ADDR(x) \
((T_ADDR FAR*)(((USIGN8 FAR*)&((x)->add_addr_param)) + sizeof(T_ADD_ADDR))) ((T_ADDR FAR*)(((USIGN8 FAR*)&((x)->add_addr_param)) + sizeof(T_ADD_ADDR)))
#define DP_INITIATE_D_ADDR(x) \ #define DP_INITIATE_D_ADDR(x) \
((T_ADDR FAR*)(((USIGN8 FAR*)&((x)->add_addr_param)) + sizeof(T_ADD_ADDR) \ ((T_ADDR FAR*)(((USIGN8 FAR*)&((x)->add_addr_param)) + sizeof(T_ADD_ADDR) + \
+ (x)->add_addr_param.s_len)) (x)->add_addr_param.s_len))
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_INITIATE_CON { typedef struct _T_DP_INITIATE_CON
{
USIGN16 status; USIGN16 status;
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 max_len_data_unit; /* 0..DP_MSAC2_DATA_LEN */ USIGN8 max_len_data_unit; /* 0..DP_MSAC2_DATA_LEN */
...@@ -1069,7 +1087,8 @@ typedef struct _T_DP_INITIATE_CON { ...@@ -1069,7 +1087,8 @@ typedef struct _T_DP_INITIATE_CON {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_READ_REQ { typedef struct _T_DP_READ_REQ
{
USIGN8 rem_add; /* 0..126, interpreted only when MSAC_C1 */ USIGN8 rem_add; /* 0..126, interpreted only when MSAC_C1 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
USIGN8 index; /* 0..254, 255 is reserved */ USIGN8 index; /* 0..254, 255 is reserved */
...@@ -1079,7 +1098,8 @@ typedef struct _T_DP_READ_REQ { ...@@ -1079,7 +1098,8 @@ typedef struct _T_DP_READ_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_READ_CON { typedef struct _T_DP_READ_CON
{
USIGN16 status; USIGN16 status;
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
...@@ -1091,7 +1111,8 @@ typedef struct _T_DP_READ_CON { ...@@ -1091,7 +1111,8 @@ typedef struct _T_DP_READ_CON {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_WRITE_REQ { typedef struct _T_DP_WRITE_REQ
{
USIGN8 rem_add; /* 0..126, interpreted only when MSAC_C1 */ USIGN8 rem_add; /* 0..126, interpreted only when MSAC_C1 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
USIGN8 index; /* 0..254, 255 is reserved */ USIGN8 index; /* 0..254, 255 is reserved */
...@@ -1102,7 +1123,8 @@ typedef struct _T_DP_WRITE_REQ { ...@@ -1102,7 +1123,8 @@ typedef struct _T_DP_WRITE_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_WRITE_CON { typedef struct _T_DP_WRITE_CON
{
USIGN16 status; USIGN16 status;
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
...@@ -1112,7 +1134,8 @@ typedef struct _T_DP_WRITE_CON { ...@@ -1112,7 +1134,8 @@ typedef struct _T_DP_WRITE_CON {
} T_DP_WRITE_CON; } T_DP_WRITE_CON;
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_DATA_TRANSPORT_REQ { typedef struct _T_DP_DATA_TRANSPORT_REQ
{
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
USIGN8 index; /* 0..254, 255 is reserved */ USIGN8 index; /* 0..254, 255 is reserved */
...@@ -1123,7 +1146,8 @@ typedef struct _T_DP_DATA_TRANSPORT_REQ { ...@@ -1123,7 +1146,8 @@ typedef struct _T_DP_DATA_TRANSPORT_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_DATA_TRANSPORT_CON { typedef struct _T_DP_DATA_TRANSPORT_CON
{
USIGN16 status; USIGN16 status;
USIGN8 rem_add; /* 0..126 */ USIGN8 rem_add; /* 0..126 */
USIGN8 slot_number; /* 0..254, 255 is reserved */ USIGN8 slot_number; /* 0..254, 255 is reserved */
...@@ -1135,7 +1159,8 @@ typedef struct _T_DP_DATA_TRANSPORT_CON { ...@@ -1135,7 +1159,8 @@ typedef struct _T_DP_DATA_TRANSPORT_CON {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_ABORT_REQ { typedef struct _T_DP_ABORT_REQ
{
USIGN8 subnet; /* 0, 1, 2, others reserved */ USIGN8 subnet; /* 0, 1, 2, others reserved */
USIGN8 reason; /* user reason code: 0..0x3F */ USIGN8 reason; /* user reason code: 0..0x3F */
...@@ -1143,7 +1168,8 @@ typedef struct _T_DP_ABORT_REQ { ...@@ -1143,7 +1168,8 @@ typedef struct _T_DP_ABORT_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_ABORT_IND { typedef struct _T_DP_ABORT_IND
{
PB_BOOL locally_generated; PB_BOOL locally_generated;
USIGN8 subnet; /* 0, 1, 2, others reserved */ USIGN8 subnet; /* 0, 1, 2, others reserved */
USIGN8 reason; /* reason codes: see DPV1 specification */ USIGN8 reason; /* reason codes: see DPV1 specification */
...@@ -1154,7 +1180,8 @@ typedef struct _T_DP_ABORT_IND { ...@@ -1154,7 +1180,8 @@ typedef struct _T_DP_ABORT_IND {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DP_ERROR_CON { typedef struct _T_DP_ERROR_CON
{
USIGN16 status; USIGN16 status;
USIGN8 rem_add; USIGN8 rem_add;
USIGN8 error_decode; USIGN8 error_decode;
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/* */ /* */
/* Filename : PB_DPS.H */ /* Filename : PB_DPS.H */
/* Version : 5.22.0.00.release */ /* Version : 1.30.0.00.release SPC3 based */
/* Date : 26-February-1999 */ /* : 2.06.0.00.release ASPC2 based */
/* Author : SOFTING AG */ /* Date : July-2009 */
/* Author : SOFTING */
/* */ /* */
/* Description : This file contains the global defines and types of DPS */ /* Description : This file contains the global defines and types of DPS */
/* */ /* */
...@@ -111,6 +77,9 @@ ...@@ -111,6 +77,9 @@
#define DPS_MAX_CFG_DATA_LEN DP_MAX_CFG_DATA_LEN #define DPS_MAX_CFG_DATA_LEN DP_MAX_CFG_DATA_LEN
#define DPS_MIN_SSA_DATA_LEN 4 #define DPS_MIN_SSA_DATA_LEN 4
#define DPS_MAX_OUTPUT_DATA_LEN 244
#define DPS_MAX_INPUT_DATA_LEN 244
/****************************************************************************/ /****************************************************************************/
/*** DPS SERVICE CODES ******************************************************/ /*** DPS SERVICE CODES ******************************************************/
/****************************************************************************/ /****************************************************************************/
...@@ -179,12 +148,12 @@ ...@@ -179,12 +148,12 @@
#define DPS_DIAG_BIT_WAIT_UNTIL_FETCHED 0x80 #define DPS_DIAG_BIT_WAIT_UNTIL_FETCHED 0x80
#define DPS_DIAG_BIT_STATUS_MASK \ #define DPS_DIAG_BIT_STATUS_MASK \
(DPS_DIAG_BIT_EXT_DIAG | DPS_DIAG_BIT_STAT_DIAG \ (DPS_DIAG_BIT_EXT_DIAG | DPS_DIAG_BIT_STAT_DIAG | \
| DPS_DIAG_BIT_EXT_DIAG_OVERFLOW) DPS_DIAG_BIT_EXT_DIAG_OVERFLOW)
#define DPS_DIAG_BIT_MASK \ #define DPS_DIAG_BIT_MASK \
(DPS_DIAG_BIT_EXT_DIAG | DPS_DIAG_BIT_STAT_DIAG \ (DPS_DIAG_BIT_EXT_DIAG | DPS_DIAG_BIT_STAT_DIAG | \
| DPS_DIAG_BIT_EXT_DIAG_OVERFLOW | DPS_DIAG_BIT_WAIT_UNTIL_FETCHED) DPS_DIAG_BIT_EXT_DIAG_OVERFLOW | DPS_DIAG_BIT_WAIT_UNTIL_FETCHED)
/*--- DPS SPC3 SPECIAL USR_PRM_BYTE ----------------------------------------*/ /*--- DPS SPC3 SPECIAL USR_PRM_BYTE ----------------------------------------*/
...@@ -193,8 +162,8 @@ ...@@ -193,8 +162,8 @@
#define DPS_SPC3_USR_PRM_WD_BASE_1MS 0x04 #define DPS_SPC3_USR_PRM_WD_BASE_1MS 0x04
#define DPS_SPC3_USR_PRM_MASK \ #define DPS_SPC3_USR_PRM_MASK \
(DPS_SPC3_USR_PRM_DISABLE_STARTBIT | DPS_SPC3_USR_PRM_DISABLE_STOPBIT \ (DPS_SPC3_USR_PRM_DISABLE_STARTBIT | DPS_SPC3_USR_PRM_DISABLE_STOPBIT | \
| DPS_SPC3_USR_PRM_WD_BASE_1MS) DPS_SPC3_USR_PRM_WD_BASE_1MS)
/*--- DPS INPUT / OUTPUT STATUS --------------------------------------------*/ /*--- DPS INPUT / OUTPUT STATUS --------------------------------------------*/
...@@ -216,7 +185,8 @@ ...@@ -216,7 +185,8 @@
/*--- DPS USER INTERFACE STRUCTURES ----------------------------------------*/ /*--- DPS USER INTERFACE STRUCTURES ----------------------------------------*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_INPUT_DATA_HEADER { typedef struct _T_DPS_INPUT_DATA_HEADER
{
USIGN8 input_data_len; /* length of DPS_USR input data, 0..244 */ USIGN8 input_data_len; /* length of DPS_USR input data, 0..244 */
USIGN8 input_state; /* status of input image: DPS_INPUT_STATE_xxx */ USIGN8 input_state; /* status of input image: DPS_INPUT_STATE_xxx */
...@@ -226,7 +196,8 @@ typedef struct _T_DPS_INPUT_DATA_HEADER { ...@@ -226,7 +196,8 @@ typedef struct _T_DPS_INPUT_DATA_HEADER {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_OUTPUT_DATA_HEADER { typedef struct _T_DPS_OUTPUT_DATA_HEADER
{
USIGN8 output_data_len; /* length of DP master output data, 0..244 */ USIGN8 output_data_len; /* length of DP master output data, 0..244 */
USIGN8 output_state; /* status of output image: DPS_OUTPUT_STATE_xxx */ USIGN8 output_state; /* status of output image: DPS_OUTPUT_STATE_xxx */
...@@ -236,7 +207,8 @@ typedef struct _T_DPS_OUTPUT_DATA_HEADER { ...@@ -236,7 +207,8 @@ typedef struct _T_DPS_OUTPUT_DATA_HEADER {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_CON_IND { typedef struct _T_DPS_CON_IND
{
USIGN16 status; USIGN16 status;
} T_DPS_CON_IND; } T_DPS_CON_IND;
...@@ -245,7 +217,8 @@ typedef struct _T_DPS_CON_IND { ...@@ -245,7 +217,8 @@ typedef struct _T_DPS_CON_IND {
/*--- DPS USIF SERVICE STRUCTURES ------------------------------------------*/ /*--- DPS USIF SERVICE STRUCTURES ------------------------------------------*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_INIT_SLAVE_REQ { typedef struct _T_DPS_INIT_SLAVE_REQ
{
USIGN8 USIGN8
slave_add; /* 0..125, DPS_DEFAULT_SLAVE_ADD, DPS_NON_VOLATILE_SLAVE_ADD */ slave_add; /* 0..125, DPS_DEFAULT_SLAVE_ADD, DPS_NON_VOLATILE_SLAVE_ADD */
USIGN8 min_tsdr; /* min. station delay responder, default 0, 11..255 */ USIGN8 min_tsdr; /* min. station delay responder, default 0, 11..255 */
...@@ -281,7 +254,8 @@ typedef struct _T_DPS_INIT_SLAVE_REQ { ...@@ -281,7 +254,8 @@ typedef struct _T_DPS_INIT_SLAVE_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_INIT_SLAVE_CON { typedef struct _T_DPS_INIT_SLAVE_CON
{
USIGN16 status; /* OK, IV, NO */ USIGN16 status; /* OK, IV, NO */
INT16 remaining_frame_memory; /* left memory for telegram buffers */ INT16 remaining_frame_memory; /* left memory for telegram buffers */
...@@ -294,7 +268,8 @@ typedef VOID T_DPS_EXIT_SLAVE_REQ; /* no request parameters */ ...@@ -294,7 +268,8 @@ typedef VOID T_DPS_EXIT_SLAVE_REQ; /* no request parameters */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_EXIT_SLAVE_CON { typedef struct _T_DPS_EXIT_SLAVE_CON
{
USIGN16 status; /* OK */ USIGN16 status; /* OK */
} T_DPS_EXIT_SLAVE_CON; } T_DPS_EXIT_SLAVE_CON;
...@@ -305,7 +280,8 @@ typedef VOID T_DPS_GET_STATUS_REQ; /* no request parameters */ ...@@ -305,7 +280,8 @@ typedef VOID T_DPS_GET_STATUS_REQ; /* no request parameters */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_GET_STATUS_CON_IND { typedef struct _T_DPS_GET_STATUS_CON_IND
{
USIGN16 status; /* OK, TO */ USIGN16 status; /* OK, TO */
USIGN8 slave_state; /* operation state of DP slave, DPS_STATE_xxx */ USIGN8 slave_state; /* operation state of DP slave, DPS_STATE_xxx */
...@@ -336,7 +312,8 @@ typedef struct _T_DPS_GET_STATUS_CON_IND { ...@@ -336,7 +312,8 @@ typedef struct _T_DPS_GET_STATUS_CON_IND {
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DPS_SLAVE_DIAG_REQ { typedef struct _T_DPS_SLAVE_DIAG_REQ
{
USIGN8 diag_state; /* diagnostic state of DP slave, DPS_DIAG_BIT_xxx */ USIGN8 diag_state; /* diagnostic state of DP slave, DPS_DIAG_BIT_xxx */
USIGN8 ext_diag_data_len; /* 0..DP_MAX_EXT_DIAG_DATA_LEN */ USIGN8 ext_diag_data_len; /* 0..DP_MAX_EXT_DIAG_DATA_LEN */
...@@ -346,14 +323,16 @@ typedef struct _T_DPS_SLAVE_DIAG_REQ { ...@@ -346,14 +323,16 @@ typedef struct _T_DPS_SLAVE_DIAG_REQ {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_SLAVE_DIAG_CON { typedef struct _T_DPS_SLAVE_DIAG_CON
{
USIGN16 status; /* OK, IV, NO */ USIGN16 status; /* OK, IV, NO */
} T_DPS_SLAVE_DIAG_CON; } T_DPS_SLAVE_DIAG_CON;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DPS_CHK_CFG_IND { typedef struct _T_DPS_CHK_CFG_IND
{
USIGN16 status; /* OK */ USIGN16 status; /* OK */
USIGN8 cfg_data_len; /* CFG from DP master, see EN 50170 */ USIGN8 cfg_data_len; /* CFG from DP master, see EN 50170 */
...@@ -365,14 +344,16 @@ typedef struct _T_DPS_CHK_CFG_IND { ...@@ -365,14 +344,16 @@ typedef struct _T_DPS_CHK_CFG_IND {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_CHK_CFG_RES { typedef struct _T_DPS_CHK_CFG_RES
{
USIGN16 status; /* OK, NO */ USIGN16 status; /* OK, NO */
} T_DPS_CHK_CFG_RES; } T_DPS_CHK_CFG_RES;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DPS_SET_PRM_IND { typedef struct _T_DPS_SET_PRM_IND
{
USIGN16 status; /* OK */ USIGN16 status; /* OK */
USIGN8 user_prm_data_len; /* 0..DP_MAX_USER_PRM_DATA_LEN */ USIGN8 user_prm_data_len; /* 0..DP_MAX_USER_PRM_DATA_LEN */
...@@ -396,14 +377,16 @@ typedef struct _T_DPS_SET_PRM_IND { ...@@ -396,14 +377,16 @@ typedef struct _T_DPS_SET_PRM_IND {
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
typedef struct _T_DPS_SET_PRM_RES { typedef struct _T_DPS_SET_PRM_RES
{
USIGN16 status; /* OK, NO */ USIGN16 status; /* OK, NO */
} T_DPS_SET_PRM_RES; } T_DPS_SET_PRM_RES;
/*==========================================================================*/ /*==========================================================================*/
typedef struct _T_DPS_SET_SLAVE_ADD_IND { typedef struct _T_DPS_SET_SLAVE_ADD_IND
{
USIGN16 status; /* OK */ USIGN16 status; /* OK */
USIGN8 rem_slave_data_len; /* 0..DP_MAX_REM_SLAVE_DATA_LEN */ USIGN8 rem_slave_data_len; /* 0..DP_MAX_REM_SLAVE_DATA_LEN */
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -49,9 +14,9 @@ ...@@ -49,9 +14,9 @@
/* PROFIBUS ABORT-, REJECT-, EVENT- and ERROR DEFINES and -TYPES */ /* PROFIBUS ABORT-, REJECT-, EVENT- and ERROR DEFINES and -TYPES */
/* */ /* */
/* Filename : PB_ERR.H */ /* Filename : PB_ERR.H */
/* Version : 5.26.1.00.release */ /* Version : 5.46.0.00.release */
/* Date : 27-June-2003 */ /* Date : October-2011 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the ABORT, REJECT, EVENT and ERROR */ /* Description : This file contains the ABORT, REJECT, EVENT and ERROR */
/* types and defines and the according reason codes. */ /* types and defines and the according reason codes. */
...@@ -791,8 +756,7 @@ ...@@ -791,8 +756,7 @@
#define E_IF_INIT_INVALID_PARAMETER 8 /* invalid initialize parameter */ #define E_IF_INIT_INVALID_PARAMETER 8 /* invalid initialize parameter */
#define E_IF_LOADER_ERROR 9 /* download firmware error */ #define E_IF_LOADER_ERROR 9 /* download firmware error */
#define E_IF_NO_CNTRL_RES 10 /* controller does not respond */ #define E_IF_NO_CNTRL_RES 10 /* controller does not respond */
#define E_IF_INVALID_CNTRL_TYPE_VERSION \ #define E_IF_INVALID_CNTRL_TYPE_VERSION 11 /* inv. controller type or SW \
11 /* inv. controller type or SW \
vers.*/ vers.*/
#define E_IF_INVALID_LAYER 12 /* invalid layer */ #define E_IF_INVALID_LAYER 12 /* invalid layer */
#define E_IF_INVALID_SERVICE 13 /* invalid service identifier */ #define E_IF_INVALID_SERVICE 13 /* invalid service identifier */
...@@ -807,7 +771,7 @@ ...@@ -807,7 +771,7 @@
#define E_IF_SERVICE_NOT_SUPPORTED 24 /* service not supported */ #define E_IF_SERVICE_NOT_SUPPORTED 24 /* service not supported */
#define E_IF_SERVICE_NOT_EXECUTABLE 25 /* service not executable */ #define E_IF_SERVICE_NOT_EXECUTABLE 25 /* service not executable */
#define E_IF_INVALID_VERSION 26 /* invalid version */ #define E_IF_INVALID_VERSION 26 /* invalid version */
#define E_IF_STATE_CONFLICT 27 /* state conflict */
#define E_IF_NO_CNTRL_PRESENT 28 /* controller not available */ #define E_IF_NO_CNTRL_PRESENT 28 /* controller not available */
#define E_IF_INVALID_PARAMETER 30 /* wrong parameter in REQ or RES */ #define E_IF_INVALID_PARAMETER 30 /* wrong parameter in REQ or RES */
#define E_IF_INIT_FAILED 31 /* init. API or Controller failed */ #define E_IF_INIT_FAILED 31 /* init. API or Controller failed */
...@@ -819,12 +783,14 @@ ...@@ -819,12 +783,14 @@
/* error codes available only in Win NT --------------------------------------- /* error codes available only in Win NT ---------------------------------------
*/ */
#define E_IF_SLAVE_DIAG_DATA 0xF0 /* no data available */ #define E_IF_SLAVE_DIAG_DATA 0xF0 /* no data available */
/* new diagnostics data available */ /* new diagnostics data available */
#define E_IF_SLAVE_ERROR 0xF1 /* no data exchange */ #define E_IF_SLAVE_ERROR 0xF1 /* no data exchange */
#define E_IF_INVALID_DP_STATE 0xF2 /* DP is not in state clear/operate*/ #define E_IF_INVALID_DP_STATE 0xF2 /* DP is not in state clear/operate*/
#define E_IF_READING_REGISTRY 0xF3 /* error reading registry */ #define E_IF_READING_REGISTRY 0xF3 /* error reading registry */
#define E_IF_SOCKET_ERROR 0xFE /* TCP socket error */
/* get detail with WSAGetLastError */
#define E_IF_OS_ERROR 0xFF /* OS system (WIN,DOS) error */ #define E_IF_OS_ERROR 0xFF /* OS system (WIN,DOS) error */
/* get detail with GetLastError */ /* get detail with GetLastError */
/* INTERFACE ERROR DETAIL CODES (only Win95/98) ------------------------------- /* INTERFACE ERROR DETAIL CODES (only Win95/98) -------------------------------
*/ */
...@@ -862,21 +828,24 @@ ...@@ -862,21 +828,24 @@
#define MAX_ERROR_DESCR_LENGTH _NAME_LENGTH(ERROR_DESCR_LENGTH) #define MAX_ERROR_DESCR_LENGTH _NAME_LENGTH(ERROR_DESCR_LENGTH)
/* --- standard error data structure --------------------------------------- */ /* --- standard error data structure --------------------------------------- */
typedef struct _T_ERROR { typedef struct _T_ERROR
{
USIGN16 class_code; /* class and code */ USIGN16 class_code; /* class and code */
INT16 add_detail; /* additional detail */ INT16 add_detail; /* additional detail */
STRINGV add_description[MAX_ERROR_DESCR_LENGTH]; /* additional description */ STRINGV add_description[MAX_ERROR_DESCR_LENGTH]; /* additional description */
} T_ERROR; } T_ERROR;
/* --- PI error data structure --------------------------------------------- */ /* --- PI error data structure --------------------------------------------- */
typedef struct _T_PI_ERROR { typedef struct _T_PI_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN8 pi_state; /* pi state */ USIGN8 pi_state; /* pi state */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_PI_ERROR; } T_PI_ERROR;
/* --- PI-LOC error data structure ----------------------------------------- */ /* --- PI-LOC error data structure ----------------------------------------- */
typedef struct _T_PI_LOC_ERROR { typedef struct _T_PI_LOC_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN8 pi_state; /* pi state */ USIGN8 pi_state; /* pi state */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
...@@ -884,7 +853,8 @@ typedef struct _T_PI_LOC_ERROR { ...@@ -884,7 +853,8 @@ typedef struct _T_PI_LOC_ERROR {
} T_PI_LOC_ERROR; } T_PI_LOC_ERROR;
/* --- OD error data structure --------------------------------------------- */ /* --- OD error data structure --------------------------------------------- */
typedef struct _T_OD_ERROR { typedef struct _T_OD_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN16 index; /* error index */ USIGN16 index; /* error index */
} T_OD_ERROR; } T_OD_ERROR;
...@@ -894,7 +864,8 @@ typedef T_OD_ERROR T_OV_ERROR; ...@@ -894,7 +864,8 @@ typedef T_OD_ERROR T_OV_ERROR;
#endif #endif
/* --- source OD error data structure -------------------------------------- */ /* --- source OD error data structure -------------------------------------- */
typedef struct _T_SRC_OD_ERROR { typedef struct _T_SRC_OD_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
USIGN16 index; /* error index */ USIGN16 index; /* error index */
...@@ -905,13 +876,15 @@ typedef T_SRC_OD_ERROR T_SRC_OV_ERROR; ...@@ -905,13 +876,15 @@ typedef T_SRC_OD_ERROR T_SRC_OV_ERROR;
#endif #endif
/* --- VFD error data structure -------------------------------------------- */ /* --- VFD error data structure -------------------------------------------- */
typedef struct _T_VFD_ERROR { typedef struct _T_VFD_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
} T_VFD_ERROR; } T_VFD_ERROR;
/* --- CRL error data structure -------------------------------------------- */ /* --- CRL error data structure -------------------------------------------- */
typedef struct _T_CRL_ERROR { typedef struct _T_CRL_ERROR
{
T_ERROR error; /* standard error type */ T_ERROR error; /* standard error type */
USIGN16 error_cr; /* error cr */ USIGN16 error_cr; /* error cr */
} T_CRL_ERROR; } T_CRL_ERROR;
...@@ -923,7 +896,8 @@ typedef T_CRL_ERROR T_KBL_ERROR; ...@@ -923,7 +896,8 @@ typedef T_CRL_ERROR T_KBL_ERROR;
/*****************************************************************************/ /*****************************************************************************/
/************* FDLIF-ERROR DATA STRUCTURES *****************************/ /************* FDLIF-ERROR DATA STRUCTURES *****************************/
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_FDLIF_ERROR { typedef struct _T_FDLIF_ERROR
{
USIGN8 result; /* class and code */ USIGN8 result; /* class and code */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
USIGN16 add_detail; /* additional detail */ USIGN16 add_detail; /* additional detail */
...@@ -933,7 +907,8 @@ typedef struct _T_FDLIF_ERROR { ...@@ -933,7 +907,8 @@ typedef struct _T_FDLIF_ERROR {
/************* EXCEPTION STRUCTURES *****************************/ /************* EXCEPTION STRUCTURES *****************************/
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_EXCEPTION { typedef struct _T_EXCEPTION
{
USIGN8 task_id; /* task identifier in which execption occurs */ USIGN8 task_id; /* task identifier in which execption occurs */
USIGN8 par1; /* parameter 1 */ USIGN8 par1; /* parameter 1 */
USIGN16 par2; /* parameter 2 */ USIGN16 par2; /* parameter 2 */
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_FDL.H */ /* Filename : PB_FDL.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the types and defines of the FDL-User- */ /* Description : This file contains the types and defines of the FDL-User- */
/* Interface */ /* Interface */
...@@ -173,7 +138,8 @@ ...@@ -173,7 +138,8 @@
/* ************** Busparameter block ********************* */ /* ************** Busparameter block ********************* */
/* ************************************************************************** */ /* ************************************************************************** */
typedef struct _T_FDLIF_SET_BUSPARAMETER_REQ { typedef struct _T_FDLIF_SET_BUSPARAMETER_REQ
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -192,7 +158,8 @@ typedef struct _T_FDLIF_SET_BUSPARAMETER_REQ { ...@@ -192,7 +158,8 @@ typedef struct _T_FDLIF_SET_BUSPARAMETER_REQ {
USIGN8 ident[202]; /* for internal use */ USIGN8 ident[202]; /* for internal use */
} T_FDLIF_SET_BUSPARAMETER_REQ; } T_FDLIF_SET_BUSPARAMETER_REQ;
typedef struct _T_FDLIF_READ_BUSPARAMETER_CNF { typedef struct _T_FDLIF_READ_BUSPARAMETER_CNF
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -215,7 +182,8 @@ typedef struct _T_FDLIF_READ_BUSPARAMETER_CNF { ...@@ -215,7 +182,8 @@ typedef struct _T_FDLIF_READ_BUSPARAMETER_CNF {
/* ******************* SAP block ************************* */ /* ******************* SAP block ************************* */
/* ************************************************************************* */ /* ************************************************************************* */
typedef struct _T_FDLIF_SAP_ACTIVATE_REQ { typedef struct _T_FDLIF_SAP_ACTIVATE_REQ
{
USIGN8 sap_nr; /* SAP to be activated */ USIGN8 sap_nr; /* SAP to be activated */
USIGN8 max_l_sdu_length_req; /* maximum length of request telegram */ USIGN8 max_l_sdu_length_req; /* maximum length of request telegram */
USIGN8 max_l_sdu_length_con_ind; /* maximum length of con/ind telegram */ USIGN8 max_l_sdu_length_con_ind; /* maximum length of con/ind telegram */
...@@ -230,7 +198,8 @@ typedef struct _T_FDLIF_SAP_ACTIVATE_REQ { ...@@ -230,7 +198,8 @@ typedef struct _T_FDLIF_SAP_ACTIVATE_REQ {
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FDLIF_SAP_ACTIVATE_REQ; } T_FDLIF_SAP_ACTIVATE_REQ;
typedef struct _T_FDLIF_RSAP_ACTIVATE_REQ { typedef struct _T_FDLIF_RSAP_ACTIVATE_REQ
{
USIGN8 sap_nr; /* SAP to be activated */ USIGN8 sap_nr; /* SAP to be activated */
USIGN8 max_l_sdu_length_req; /* maximum length of req telegram */ USIGN8 max_l_sdu_length_req; /* maximum length of req telegram */
USIGN8 max_l_sdu_length_ind; /* maximum length of ind telegram */ USIGN8 max_l_sdu_length_ind; /* maximum length of ind telegram */
...@@ -241,14 +210,16 @@ typedef struct _T_FDLIF_RSAP_ACTIVATE_REQ { ...@@ -241,14 +210,16 @@ typedef struct _T_FDLIF_RSAP_ACTIVATE_REQ {
USIGN8 dummy; /* alignmnet byte */ USIGN8 dummy; /* alignmnet byte */
} T_FDLIF_RSAP_ACTIVATE_REQ; } T_FDLIF_RSAP_ACTIVATE_REQ;
typedef struct _T_FDLIF_SAP_CHANGE_REQ { typedef struct _T_FDLIF_SAP_CHANGE_REQ
{
USIGN8 sap_nr; /* SAP to be activated */ USIGN8 sap_nr; /* SAP to be activated */
USIGN8 access_sap; /* permitted request SAPs */ USIGN8 access_sap; /* permitted request SAPs */
USIGN8 access_station; /* permitted requestor */ USIGN8 access_station; /* permitted requestor */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FDLIF_SAP_CHANGE_REQ; } T_FDLIF_SAP_CHANGE_REQ;
typedef struct _T_FDLIF_SAP_DEACTIVATE_REQ { typedef struct _T_FDLIF_SAP_DEACTIVATE_REQ
{
USIGN8 sap_nr; /* SAP to be activated */ USIGN8 sap_nr; /* SAP to be activated */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FDLIF_SAP_DEACTIVATE_REQ; } T_FDLIF_SAP_DEACTIVATE_REQ;
...@@ -257,7 +228,8 @@ typedef struct _T_FDLIF_SAP_DEACTIVATE_REQ { ...@@ -257,7 +228,8 @@ typedef struct _T_FDLIF_SAP_DEACTIVATE_REQ {
/* ************* Data transfer ********************* */ /* ************* Data transfer ********************* */
/* ************************************************************************* */ /* ************************************************************************* */
typedef struct _T_FDLIF_SDN_SDA_SRD_REQ { typedef struct _T_FDLIF_SDN_SDA_SRD_REQ
{
USIGN8 ssap; /* source SAP */ USIGN8 ssap; /* source SAP */
USIGN8 dsap; /* destination SAP */ USIGN8 dsap; /* destination SAP */
USIGN8 rem_add; /* address of remote station */ USIGN8 rem_add; /* address of remote station */
...@@ -267,13 +239,15 @@ typedef struct _T_FDLIF_SDN_SDA_SRD_REQ { ...@@ -267,13 +239,15 @@ typedef struct _T_FDLIF_SDN_SDA_SRD_REQ {
/* USIGN8 req_data [length] request data */ /* USIGN8 req_data [length] request data */
} T_FDLIF_SDN_SDA_SRD_REQ; } T_FDLIF_SDN_SDA_SRD_REQ;
typedef struct _T_FDLIF_SRD_CNF { typedef struct _T_FDLIF_SRD_CNF
{
USIGN8 status; /* status */ USIGN8 status; /* status */
USIGN8 length; /* length of request data */ USIGN8 length; /* length of request data */
/* USIGN8 cnf_data [length]; request data */ /* USIGN8 cnf_data [length]; request data */
} T_FDLIF_SRD_CNF; } T_FDLIF_SRD_CNF;
typedef struct _T_FDLIF_RUP_REQ { typedef struct _T_FDLIF_RUP_REQ
{
USIGN8 sap_nr; /* number of local SAP */ USIGN8 sap_nr; /* number of local SAP */
USIGN8 priority; /* priority of request */ USIGN8 priority; /* priority of request */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
...@@ -286,7 +260,8 @@ typedef struct _T_FDLIF_RUP_REQ { ...@@ -286,7 +260,8 @@ typedef struct _T_FDLIF_RUP_REQ {
/* ************************************************************************* */ /* ************************************************************************* */
/* the possible events are defined in the header file PB_ERR.H */ /* the possible events are defined in the header file PB_ERR.H */
typedef struct _T_FDLIF_EVENT_IND { typedef struct _T_FDLIF_EVENT_IND
{
USIGN8 event; /* event */ USIGN8 event; /* event */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FDLIF_EVENT_IND; } T_FDLIF_EVENT_IND;
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_FM7.H */ /* Filename : PB_FM7.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the types and defines of the FM7-User- */ /* Description : This file contains the types and defines of the FM7-User- */
/* Interface */ /* Interface */
...@@ -163,7 +128,8 @@ ...@@ -163,7 +128,8 @@
/* Initiate Service */ /* Initiate Service */
/****************************************************************************/ /****************************************************************************/
typedef struct _T_FM7_INIT_REQ { typedef struct _T_FM7_INIT_REQ
{
USIGN8 snd_len_low; /* max FM7 PDU size to send with low priority */ USIGN8 snd_len_low; /* max FM7 PDU size to send with low priority */
USIGN8 rcv_len_low; /* max FM7 PDU size to receive with low priority */ USIGN8 rcv_len_low; /* max FM7 PDU size to receive with low priority */
USIGN8 supported_services[FEAT_SUPP_LEN]; /* supported FM7 services */ USIGN8 supported_services[FEAT_SUPP_LEN]; /* supported FM7 services */
...@@ -173,7 +139,8 @@ typedef struct _T_FM7_INIT_REQ { ...@@ -173,7 +139,8 @@ typedef struct _T_FM7_INIT_REQ {
typedef T_FM7_INIT_REQ T_FMA_INIT_REQ; typedef T_FM7_INIT_REQ T_FMA_INIT_REQ;
#endif #endif
typedef struct _T_FM7_INIT_ERR_CNF { typedef struct _T_FM7_INIT_ERR_CNF
{
USIGN16 class_code; /* error code and class */ USIGN16 class_code; /* error code and class */
USIGN8 snd_len_low; /* max FM7 PDU size to send with low priority */ USIGN8 snd_len_low; /* max FM7 PDU size to send with low priority */
USIGN8 rcv_len_low; /* max FM7 PDU size to receive with low priority */ USIGN8 rcv_len_low; /* max FM7 PDU size to receive with low priority */
...@@ -188,7 +155,8 @@ typedef T_FM7_INIT_ERR_CNF T_FMA_INIT_ERR_CNF; ...@@ -188,7 +155,8 @@ typedef T_FM7_INIT_ERR_CNF T_FMA_INIT_ERR_CNF;
/* Abort Service */ /* Abort Service */
/****************************************************************************/ /****************************************************************************/
typedef struct _T_FM7_ABORT_REQ { typedef struct _T_FM7_ABORT_REQ
{
PB_BOOL local; /* local or remote detected */ PB_BOOL local; /* local or remote detected */
USIGN8 abort_id; /* identifier (USR,LLI_USR,LLI,FDL) */ USIGN8 abort_id; /* identifier (USR,LLI_USR,LLI,FDL) */
USIGN8 reason; /* abort reason code */ USIGN8 reason; /* abort reason code */
...@@ -267,7 +235,8 @@ typedef T_FM7_ABORT_REQ T_FMA_ABORT_REQ; ...@@ -267,7 +235,8 @@ typedef T_FM7_ABORT_REQ T_FMA_ABORT_REQ;
#define O_CONN 0x02 #define O_CONN 0x02
/*--- CRL-Header -----------------------------------------------------------*/ /*--- CRL-Header -----------------------------------------------------------*/
typedef struct _T_CRL_HDR { typedef struct _T_CRL_HDR
{
INT16 nr_of_entries; /* number of CRL enries */ INT16 nr_of_entries; /* number of CRL enries */
USIGN8 poll_sap; /* poll list SAP */ USIGN8 poll_sap; /* poll list SAP */
USIGN8 symbol_length; /* max symbol lenght in CRL */ USIGN8 symbol_length; /* max symbol lenght in CRL */
...@@ -282,7 +251,8 @@ typedef T_CRL_HDR T_KBL_HDR; ...@@ -282,7 +251,8 @@ typedef T_CRL_HDR T_KBL_HDR;
/*--- CRL-Static-Entry /*--- CRL-Static-Entry
* -----------------------------------------------------------*/ * -----------------------------------------------------------*/
typedef struct _T_CRL_STATIC { typedef struct _T_CRL_STATIC
{
USIGN8 loc_lsap; /* local LSAP */ USIGN8 loc_lsap; /* local LSAP */
USIGN8 rem_add; /* remote address */ USIGN8 rem_add; /* remote address */
USIGN8 rem_segm; /* remote segment */ USIGN8 rem_segm; /* remote segment */
...@@ -311,7 +281,8 @@ typedef T_CRL_STATIC T_KBL_STATIC; ...@@ -311,7 +281,8 @@ typedef T_CRL_STATIC T_KBL_STATIC;
#endif #endif
/*--- CRL-Dynamic-Entry ----------------------------------------------------*/ /*--- CRL-Dynamic-Entry ----------------------------------------------------*/
typedef struct _T_CRL_DYNAMIC { typedef struct _T_CRL_DYNAMIC
{
USIGN8 rem_add; /* current remote address */ USIGN8 rem_add; /* current remote address */
USIGN8 rem_segm; /* current remote segment */ USIGN8 rem_segm; /* current remote segment */
USIGN8 rem_lsap; /* current remote LSAP */ USIGN8 rem_lsap; /* current remote LSAP */
...@@ -333,7 +304,8 @@ typedef T_CRL_DYNAMIC T_KBL_DYNAMIC; ...@@ -333,7 +304,8 @@ typedef T_CRL_DYNAMIC T_KBL_DYNAMIC;
/****************************************************************************/ /****************************************************************************/
/*--- Load-CRL-Service -----------------------------------------------------*/ /*--- Load-CRL-Service -----------------------------------------------------*/
typedef struct _T_LOAD_CRL_REQ { typedef struct _T_LOAD_CRL_REQ
{
USIGN16 desired_cr; /* desired communication reference */ USIGN16 desired_cr; /* desired communication reference */
union { union {
T_CRL_HDR crl_hdr; /* CRL-Header-Entry */ T_CRL_HDR crl_hdr; /* CRL-Header-Entry */
...@@ -342,7 +314,8 @@ typedef struct _T_LOAD_CRL_REQ { ...@@ -342,7 +314,8 @@ typedef struct _T_LOAD_CRL_REQ {
} T_LOAD_CRL_REQ; } T_LOAD_CRL_REQ;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_LOAD_KBL_REQ { typedef struct _T_LOAD_KBL_REQ
{
USIGN16 desired_cr; /* desired communication reference */ USIGN16 desired_cr; /* desired communication reference */
union { union {
T_KBL_HDR kbl_hdr; /* CRL-Header-Entry */ T_KBL_HDR kbl_hdr; /* CRL-Header-Entry */
...@@ -446,7 +419,8 @@ typedef struct _T_LOAD_KBL_REQ { ...@@ -446,7 +419,8 @@ typedef struct _T_LOAD_KBL_REQ {
/* --- DTU Receiver ------------------------------------------------------- */ /* --- DTU Receiver ------------------------------------------------------- */
#define CONLS_SERVER 0 #define CONLS_SERVER 0
typedef struct _T_READ_CRL_REQ { typedef struct _T_READ_CRL_REQ
{
USIGN16 desired_cr; /* desired communication reference */ USIGN16 desired_cr; /* desired communication reference */
} T_READ_CRL_REQ; } T_READ_CRL_REQ;
...@@ -455,7 +429,8 @@ typedef T_READ_CRL_REQ T_READ_KBL_REQ; ...@@ -455,7 +429,8 @@ typedef T_READ_CRL_REQ T_READ_KBL_REQ;
#endif #endif
/*--- CRL-Entry Data-Type --------------------------------------------------*/ /*--- CRL-Entry Data-Type --------------------------------------------------*/
typedef struct _T_CRL_ENTRY { typedef struct _T_CRL_ENTRY
{
T_CRL_STATIC crl_static; /* CRL-Static-Entry */ T_CRL_STATIC crl_static; /* CRL-Static-Entry */
T_CRL_DYNAMIC crl_dynamic; /* CRL-Dynamic-Entry */ T_CRL_DYNAMIC crl_dynamic; /* CRL-Dynamic-Entry */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
...@@ -464,7 +439,8 @@ typedef struct _T_CRL_ENTRY { ...@@ -464,7 +439,8 @@ typedef struct _T_CRL_ENTRY {
} T_CRL_ENTRY; } T_CRL_ENTRY;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_KBL_ENTRY { typedef struct _T_KBL_ENTRY
{
T_KBL_STATIC kbl_static; /* CRL-Static-Entry */ T_KBL_STATIC kbl_static; /* CRL-Static-Entry */
T_KBL_DYNAMIC kbl_dynamic; /* CRL-Dynamic-Entry */ T_KBL_DYNAMIC kbl_dynamic; /* CRL-Dynamic-Entry */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
...@@ -473,7 +449,8 @@ typedef struct _T_KBL_ENTRY { ...@@ -473,7 +449,8 @@ typedef struct _T_KBL_ENTRY {
} T_KBL_ENTRY; } T_KBL_ENTRY;
#endif #endif
typedef struct _T_READ_CRL_CNF { typedef struct _T_READ_CRL_CNF
{
USIGN16 desired_cr; /* desired communication reference */ USIGN16 desired_cr; /* desired communication reference */
union { union {
T_CRL_HDR crl_hdr; /* CRL-header */ T_CRL_HDR crl_hdr; /* CRL-header */
...@@ -482,7 +459,8 @@ typedef struct _T_READ_CRL_CNF { ...@@ -482,7 +459,8 @@ typedef struct _T_READ_CRL_CNF {
} T_READ_CRL_CNF; } T_READ_CRL_CNF;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_READ_KBL_CNF { typedef struct _T_READ_KBL_CNF
{
USIGN16 desired_cr; /* desired communication reference */ USIGN16 desired_cr; /* desired communication reference */
union { union {
T_KBL_HDR kbl_hdr; /* CRL-header */ T_KBL_HDR kbl_hdr; /* CRL-header */
...@@ -548,7 +526,8 @@ typedef struct _T_READ_KBL_CNF { ...@@ -548,7 +526,8 @@ typedef struct _T_READ_KBL_CNF {
#define C_NOT_IN_RING_DESIRED NOT_IN_RING_DESIRED #define C_NOT_IN_RING_DESIRED NOT_IN_RING_DESIRED
#endif #endif
typedef struct _T_SET_BUSPARAMETER_REQ { typedef struct _T_SET_BUSPARAMETER_REQ
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -571,7 +550,8 @@ typedef struct _T_SET_BUSPARAMETER_REQ { ...@@ -571,7 +550,8 @@ typedef struct _T_SET_BUSPARAMETER_REQ {
/* Read-Busparameter Service (only local) */ /* Read-Busparameter Service (only local) */
/****************************************************************************/ /****************************************************************************/
typedef struct _T_READ_BUSPARAMETER_CNF { typedef struct _T_READ_BUSPARAMETER_CNF
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -625,7 +605,8 @@ typedef struct _T_READ_BUSPARAMETER_CNF { ...@@ -625,7 +605,8 @@ typedef struct _T_READ_BUSPARAMETER_CNF {
/****************************************************************************/ /****************************************************************************/
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_STATISTICS_BLOCK { typedef struct _T_STATISTICS_BLOCK
{
USIGN32 frame_send_count; /* frame sent counter */ USIGN32 frame_send_count; /* frame sent counter */
USIGN32 sd_count; /* valid start delimiter counter */ USIGN32 sd_count; /* valid start delimiter counter */
USIGN16 retry_count; /* retry frame sent counter */ USIGN16 retry_count; /* retry frame sent counter */
...@@ -633,7 +614,8 @@ typedef struct _T_STATISTICS_BLOCK { ...@@ -633,7 +614,8 @@ typedef struct _T_STATISTICS_BLOCK {
} T_STATISTICS_BLOCK; } T_STATISTICS_BLOCK;
#endif #endif
typedef struct _T_SET_VALUE_REQ { typedef struct _T_SET_VALUE_REQ
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 length; /* # of values in byte */ USIGN8 length; /* # of values in byte */
/* USIGN8 value[length]; list of values */ /* USIGN8 value[length]; list of values */
...@@ -643,7 +625,8 @@ typedef struct _T_SET_VALUE_REQ { ...@@ -643,7 +625,8 @@ typedef struct _T_SET_VALUE_REQ {
/* Read-Value Service (Local and Remote) */ /* Read-Value Service (Local and Remote) */
/****************************************************************************/ /****************************************************************************/
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_READ_STATISTIC_CTR_CNF { typedef struct _T_READ_STATISTIC_CTR_CNF
{
USIGN32 frame_send_count; /* frame sent counter */ USIGN32 frame_send_count; /* frame sent counter */
USIGN32 sd_count; /* valid start delimiter counter */ USIGN32 sd_count; /* valid start delimiter counter */
USIGN16 retry_count; /* retry frame sent counter */ USIGN16 retry_count; /* retry frame sent counter */
...@@ -651,12 +634,14 @@ typedef struct _T_READ_STATISTIC_CTR_CNF { ...@@ -651,12 +634,14 @@ typedef struct _T_READ_STATISTIC_CTR_CNF {
} T_READ_STATISTIC_CTR_CNF; } T_READ_STATISTIC_CTR_CNF;
#endif #endif
typedef struct _T_READ_VALUE_REQ { typedef struct _T_READ_VALUE_REQ
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_READ_VALUE_REQ; } T_READ_VALUE_REQ;
typedef struct _T_READ_VALUE_CNF { typedef struct _T_READ_VALUE_CNF
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 length; /* # of values in byte */ USIGN8 length; /* # of values in byte */
/* USIGN8 value[length]; list of values */ /* USIGN8 value[length]; list of values */
...@@ -678,13 +663,15 @@ typedef struct _T_READ_VALUE_CNF { ...@@ -678,13 +663,15 @@ typedef struct _T_READ_VALUE_CNF {
#define ID_PHY 5 #define ID_PHY 5
#endif #endif
typedef struct _T_IDENT_REQ { typedef struct _T_IDENT_REQ
{
USIGN8 instance_id; /* instance identifier */ USIGN8 instance_id; /* instance identifier */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_IDENT_REQ; } T_IDENT_REQ;
#if (PB_VER >= 500) #if (PB_VER >= 500)
typedef struct _T_CHARACTERISTICS { typedef struct _T_CHARACTERISTICS
{
USIGN8 profile_number[2]; /* profile number */ USIGN8 profile_number[2]; /* profile number */
USIGN8 functions_supp[3]; /* functions supported */ USIGN8 functions_supp[3]; /* functions supported */
USIGN8 dummy1; /* alignment byte */ USIGN8 dummy1; /* alignment byte */
...@@ -716,7 +703,8 @@ typedef struct _T_CHARACTERISTICS { ...@@ -716,7 +703,8 @@ typedef struct _T_CHARACTERISTICS {
USIGN8 max_crl_symbol_length; /* max length of symbol in CRL */ USIGN8 max_crl_symbol_length; /* max length of symbol in CRL */
} T_CHARACTERISTICS; } T_CHARACTERISTICS;
#else #else
typedef struct _T_CHARACTERISTICS { typedef struct _T_CHARACTERISTICS
{
USIGN8 profile_number[2]; /* profile number */ USIGN8 profile_number[2]; /* profile number */
USIGN8 functions_supp[3]; /* functions supported */ USIGN8 functions_supp[3]; /* functions supported */
USIGN8 dummy1; /* alignment byte */ USIGN8 dummy1; /* alignment byte */
...@@ -749,7 +737,8 @@ typedef struct _T_CHARACTERISTICS { ...@@ -749,7 +737,8 @@ typedef struct _T_CHARACTERISTICS {
} T_CHARACTERISTICS; } T_CHARACTERISTICS;
#endif #endif
typedef struct _T_IDENT_CNF { typedef struct _T_IDENT_CNF
{
USIGN8 instance_id; /* instance ident */ USIGN8 instance_id; /* instance ident */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
STRINGV vendor_name[MAX_IDENT_STRING_LENGTH]; /* vendor name */ STRINGV vendor_name[MAX_IDENT_STRING_LENGTH]; /* vendor name */
...@@ -763,12 +752,14 @@ typedef struct _T_IDENT_CNF { ...@@ -763,12 +752,14 @@ typedef struct _T_IDENT_CNF {
/* LSAP-Status Service (Local and Remote) */ /* LSAP-Status Service (Local and Remote) */
/****************************************************************************/ /****************************************************************************/
typedef struct _T_LSAP_STATUS_REQ { typedef struct _T_LSAP_STATUS_REQ
{
USIGN8 lsap; /* desired LSAP */ USIGN8 lsap; /* desired LSAP */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_LSAP_STATUS_REQ; } T_LSAP_STATUS_REQ;
typedef struct _T_LSAP_STATUS_CNF { typedef struct _T_LSAP_STATUS_CNF
{
USIGN8 access; /* station address or all */ USIGN8 access; /* station address or all */
USIGN8 addr_extension; /* segment number */ USIGN8 addr_extension; /* segment number */
USIGN8 sda; /* SDA */ USIGN8 sda; /* SDA */
...@@ -781,12 +772,14 @@ typedef struct _T_LSAP_STATUS_CNF { ...@@ -781,12 +772,14 @@ typedef struct _T_LSAP_STATUS_CNF {
/* Get-Live-List Service (Local and Remote) */ /* Get-Live-List Service (Local and Remote) */
/****************************************************************************/ /****************************************************************************/
typedef struct _T_LIVE_LIST { typedef struct _T_LIVE_LIST
{
USIGN8 station; /* station number */ USIGN8 station; /* station number */
USIGN8 status; /* current station of station */ USIGN8 status; /* current station of station */
} T_LIVE_LIST; } T_LIVE_LIST;
typedef struct _T_GET_LIVE_LIST_CNF { typedef struct _T_GET_LIVE_LIST_CNF
{
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
USIGN8 no_of_elements; /* # of live list elements */ USIGN8 no_of_elements; /* # of live list elements */
/* T_LIVE_LIST live_list[no_of_elements]; list of live list elements */ /* T_LIVE_LIST live_list[no_of_elements]; list of live list elements */
...@@ -802,7 +795,8 @@ typedef struct _T_GET_LIVE_LIST_CNF { ...@@ -802,7 +795,8 @@ typedef struct _T_GET_LIVE_LIST_CNF {
/* NOTE: instance identifier see IDENT service ---------------------------- */ /* NOTE: instance identifier see IDENT service ---------------------------- */
/* reason-codes and additional details are defined in PB_ERR.H --- */ /* reason-codes and additional details are defined in PB_ERR.H --- */
typedef struct _T_FM7_EVENT_IND { typedef struct _T_FM7_EVENT_IND
{
USIGN16 comm_ref; /* communication reference */ USIGN16 comm_ref; /* communication reference */
USIGN8 instance_id; /* LLI, FDL, PHY */ USIGN8 instance_id; /* LLI, FDL, PHY */
USIGN8 reason; /* reason code */ USIGN8 reason; /* reason code */
...@@ -823,7 +817,8 @@ typedef T_FM7_EVENT_IND T_FMA7_EVENT_IND; ...@@ -823,7 +817,8 @@ typedef T_FM7_EVENT_IND T_FMA7_EVENT_IND;
/* Set-Configuration Service (only local) */ /* Set-Configuration Service (only local) */
/*****************************************************************************/ /*****************************************************************************/
typedef struct T_SET_CONFIGURATION_REQ { typedef struct T_SET_CONFIGURATION_REQ
{
USIGN16 max_nr_of_fal_msg_buffers; /* max # of Layer7-Message-Buffers USIGN16 max_nr_of_fal_msg_buffers; /* max # of Layer7-Message-Buffers
(all CR) */ (all CR) */
USIGN16 max_nr_of_fdl_msg_buffers; /* max # of Layer2-Message-Buffers USIGN16 max_nr_of_fdl_msg_buffers; /* max # of Layer2-Message-Buffers
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_FMB.H */ /* Filename : PB_FMB.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* */ /* */
/* Description : This file contains the types and defines of the Fieldbus- */ /* Description : This file contains the types and defines of the Fieldbus- */
...@@ -97,7 +62,8 @@ ...@@ -97,7 +62,8 @@
/*****************************************************************************/ /*****************************************************************************/
/* VFD-Configuration ------------------------------------------------------- */ /* VFD-Configuration ------------------------------------------------------- */
typedef struct _T_FMB_CONFIG_VFD { typedef struct _T_FMB_CONFIG_VFD
{
USIGN16 max_no_vfds; /* max. number of VFD's */ USIGN16 max_no_vfds; /* max. number of VFD's */
USIGN16 max_no_obj_descr; /* max. number of OD object descr.*/ USIGN16 max_no_obj_descr; /* max. number of OD object descr.*/
USIGN8 max_obj_name_length; /* max. size of OD object name */ USIGN8 max_obj_name_length; /* max. size of OD object name */
...@@ -105,7 +71,8 @@ typedef struct _T_FMB_CONFIG_VFD { ...@@ -105,7 +71,8 @@ typedef struct _T_FMB_CONFIG_VFD {
} T_FMB_CONFIG_VFD; } T_FMB_CONFIG_VFD;
/* --- CRL-Configuration --------------------------------------------------- */ /* --- CRL-Configuration --------------------------------------------------- */
typedef struct _T_FMB_CONFIG_CRL { typedef struct _T_FMB_CONFIG_CRL
{
USIGN16 max_no_fal_sdbs; /* max. number of FAL-SDBs */ USIGN16 max_no_fal_sdbs; /* max. number of FAL-SDBs */
USIGN16 max_no_fdl_sdbs; /* max. number of FDL-SDBs */ USIGN16 max_no_fdl_sdbs; /* max. number of FDL-SDBs */
USIGN16 max_no_data_buffer; /* max. number of PDU buffers */ USIGN16 max_no_data_buffer; /* max. number of PDU buffers */
...@@ -131,7 +98,8 @@ component 'max_no_parallel_ind' is introduced for future use - for ...@@ -131,7 +98,8 @@ component 'max_no_parallel_ind' is introduced for future use - for
end of notes on T_FMB_CONFIG_CRL ------------------------------------------ */ end of notes on T_FMB_CONFIG_CRL ------------------------------------------ */
/* DP-Configuration -------------------------------------------------------- */ /* DP-Configuration -------------------------------------------------------- */
typedef struct _T_FMB_CONFIG_DP { typedef struct _T_FMB_CONFIG_DP
{
USIGN8 max_number_slaves; /* maximum number DP Slaves supported */ USIGN8 max_number_slaves; /* maximum number DP Slaves supported */
USIGN8 max_slave_output_len; /* max. length of slave output data */ USIGN8 max_slave_output_len; /* max. length of slave output data */
USIGN8 max_slave_input_len; /* max. length of slave input data */ USIGN8 max_slave_input_len; /* max. length of slave input data */
...@@ -142,7 +110,8 @@ typedef struct _T_FMB_CONFIG_DP { ...@@ -142,7 +110,8 @@ typedef struct _T_FMB_CONFIG_DP {
} T_FMB_CONFIG_DP; } T_FMB_CONFIG_DP;
/* FDLIF-Configuration ----------------------------------------------------- */ /* FDLIF-Configuration ----------------------------------------------------- */
typedef struct _T_FMB_CONFIG_FDLIF { typedef struct _T_FMB_CONFIG_FDLIF
{
USIGN8 send_req_credits; /* max. number of send credits for SDA and SDN USIGN8 send_req_credits; /* max. number of send credits for SDA and SDN
services */ services */
USIGN8 srd_req_credits; /* max. number of send credits for SRD services */ USIGN8 srd_req_credits; /* max. number of send credits for SRD services */
...@@ -151,12 +120,14 @@ typedef struct _T_FMB_CONFIG_FDLIF { ...@@ -151,12 +120,14 @@ typedef struct _T_FMB_CONFIG_FDLIF {
} T_FMB_CONFIG_FDLIF; } T_FMB_CONFIG_FDLIF;
/* SM7-Configuration ------------------------------------------------------- */ /* SM7-Configuration ------------------------------------------------------- */
typedef struct _T_FMB_CONFIG_SM7 { typedef struct _T_FMB_CONFIG_SM7
{
USIGN16 reserved; USIGN16 reserved;
} T_FMB_CONFIG_SM7; } T_FMB_CONFIG_SM7;
/* Fieldbus-Basic-Management-Configuration --------------------------------- */ /* Fieldbus-Basic-Management-Configuration --------------------------------- */
typedef struct _T_FMB_SET_CONFIGURATION_REQ { typedef struct _T_FMB_SET_CONFIGURATION_REQ
{
PB_BOOL fms_active; /* FMS and FM7 services are usable */ PB_BOOL fms_active; /* FMS and FM7 services are usable */
PB_BOOL dp_active; /* DP services are usable */ PB_BOOL dp_active; /* DP services are usable */
PB_BOOL fdlif_active; /* FDLIF services are usable */ PB_BOOL fdlif_active; /* FDLIF services are usable */
...@@ -198,7 +169,8 @@ typedef struct _T_FMB_SET_CONFIGURATION_REQ { ...@@ -198,7 +169,8 @@ typedef struct _T_FMB_SET_CONFIGURATION_REQ {
#define IN_RING_DESIRED PB_TRUE #define IN_RING_DESIRED PB_TRUE
#define NOT_IN_RING_DESIRED PB_FALSE #define NOT_IN_RING_DESIRED PB_FALSE
typedef struct _T_FMB_SET_BUSPARAMETER_REQ { typedef struct _T_FMB_SET_BUSPARAMETER_REQ
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -219,7 +191,8 @@ typedef struct _T_FMB_SET_BUSPARAMETER_REQ { ...@@ -219,7 +191,8 @@ typedef struct _T_FMB_SET_BUSPARAMETER_REQ {
/* FMB-Read-FDL-Busparameter */ /* FMB-Read-FDL-Busparameter */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_FMB_READ_BUSPARAMETER_CNF { typedef struct _T_FMB_READ_BUSPARAMETER_CNF
{
USIGN8 loc_add; /* local station */ USIGN8 loc_add; /* local station */
USIGN8 loc_segm; /* local segment */ USIGN8 loc_segm; /* local segment */
USIGN8 baud_rate; /* baud rate */ USIGN8 baud_rate; /* baud rate */
...@@ -271,7 +244,8 @@ typedef struct _T_FMB_READ_BUSPARAMETER_CNF { ...@@ -271,7 +244,8 @@ typedef struct _T_FMB_READ_BUSPARAMETER_CNF {
#endif #endif
typedef struct _T_FMB_SET_VALUE_REQ { typedef struct _T_FMB_SET_VALUE_REQ
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 length; /* # of values in byte */ USIGN8 length; /* # of values in byte */
/* USIGN8 value[length]; list of values */ /* USIGN8 value[length]; list of values */
...@@ -281,12 +255,14 @@ typedef struct _T_FMB_SET_VALUE_REQ { ...@@ -281,12 +255,14 @@ typedef struct _T_FMB_SET_VALUE_REQ {
/* FMB-Read-Value Service */ /* FMB-Read-Value Service */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_FMB_READ_VALUE_REQ { typedef struct _T_FMB_READ_VALUE_REQ
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_FMB_READ_VALUE_REQ; } T_FMB_READ_VALUE_REQ;
typedef struct _T_FMB_READ_VALUE_CNF { typedef struct _T_FMB_READ_VALUE_CNF
{
USIGN8 id; /* value identifier */ USIGN8 id; /* value identifier */
USIGN8 length; /* # of values in byte */ USIGN8 length; /* # of values in byte */
/* USIGN8 value[length]; list of values */ /* USIGN8 value[length]; list of values */
...@@ -296,12 +272,14 @@ typedef struct _T_FMB_READ_VALUE_CNF { ...@@ -296,12 +272,14 @@ typedef struct _T_FMB_READ_VALUE_CNF {
/* FMB-LSAP-Status Service */ /* FMB-LSAP-Status Service */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_FMB_LSAP_STATUS_REQ { typedef struct _T_FMB_LSAP_STATUS_REQ
{
USIGN8 lsap; /* desired LSAP */ USIGN8 lsap; /* desired LSAP */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FMB_LSAP_STATUS_REQ; } T_FMB_LSAP_STATUS_REQ;
typedef struct _T_FMB_LSAP_STATUS_CNF { typedef struct _T_FMB_LSAP_STATUS_CNF
{
USIGN8 access; /* station address or all */ USIGN8 access; /* station address or all */
USIGN8 addr_extension; /* segment number */ USIGN8 addr_extension; /* segment number */
USIGN8 sda; /* SDA */ USIGN8 sda; /* SDA */
...@@ -314,7 +292,8 @@ typedef struct _T_FMB_LSAP_STATUS_CNF { ...@@ -314,7 +292,8 @@ typedef struct _T_FMB_LSAP_STATUS_CNF {
/* FMB-Validate-Master Service */ /* FMB-Validate-Master Service */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_FMB_VALIDATE_MASTER_REQ { typedef struct _T_FMB_VALIDATE_MASTER_REQ
{
USIGN8 rem_add; /* desired remote station */ USIGN8 rem_add; /* desired remote station */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_FMB_VALIDATE_MASTER_REQ; } T_FMB_VALIDATE_MASTER_REQ;
...@@ -328,12 +307,14 @@ typedef struct _T_FMB_VALIDATE_MASTER_REQ { ...@@ -328,12 +307,14 @@ typedef struct _T_FMB_VALIDATE_MASTER_REQ {
#define ACTIVE_READY 0x02 #define ACTIVE_READY 0x02
#define ACTIVE_IN_RING 0x03 #define ACTIVE_IN_RING 0x03
typedef struct _T_FMB_LIVE_LIST { typedef struct _T_FMB_LIVE_LIST
{
USIGN8 station; /* station number */ USIGN8 station; /* station number */
USIGN8 status; /* current station of station */ USIGN8 status; /* current station of station */
} T_FMB_LIVE_LIST; } T_FMB_LIVE_LIST;
typedef struct _T_FMB_GET_LIVE_LIST_CNF { typedef struct _T_FMB_GET_LIVE_LIST_CNF
{
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
USIGN8 no_of_elements; /* # of live list elements */ USIGN8 no_of_elements; /* # of live list elements */
/* T_FMB_LIVE_LIST live_list[no_of_elements]; list of live list elements /* T_FMB_LIVE_LIST live_list[no_of_elements]; list of live list elements
...@@ -355,7 +336,8 @@ typedef struct _T_FMB_GET_LIVE_LIST_CNF { ...@@ -355,7 +336,8 @@ typedef struct _T_FMB_GET_LIVE_LIST_CNF {
#define FM2_MAC_ERROR 0x13 /* fatal MAC error */ #define FM2_MAC_ERROR 0x13 /* fatal MAC error */
#define FM2_HW_ERROR 0x14 /* fatal HW error */ #define FM2_HW_ERROR 0x14 /* fatal HW error */
typedef struct _T_FMB_FM2_EVENT_IND { typedef struct _T_FMB_FM2_EVENT_IND
{
USIGN16 reason; /* reason code */ USIGN16 reason; /* reason code */
} T_FMB_FM2_EVENT_IND; } T_FMB_FM2_EVENT_IND;
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_FMS.H */ /* Filename : PB_FMS.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the types and defines of the FMS-User- */ /* Description : This file contains the types and defines of the FMS-User- */
/* Interface */ /* Interface */
...@@ -408,7 +373,8 @@ ...@@ -408,7 +373,8 @@
/************* ACCESS CONTROL *********************/ /************* ACCESS CONTROL *********************/
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_ACCESS { typedef struct _T_ACCESS
{
USIGN8 pass_word; /* password */ USIGN8 pass_word; /* password */
USIGN8 acc_groups; /* access groups */ USIGN8 acc_groups; /* access groups */
USIGN16 acc_right; /* access rights */ USIGN16 acc_right; /* access rights */
...@@ -419,7 +385,8 @@ typedef struct _T_ACCESS { ...@@ -419,7 +385,8 @@ typedef struct _T_ACCESS {
/*****************************************************************************/ /*****************************************************************************/
/* --- standard access specification data structure (fixed size) ----------- */ /* --- standard access specification data structure (fixed size) ----------- */
typedef struct _T_ACC_SPEC { typedef struct _T_ACC_SPEC
{
USIGN8 tag; /* id of the access specification */ USIGN8 tag; /* id of the access specification */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
union { union {
...@@ -430,7 +397,8 @@ typedef struct _T_ACC_SPEC { ...@@ -430,7 +397,8 @@ typedef struct _T_ACC_SPEC {
/* --- dynamic access specification data structure (used in T_PI_CR8_REQ /* --- dynamic access specification data structure (used in T_PI_CR8_REQ
and in T_VAR_DEFINE_VAR_LIST_REQ data structure (dynamic size) ----- */ and in T_VAR_DEFINE_VAR_LIST_REQ data structure (dynamic size) ----- */
typedef struct _T_DYN_ACC_SPEC { typedef struct _T_DYN_ACC_SPEC
{
USIGN8 tag; /* id of the access specification */ USIGN8 tag; /* id of the access specification */
USIGN8 length; /* length of access specification */ USIGN8 length; /* length of access specification */
/* USIGN8 acc_spec[length] access specification (index / name) /* USIGN8 acc_spec[length] access specification (index / name)
...@@ -442,7 +410,8 @@ typedef struct _T_DYN_ACC_SPEC { ...@@ -442,7 +410,8 @@ typedef struct _T_DYN_ACC_SPEC {
/*****************************************************************************/ /*****************************************************************************/
/* --- Initiate-Service -----------------------------------------------------*/ /* --- Initiate-Service -----------------------------------------------------*/
typedef struct _T_CTXT_INIT_REQ { typedef struct _T_CTXT_INIT_REQ
{
USIGN8 profile_number[2]; /* profile number */ USIGN8 profile_number[2]; /* profile number */
PB_BOOL protection; /* access protection */ PB_BOOL protection; /* access protection */
USIGN8 password; /* password */ USIGN8 password; /* password */
...@@ -456,7 +425,8 @@ typedef struct _T_CTXT_INIT_REQ { ...@@ -456,7 +425,8 @@ typedef struct _T_CTXT_INIT_REQ {
USIGN8 supported_features[FEAT_SUPP_LEN]; /* supported features */ USIGN8 supported_features[FEAT_SUPP_LEN]; /* supported features */
} T_CTXT_INIT_REQ; } T_CTXT_INIT_REQ;
typedef struct _T_CTXT_INIT_CNF { typedef struct _T_CTXT_INIT_CNF
{
USIGN8 profile_number[2]; /* profile number */ USIGN8 profile_number[2]; /* profile number */
INT16 od_version; /* od version */ INT16 od_version; /* od version */
PB_BOOL protection; /* access protection */ PB_BOOL protection; /* access protection */
...@@ -465,7 +435,8 @@ typedef struct _T_CTXT_INIT_CNF { ...@@ -465,7 +435,8 @@ typedef struct _T_CTXT_INIT_CNF {
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_CTXT_INIT_CNF; } T_CTXT_INIT_CNF;
typedef struct _T_CTXT_INIT_ERR_CNF { typedef struct _T_CTXT_INIT_ERR_CNF
{
USIGN16 class_code; /* error class, error code */ USIGN16 class_code; /* error class, error code */
USIGN8 snd_len_h; /* max pdu size to send (high prio) */ USIGN8 snd_len_h; /* max pdu size to send (high prio) */
USIGN8 snd_len_l; /* max pdu size to send (low prio) */ USIGN8 snd_len_l; /* max pdu size to send (low prio) */
...@@ -475,7 +446,8 @@ typedef struct _T_CTXT_INIT_ERR_CNF { ...@@ -475,7 +446,8 @@ typedef struct _T_CTXT_INIT_ERR_CNF {
} T_CTXT_INIT_ERR_CNF; } T_CTXT_INIT_ERR_CNF;
/*--- abort service ---------------------------------------------------------*/ /*--- abort service ---------------------------------------------------------*/
typedef struct _T_CTXT_ABORT_REQ { typedef struct _T_CTXT_ABORT_REQ
{
PB_BOOL local; /* local or remote detected */ PB_BOOL local; /* local or remote detected */
USIGN8 abort_id; /* abort identifier USR, FMS, ... */ USIGN8 abort_id; /* abort identifier USR, FMS, ... */
USIGN8 reason; /* abort reason code */ USIGN8 reason; /* abort reason code */
...@@ -484,7 +456,8 @@ typedef struct _T_CTXT_ABORT_REQ { ...@@ -484,7 +456,8 @@ typedef struct _T_CTXT_ABORT_REQ {
} T_CTXT_ABORT_REQ; } T_CTXT_ABORT_REQ;
/*--- reject service --------------------------------------------------------*/ /*--- reject service --------------------------------------------------------*/
typedef struct _T_CTXT_REJECT_IND { typedef struct _T_CTXT_REJECT_IND
{
PB_BOOL detected_here; /* local or remote detected */ PB_BOOL detected_here; /* local or remote detected */
USIGN8 orig_invoke_id; /* original invoke ID */ USIGN8 orig_invoke_id; /* original invoke ID */
USIGN8 pdu_type; /* reject PDU types */ USIGN8 pdu_type; /* reject PDU types */
...@@ -495,25 +468,29 @@ typedef struct _T_CTXT_REJECT_IND { ...@@ -495,25 +468,29 @@ typedef struct _T_CTXT_REJECT_IND {
/************* VARIABLE ACCESS MANAGEMENT *********************/ /************* VARIABLE ACCESS MANAGEMENT *********************/
/*****************************************************************************/ /*****************************************************************************/
typedef struct _T_SIMPLE_TYPE { typedef struct _T_SIMPLE_TYPE
{
USIGN16 data_type_index; /* index of data type */ USIGN16 data_type_index; /* index of data type */
USIGN8 length; /* size of data type */ USIGN8 length; /* size of data type */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_SIMPLE_TYPE; } T_SIMPLE_TYPE;
typedef struct _T_ARRAY_TYPE { typedef struct _T_ARRAY_TYPE
{
USIGN16 data_type_index; /* index of data type */ USIGN16 data_type_index; /* index of data type */
USIGN8 length; /* size of data type */ USIGN8 length; /* size of data type */
USIGN8 no_of_elements; /* number of data types */ USIGN8 no_of_elements; /* number of data types */
} T_ARRAY_TYPE; } T_ARRAY_TYPE;
typedef struct _T_RECORD_TYPE { typedef struct _T_RECORD_TYPE
{
USIGN8 no_of_elements; /* number of record elem. */ USIGN8 no_of_elements; /* number of record elem. */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
T_SIMPLE_TYPE simple[MAX_VAR_RECORD_ELEMENTS]; /* list of simple types */ T_SIMPLE_TYPE simple[MAX_VAR_RECORD_ELEMENTS]; /* list of simple types */
} T_RECORD_TYPE; } T_RECORD_TYPE;
typedef struct _T_TYPE_DESCR { typedef struct _T_TYPE_DESCR
{
USIGN8 tag; /* type description identifier */ USIGN8 tag; /* type description identifier */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
union { union {
...@@ -528,7 +505,8 @@ typedef struct _T_TYPE_DESCR { ...@@ -528,7 +505,8 @@ typedef struct _T_TYPE_DESCR {
/*--- Simple-Variable-Object-Description /*--- Simple-Variable-Object-Description
* ------------------------------------------*/ * ------------------------------------------*/
typedef struct _T_SIMPLE_VAR_OBJECT { typedef struct _T_SIMPLE_VAR_OBJECT
{
USIGN16 index; /* logical address of the object */ USIGN16 index; /* logical address of the object */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 length; /* length of object in octets */ USIGN8 length; /* length of object in octets */
...@@ -541,7 +519,8 @@ typedef struct _T_SIMPLE_VAR_OBJECT { ...@@ -541,7 +519,8 @@ typedef struct _T_SIMPLE_VAR_OBJECT {
/*--- Array-Variable-Object-Description /*--- Array-Variable-Object-Description
* -------------------------------------------*/ * -------------------------------------------*/
typedef struct _T_ARRAY_OBJECT { typedef struct _T_ARRAY_OBJECT
{
USIGN16 index; /* logical address of the object */ USIGN16 index; /* logical address of the object */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 length; /* length of an element in octets */ USIGN8 length; /* length of an element in octets */
...@@ -556,7 +535,8 @@ typedef struct _T_ARRAY_OBJECT { ...@@ -556,7 +535,8 @@ typedef struct _T_ARRAY_OBJECT {
/*--- Record-Variable-Object-Description /*--- Record-Variable-Object-Description
* ------------------------------------------*/ * ------------------------------------------*/
typedef struct _T_RECORD_OBJECT { typedef struct _T_RECORD_OBJECT
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 no_of_address; /* number of local address */ USIGN8 no_of_address; /* number of local address */
...@@ -570,7 +550,8 @@ typedef struct _T_RECORD_OBJECT { ...@@ -570,7 +550,8 @@ typedef struct _T_RECORD_OBJECT {
/*--- Variable-List-Object-Description /*--- Variable-List-Object-Description
* --------------------------------------------*/ * --------------------------------------------*/
typedef struct _T_VAR_LIST_OBJECT { typedef struct _T_VAR_LIST_OBJECT
{
USIGN16 index; /* logical address of the object */ USIGN16 index; /* logical address of the object */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 no_of_var; /* number of variables */ USIGN8 no_of_var; /* number of variables */
...@@ -585,13 +566,15 @@ typedef struct _T_VAR_LIST_OBJECT { ...@@ -585,13 +566,15 @@ typedef struct _T_VAR_LIST_OBJECT {
/* --- Read-Service /* --- Read-Service
* ---------------------------------------------------------------*/ * ---------------------------------------------------------------*/
typedef struct _T_VAR_READ_REQ { typedef struct _T_VAR_READ_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_VAR_READ_REQ; } T_VAR_READ_REQ;
typedef struct _T_VAR_READ_CNF { typedef struct _T_VAR_READ_CNF
{
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
USIGN8 length; /* length of values in bytes */ USIGN8 length; /* length of values in bytes */
/* USIGN8 value[lenght]; list of data */ /* USIGN8 value[lenght]; list of data */
...@@ -599,13 +582,15 @@ typedef struct _T_VAR_READ_CNF { ...@@ -599,13 +582,15 @@ typedef struct _T_VAR_READ_CNF {
/*--- Read-With-Type-Service /*--- Read-With-Type-Service
* ------------------------------------------------------*/ * ------------------------------------------------------*/
typedef struct _T_VAR_READ_WITH_TYPE_REQ { typedef struct _T_VAR_READ_WITH_TYPE_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_VAR_READ_WITH_TYPE_REQ; } T_VAR_READ_WITH_TYPE_REQ;
typedef struct _T_VAR_READ_WITH_TYPE_CNF { typedef struct _T_VAR_READ_WITH_TYPE_CNF
{
USIGN8 no_of_type_descr; /* number of typedescription */ USIGN8 no_of_type_descr; /* number of typedescription */
USIGN8 length; /* # of values in bytes */ USIGN8 length; /* # of values in bytes */
/* T_TYPE_DESCR type_descr_list[no_of_type_descr]; list of type /* T_TYPE_DESCR type_descr_list[no_of_type_descr]; list of type
...@@ -615,7 +600,8 @@ typedef struct _T_VAR_READ_WITH_TYPE_CNF { ...@@ -615,7 +600,8 @@ typedef struct _T_VAR_READ_WITH_TYPE_CNF {
/*--- Write-Service /*--- Write-Service
* ---------------------------------------------------------------*/ * ---------------------------------------------------------------*/
typedef struct _T_VAR_WRITE_REQ { typedef struct _T_VAR_WRITE_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
USIGN8 length; /* # number of values in bytes */ USIGN8 length; /* # number of values in bytes */
...@@ -624,7 +610,8 @@ typedef struct _T_VAR_WRITE_REQ { ...@@ -624,7 +610,8 @@ typedef struct _T_VAR_WRITE_REQ {
/*--- Write-With-Type-Service /*--- Write-With-Type-Service
* -----------------------------------------------------*/ * -----------------------------------------------------*/
typedef struct _T_VAR_WRITE_WITH_TYPE_REQ { typedef struct _T_VAR_WRITE_WITH_TYPE_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
...@@ -637,7 +624,8 @@ typedef struct _T_VAR_WRITE_WITH_TYPE_REQ { ...@@ -637,7 +624,8 @@ typedef struct _T_VAR_WRITE_WITH_TYPE_REQ {
/*--- Information-Report-Service /*--- Information-Report-Service
* --------------------------------------------------*/ * --------------------------------------------------*/
typedef struct _T_VAR_INFO_RPT_REQ { typedef struct _T_VAR_INFO_RPT_REQ
{
USIGN8 priority; /* priority */ USIGN8 priority; /* priority */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
...@@ -648,7 +636,8 @@ typedef struct _T_VAR_INFO_RPT_REQ { ...@@ -648,7 +636,8 @@ typedef struct _T_VAR_INFO_RPT_REQ {
/*--- Information-Report-With-Type-Service /*--- Information-Report-With-Type-Service
* ----------------------------------------*/ * ----------------------------------------*/
typedef struct _T_VAR_INFO_RPT_WITH_TYPE_REQ { typedef struct _T_VAR_INFO_RPT_WITH_TYPE_REQ
{
USIGN8 priority; /* priority */ USIGN8 priority; /* priority */
USIGN8 subindex; /* subindex */ USIGN8 subindex; /* subindex */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
...@@ -661,7 +650,8 @@ typedef struct _T_VAR_INFO_RPT_WITH_TYPE_REQ { ...@@ -661,7 +650,8 @@ typedef struct _T_VAR_INFO_RPT_WITH_TYPE_REQ {
/*--- Define-Variable-List-Service /*--- Define-Variable-List-Service
* ------------------------------------------------*/ * ------------------------------------------------*/
typedef struct _T_VAR_DEFINE_VAR_LIST_REQ { typedef struct _T_VAR_DEFINE_VAR_LIST_REQ
{
T_ACCESS access; /* access rights */ T_ACCESS access; /* access rights */
STRINGV name[MAX_OBJECT_NAME_LENGTH]; /* variable list name */ STRINGV name[MAX_OBJECT_NAME_LENGTH]; /* variable list name */
USIGN8 extension[MAX_EXTENSION_LENGTH]; /* extension */ USIGN8 extension[MAX_EXTENSION_LENGTH]; /* extension */
...@@ -675,25 +665,29 @@ typedef struct _T_VAR_DEFINE_VAR_LIST_REQ { ...@@ -675,25 +665,29 @@ typedef struct _T_VAR_DEFINE_VAR_LIST_REQ {
#endif #endif
} T_VAR_DEFINE_VAR_LIST_REQ; } T_VAR_DEFINE_VAR_LIST_REQ;
typedef struct _T_VAR_DEFINE_VAR_LIST_CNF { typedef struct _T_VAR_DEFINE_VAR_LIST_CNF
{
USIGN16 index; /* index of variable list */ USIGN16 index; /* index of variable list */
} T_VAR_DEFINE_VAR_LIST_CNF; } T_VAR_DEFINE_VAR_LIST_CNF;
/*--- Delete-Variable-List-Service /*--- Delete-Variable-List-Service
* ------------------------------------------------*/ * ------------------------------------------------*/
typedef struct _T_VAR_DELETE_VAR_LIST_REQ { typedef struct _T_VAR_DELETE_VAR_LIST_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
} T_VAR_DELETE_VAR_LIST_REQ; } T_VAR_DELETE_VAR_LIST_REQ;
/*--- Physical-Read-Service /*--- Physical-Read-Service
* -------------------------------------------------------*/ * -------------------------------------------------------*/
typedef struct _T_VAR_PHYS_READ_REQ { typedef struct _T_VAR_PHYS_READ_REQ
{
USIGN32 int_addr; /* physical address to be read */ USIGN32 int_addr; /* physical address to be read */
USIGN8 length; /* length in octets */ USIGN8 length; /* length in octets */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_VAR_PHYS_READ_REQ; } T_VAR_PHYS_READ_REQ;
typedef struct _T_VAR_PHYS_READ_CNF { typedef struct _T_VAR_PHYS_READ_CNF
{
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
USIGN8 length; /* length of values in bytes */ USIGN8 length; /* length of values in bytes */
/* USIGN8 data[length]; list of data */ /* USIGN8 data[length]; list of data */
...@@ -701,7 +695,8 @@ typedef struct _T_VAR_PHYS_READ_CNF { ...@@ -701,7 +695,8 @@ typedef struct _T_VAR_PHYS_READ_CNF {
/*--- Physical-Write-Service /*--- Physical-Write-Service
* ------------------------------------------------------*/ * ------------------------------------------------------*/
typedef struct _T_VAR_PHYS_WRITE_REQ { typedef struct _T_VAR_PHYS_WRITE_REQ
{
USIGN32 int_addr; /* physical address to be write */ USIGN32 int_addr; /* physical address to be write */
USIGN8 dummy; /* length in octets */ USIGN8 dummy; /* length in octets */
USIGN8 length; /* length in octets */ USIGN8 length; /* length in octets */
...@@ -710,7 +705,8 @@ typedef struct _T_VAR_PHYS_WRITE_REQ { ...@@ -710,7 +705,8 @@ typedef struct _T_VAR_PHYS_WRITE_REQ {
/*--- Data-Event service /*--- Data-Event service
* ----------------------------------------------------------*/ * ----------------------------------------------------------*/
typedef struct _T_VAR_DATA_EVENT_IND { typedef struct _T_VAR_DATA_EVENT_IND
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
USIGN8 length; /* length of values in bytes */ USIGN8 length; /* length of values in bytes */
...@@ -722,7 +718,8 @@ typedef struct _T_VAR_DATA_EVENT_IND { ...@@ -722,7 +718,8 @@ typedef struct _T_VAR_DATA_EVENT_IND {
/*****************************************************************************/ /*****************************************************************************/
/*--- Event-Object-Description ----------------------------------------------*/ /*--- Event-Object-Description ----------------------------------------------*/
typedef struct _T_EVENT_OBJECT { typedef struct _T_EVENT_OBJECT
{
USIGN16 index_event; /* index */ USIGN16 index_event; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 data_length; /* size of event data */ USIGN8 data_length; /* size of event data */
...@@ -735,7 +732,8 @@ typedef struct _T_EVENT_OBJECT { ...@@ -735,7 +732,8 @@ typedef struct _T_EVENT_OBJECT {
} T_EVENT_OBJECT; } T_EVENT_OBJECT;
/*--- Event-Notification-Service --------------------------------------------*/ /*--- Event-Notification-Service --------------------------------------------*/
typedef struct _T_EVENT_NOTIFY_REQ { typedef struct _T_EVENT_NOTIFY_REQ
{
USIGN8 priority; /* priority */ USIGN8 priority; /* priority */
USIGN8 event_number; /* event number */ USIGN8 event_number; /* event number */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
...@@ -745,7 +743,8 @@ typedef struct _T_EVENT_NOTIFY_REQ { ...@@ -745,7 +743,8 @@ typedef struct _T_EVENT_NOTIFY_REQ {
} T_EVENT_NOTIFY_REQ; } T_EVENT_NOTIFY_REQ;
/*--- Event-Notification-With-Type-Service ----------------------------------*/ /*--- Event-Notification-With-Type-Service ----------------------------------*/
typedef struct _T_EVENT_NOTIFY_WITH_TYPE_REQ { typedef struct _T_EVENT_NOTIFY_WITH_TYPE_REQ
{
USIGN8 priority; /* priority */ USIGN8 priority; /* priority */
USIGN8 event_number; /* event number */ USIGN8 event_number; /* event number */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
...@@ -756,14 +755,16 @@ typedef struct _T_EVENT_NOTIFY_WITH_TYPE_REQ { ...@@ -756,14 +755,16 @@ typedef struct _T_EVENT_NOTIFY_WITH_TYPE_REQ {
} T_EVENT_NOTIFY_WITH_TYPE_REQ; } T_EVENT_NOTIFY_WITH_TYPE_REQ;
/*--- Alter-Event-Condition-Monitoring --------------------------------------*/ /*--- Alter-Event-Condition-Monitoring --------------------------------------*/
typedef struct _T_ALT_EVN_CND_MNT_REQ { typedef struct _T_ALT_EVN_CND_MNT_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
PB_BOOL enabled; /* enable or disable the event */ PB_BOOL enabled; /* enable or disable the event */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_ALT_EVN_CND_MNT_REQ; } T_ALT_EVN_CND_MNT_REQ;
/*--- Acknowledge-Event-Notification ----------------------------------------*/ /*--- Acknowledge-Event-Notification ----------------------------------------*/
typedef struct _T_ACK_EVN_NOTIFY_REQ { typedef struct _T_ACK_EVN_NOTIFY_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 event_number; /* event count number */ USIGN8 event_number; /* event count number */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
...@@ -774,7 +775,8 @@ typedef struct _T_ACK_EVN_NOTIFY_REQ { ...@@ -774,7 +775,8 @@ typedef struct _T_ACK_EVN_NOTIFY_REQ {
/*****************************************************************************/ /*****************************************************************************/
/*--- Domain-Object-Description ---------------------------------------------*/ /*--- Domain-Object-Description ---------------------------------------------*/
typedef struct _T_DOM_OBJECT { typedef struct _T_DOM_OBJECT
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 state; /* domain state */ USIGN8 state; /* domain state */
...@@ -791,35 +793,41 @@ typedef struct _T_DOM_OBJECT { ...@@ -791,35 +793,41 @@ typedef struct _T_DOM_OBJECT {
/*--- Generic-Domain-Download-Services --------------------------------------*/ /*--- Generic-Domain-Download-Services --------------------------------------*/
/*--- Domain-Upload-Services ----------------------------------------------*/ /*--- Domain-Upload-Services ----------------------------------------------*/
typedef struct _T_DOM_REQ { typedef struct _T_DOM_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
} T_DOM_REQ; } T_DOM_REQ;
typedef struct _T_DNL_UPL_SEG_CNF { typedef struct _T_DNL_UPL_SEG_CNF
{
PB_BOOL more_follows; /* more_follows */ PB_BOOL more_follows; /* more_follows */
USIGN8 data_len; /* data length */ USIGN8 data_len; /* data length */
/* USIGN8 data[data_len]; list of data */ /* USIGN8 data[data_len]; list of data */
} T_DNL_UPL_SEG_CNF; } T_DNL_UPL_SEG_CNF;
typedef struct _T_GEN_DNL_SEG_REQ { typedef struct _T_GEN_DNL_SEG_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
PB_BOOL more_follows; /* more_follows */ PB_BOOL more_follows; /* more_follows */
USIGN8 data_len; /* data length */ USIGN8 data_len; /* data length */
/* USIGN8 data[data_len]; list of data */ /* USIGN8 data[data_len]; list of data */
} T_GEN_DNL_SEG_REQ; } T_GEN_DNL_SEG_REQ;
typedef struct _T_TERM_DNL_REQ { typedef struct _T_TERM_DNL_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
PB_BOOL final_result; /* final result */ PB_BOOL final_result; /* final result */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_TERM_DNL_REQ; } T_TERM_DNL_REQ;
typedef struct _T_GEN_TERM_DNL_CNF { typedef struct _T_GEN_TERM_DNL_CNF
{
PB_BOOL final_result; /* final result */ PB_BOOL final_result; /* final result */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_GEN_TERM_DNL_CNF; } T_GEN_TERM_DNL_CNF;
typedef struct _T_REQUEST_DOM_REQ { typedef struct _T_REQUEST_DOM_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
USIGN8 add_info_length; /* length of add. information */ USIGN8 add_info_length; /* length of add. information */
...@@ -831,7 +839,8 @@ typedef struct _T_REQUEST_DOM_REQ { ...@@ -831,7 +839,8 @@ typedef struct _T_REQUEST_DOM_REQ {
/*****************************************************************************/ /*****************************************************************************/
/*--- Program-Invocation-Object ---------------------------------------------*/ /*--- Program-Invocation-Object ---------------------------------------------*/
typedef struct _T_PI_OBJECT { typedef struct _T_PI_OBJECT
{
USIGN16 index; /* pi_index in OD */ USIGN16 index; /* pi_index in OD */
USIGN8 obj_code; /* object code for OD */ USIGN8 obj_code; /* object code for OD */
USIGN8 cnt_dom; /* # domains */ USIGN8 cnt_dom; /* # domains */
...@@ -847,7 +856,8 @@ typedef struct _T_PI_OBJECT { ...@@ -847,7 +856,8 @@ typedef struct _T_PI_OBJECT {
} T_PI_OBJECT; } T_PI_OBJECT;
/*--- Create-PI-Service -----------------------------------------------------*/ /*--- Create-PI-Service -----------------------------------------------------*/
typedef struct _T_PI_CR8_REQ { typedef struct _T_PI_CR8_REQ
{
T_ACCESS access; /* access rights */ T_ACCESS access; /* access rights */
USIGN8 cnt_dom; /* number of domains */ USIGN8 cnt_dom; /* number of domains */
PB_BOOL reusable; /* => TRUE pi is reusable */ PB_BOOL reusable; /* => TRUE pi is reusable */
...@@ -861,51 +871,60 @@ typedef struct _T_PI_CR8_REQ { ...@@ -861,51 +871,60 @@ typedef struct _T_PI_CR8_REQ {
#endif #endif
} T_PI_CR8_REQ; } T_PI_CR8_REQ;
typedef struct _T_PI_CR8_CNF { typedef struct _T_PI_CR8_CNF
{
USIGN16 index; /* index of PI */ USIGN16 index; /* index of PI */
} T_PI_CR8_CNF; } T_PI_CR8_CNF;
/*--- Delete-PI-Service -----------------------------------------------------*/ /*--- Delete-PI-Service -----------------------------------------------------*/
typedef struct _T_PI_DEL_REQ { typedef struct _T_PI_DEL_REQ
{
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
} T_PI_DEL_REQ; } T_PI_DEL_REQ;
/*--- Start-PI-Service ------------------------------------------------------*/ /*--- Start-PI-Service ------------------------------------------------------*/
typedef struct _T_PI_START_REQ { typedef struct _T_PI_START_REQ
{
T_ACC_SPEC acc_spec; /* access specific. */ T_ACC_SPEC acc_spec; /* access specific. */
USIGN8 exec_arg[MAX_EXECUTION_ARGUMENT_LENGTH]; /* execution arg. */ USIGN8 exec_arg[MAX_EXECUTION_ARGUMENT_LENGTH]; /* execution arg. */
} T_PI_START_REQ; } T_PI_START_REQ;
/*--- Stop-PI-Service -------------------------------------------------------*/ /*--- Stop-PI-Service -------------------------------------------------------*/
typedef struct _T_PI_STOP_REQ { typedef struct _T_PI_STOP_REQ
{
T_ACC_SPEC acc_spec; /* access specific. */ T_ACC_SPEC acc_spec; /* access specific. */
} T_PI_STOP_REQ; } T_PI_STOP_REQ;
/*--- Resume-PI-Service -----------------------------------------------------*/ /*--- Resume-PI-Service -----------------------------------------------------*/
typedef struct _T_PI_RESUME_REQ { typedef struct _T_PI_RESUME_REQ
{
T_ACC_SPEC acc_spec; /* access specific. */ T_ACC_SPEC acc_spec; /* access specific. */
USIGN8 exec_arg[MAX_EXECUTION_ARGUMENT_LENGTH]; /* execution arg. */ USIGN8 exec_arg[MAX_EXECUTION_ARGUMENT_LENGTH]; /* execution arg. */
} T_PI_RESUME_REQ; } T_PI_RESUME_REQ;
/*--- Reset-PI-Service ------------------------------------------------------*/ /*--- Reset-PI-Service ------------------------------------------------------*/
typedef struct _T_PI_RESET_REQ { typedef struct _T_PI_RESET_REQ
{
T_ACC_SPEC acc_spec; /* access specific. */ T_ACC_SPEC acc_spec; /* access specific. */
} T_PI_RESET_REQ; } T_PI_RESET_REQ;
/*--- Kill-PI-Service -------------------------------------------------------*/ /*--- Kill-PI-Service -------------------------------------------------------*/
typedef struct _T_PI_KILL_REQ { typedef struct _T_PI_KILL_REQ
{
T_ACC_SPEC acc_spec; /* access specific. */ T_ACC_SPEC acc_spec; /* access specific. */
} T_PI_KILL_REQ; } T_PI_KILL_REQ;
/*--- PI-SET-STATE-Service ( only local Service ) ---------------------------*/ /*--- PI-SET-STATE-Service ( only local Service ) ---------------------------*/
typedef struct _T_PI_SET_STATE_REQ { typedef struct _T_PI_SET_STATE_REQ
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
USIGN8 state; /* new PI state */ USIGN8 state; /* new PI state */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_PI_SET_STATE_REQ; } T_PI_SET_STATE_REQ;
typedef struct _T_PI_SET_STATE_CNF { typedef struct _T_PI_SET_STATE_CNF
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
} T_PI_SET_STATE_CNF; } T_PI_SET_STATE_CNF;
...@@ -915,7 +934,8 @@ typedef struct _T_PI_SET_STATE_CNF { ...@@ -915,7 +934,8 @@ typedef struct _T_PI_SET_STATE_CNF {
/* --- OD-Object-Description /* --- OD-Object-Description
* ---------------------------------------------------*/ * ---------------------------------------------------*/
typedef struct _T_OD_OBJ_DESCR_HDR { typedef struct _T_OD_OBJ_DESCR_HDR
{
USIGN16 index; /* index = 0 */ USIGN16 index; /* index = 0 */
USIGN8 obj_code; /* object-code = 1 */ USIGN8 obj_code; /* object-code = 1 */
PB_BOOL flag; /* => TRUE write protected */ PB_BOOL flag; /* => TRUE write protected */
...@@ -937,7 +957,8 @@ typedef struct _T_OD_OBJ_DESCR_HDR { ...@@ -937,7 +957,8 @@ typedef struct _T_OD_OBJ_DESCR_HDR {
} T_OD_OBJ_DESCR_HDR; } T_OD_OBJ_DESCR_HDR;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct T_OV_OBJ_DESCR_HDR { typedef struct T_OV_OBJ_DESCR_HDR
{
USIGN16 index; /* index = 0 */ USIGN16 index; /* index = 0 */
USIGN8 obj_code; /* object-code = 1 */ USIGN8 obj_code; /* object-code = 1 */
BOOL flag; /* => TRUE write protected */ BOOL flag; /* => TRUE write protected */
...@@ -960,7 +981,8 @@ typedef struct T_OV_OBJ_DESCR_HDR { ...@@ -960,7 +981,8 @@ typedef struct T_OV_OBJ_DESCR_HDR {
#endif #endif
/* --- OD-Null-Object-Description -------------------------------------------*/ /* --- OD-Null-Object-Description -------------------------------------------*/
typedef struct _T_OD_NULL_OBJECT { typedef struct _T_OD_NULL_OBJECT
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 dummy; /* alignment reasons */ USIGN8 dummy; /* alignment reasons */
...@@ -971,7 +993,8 @@ typedef T_OD_NULL_OBJECT T_OV_NULL_OBJECT; ...@@ -971,7 +993,8 @@ typedef T_OD_NULL_OBJECT T_OV_NULL_OBJECT;
#endif #endif
/* --- OD-Static-Type-Object-Description ------------------------------------*/ /* --- OD-Static-Type-Object-Description ------------------------------------*/
typedef struct _T_OD_ST_DT_DESCR { typedef struct _T_OD_ST_DT_DESCR
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
...@@ -983,7 +1006,8 @@ typedef T_OD_ST_DT_DESCR T_OV_ST_DT_DESCR; ...@@ -983,7 +1006,8 @@ typedef T_OD_ST_DT_DESCR T_OV_ST_DT_DESCR;
#endif #endif
/* --- OD-Static-Structure-Object-Description -------------------------------*/ /* --- OD-Static-Structure-Object-Description -------------------------------*/
typedef struct _T_OD_DT_LIST { typedef struct _T_OD_DT_LIST
{
USIGN16 index_of_type; /* logical address of the type */ USIGN16 index_of_type; /* logical address of the type */
USIGN8 length; /* length of the element in octets */ USIGN8 length; /* length of the element in octets */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
...@@ -993,7 +1017,8 @@ typedef struct _T_OD_DT_LIST { ...@@ -993,7 +1017,8 @@ typedef struct _T_OD_DT_LIST {
typedef T_OD_DT_LIST T_OV_DT_LIST; typedef T_OD_DT_LIST T_OV_DT_LIST;
#endif #endif
typedef struct _T_OD_ST_DS_DESCR { typedef struct _T_OD_ST_DS_DESCR
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 no_of_elements; /* number of record elements */ USIGN8 no_of_elements; /* number of record elements */
...@@ -1002,7 +1027,8 @@ typedef struct _T_OD_ST_DS_DESCR { ...@@ -1002,7 +1027,8 @@ typedef struct _T_OD_ST_DS_DESCR {
} T_OD_ST_DS_DESCR; } T_OD_ST_DS_DESCR;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_OV_ST_DS_DESCR { typedef struct _T_OV_ST_DS_DESCR
{
USIGN16 index; /* index */ USIGN16 index; /* index */
USIGN8 obj_code; /* object code */ USIGN8 obj_code; /* object code */
USIGN8 no_of_elements; /* number of record elements */ USIGN8 no_of_elements; /* number of record elements */
...@@ -1013,7 +1039,8 @@ typedef struct _T_OV_ST_DS_DESCR { ...@@ -1013,7 +1039,8 @@ typedef struct _T_OV_ST_DS_DESCR {
/* --- OD-OBJECT-DESCRIPTION ----------------------------------------------- */ /* --- OD-OBJECT-DESCRIPTION ----------------------------------------------- */
#if (PB_VER >= 500) #if (PB_VER >= 500)
typedef struct _T_OBJECT_DESCR { typedef struct _T_OBJECT_DESCR
{
union { union {
T_OD_OBJ_DESCR_HDR od_obj_descr; T_OD_OBJ_DESCR_HDR od_obj_descr;
T_OD_NULL_OBJECT null_obj_descr; T_OD_NULL_OBJECT null_obj_descr;
...@@ -1029,7 +1056,8 @@ typedef struct _T_OBJECT_DESCR { ...@@ -1029,7 +1056,8 @@ typedef struct _T_OBJECT_DESCR {
} id; } id;
} T_OBJECT_DESCR; } T_OBJECT_DESCR;
#else #else
typedef struct _T_OBJECT_DESCR { typedef struct _T_OBJECT_DESCR
{
union { union {
T_OV_OBJ_DESCR_HDR ov_obj_descr; T_OV_OBJ_DESCR_HDR ov_obj_descr;
T_OV_NULL_OBJECT null_obj_descr; T_OV_NULL_OBJECT null_obj_descr;
...@@ -1047,13 +1075,15 @@ typedef struct _T_OBJECT_DESCR { ...@@ -1047,13 +1075,15 @@ typedef struct _T_OBJECT_DESCR {
#endif #endif
/* --- OD-PACKED-OBJECT-DESCRIPTION ---------------------------------------- */ /* --- OD-PACKED-OBJECT-DESCRIPTION ---------------------------------------- */
typedef struct _T_PACKED_OBJECT_DESCR { typedef struct _T_PACKED_OBJECT_DESCR
{
USIGN8 length; /* length of packed object description*/ USIGN8 length; /* length of packed object description*/
/* USIGN8 packed_obj_descr[length]; packed object description */ /* USIGN8 packed_obj_descr[length]; packed object description */
} T_PACKED_OBJECT_DESCR; } T_PACKED_OBJECT_DESCR;
/* --- Get-OD-Service -------------------------------------------------------*/ /* --- Get-OD-Service -------------------------------------------------------*/
typedef struct _T_GET_OD_REQ { typedef struct _T_GET_OD_REQ
{
PB_BOOL format; /* TRUE = long format / FALSE = short */ PB_BOOL format; /* TRUE = long format / FALSE = short */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
T_ACC_SPEC acc_spec; /* access specification */ T_ACC_SPEC acc_spec; /* access specification */
...@@ -1063,7 +1093,8 @@ typedef struct _T_GET_OD_REQ { ...@@ -1063,7 +1093,8 @@ typedef struct _T_GET_OD_REQ {
typedef T_GET_OD_REQ T_GET_OV_REQ; typedef T_GET_OD_REQ T_GET_OV_REQ;
#endif #endif
typedef struct _T_GET_OD_CNF { typedef struct _T_GET_OD_CNF
{
PB_BOOL more_follows; /* further object descr. follow */ PB_BOOL more_follows; /* further object descr. follow */
USIGN8 no_of_od_descr; /* # of object description */ USIGN8 no_of_od_descr; /* # of object description */
/* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_od_descr]; list of object /* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_od_descr]; list of object
...@@ -1071,7 +1102,8 @@ typedef struct _T_GET_OD_CNF { ...@@ -1071,7 +1102,8 @@ typedef struct _T_GET_OD_CNF {
} T_GET_OD_CNF; } T_GET_OD_CNF;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_GET_OV_CNF { typedef struct _T_GET_OV_CNF
{
PB_BOOL more_follows; /* further object descr. follow */ PB_BOOL more_follows; /* further object descr. follow */
USIGN8 no_of_ov_descr; /* # of object description */ USIGN8 no_of_ov_descr; /* # of object description */
/* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_ov_descr]; list of object /* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_ov_descr]; list of object
...@@ -1080,7 +1112,8 @@ typedef struct _T_GET_OV_CNF { ...@@ -1080,7 +1112,8 @@ typedef struct _T_GET_OV_CNF {
#endif #endif
/* --- Put-OD-Services ------------------------------------------------------*/ /* --- Put-OD-Services ------------------------------------------------------*/
typedef struct _T_INIT_PUT_OD_REQ { typedef struct _T_INIT_PUT_OD_REQ
{
INT8 consequence; /* Loading interactive/non-interactive */ INT8 consequence; /* Loading interactive/non-interactive */
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
} T_INIT_PUT_OD_REQ; } T_INIT_PUT_OD_REQ;
...@@ -1089,7 +1122,8 @@ typedef struct _T_INIT_PUT_OD_REQ { ...@@ -1089,7 +1122,8 @@ typedef struct _T_INIT_PUT_OD_REQ {
typedef T_INIT_PUT_OD_REQ T_INIT_PUT_OV_REQ; typedef T_INIT_PUT_OD_REQ T_INIT_PUT_OV_REQ;
#endif #endif
typedef struct _T_PUT_OD_REQ { typedef struct _T_PUT_OD_REQ
{
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
USIGN8 no_of_od_descr; /* # of object description */ USIGN8 no_of_od_descr; /* # of object description */
/* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_od_descr]; list of object /* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_od_descr]; list of object
...@@ -1097,7 +1131,8 @@ typedef struct _T_PUT_OD_REQ { ...@@ -1097,7 +1131,8 @@ typedef struct _T_PUT_OD_REQ {
} T_PUT_OD_REQ; } T_PUT_OD_REQ;
#if (PB_VER < 500) #if (PB_VER < 500)
typedef struct _T_PUT_OV_REQ { typedef struct _T_PUT_OV_REQ
{
USIGN8 dummy; /* alignment */ USIGN8 dummy; /* alignment */
USIGN8 no_of_ov_descr; /* # of object description */ USIGN8 no_of_ov_descr; /* # of object description */
/* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_ov_descr]; list of object /* T_PACKED_OBJECT_DESCR obj_descr_list[no_of_ov_descr]; list of object
...@@ -1106,7 +1141,8 @@ typedef struct _T_PUT_OV_REQ { ...@@ -1106,7 +1141,8 @@ typedef struct _T_PUT_OV_REQ {
#endif #endif
/* --- Load-OD-Local-Service ------------------------------------------------*/ /* --- Load-OD-Local-Service ------------------------------------------------*/
typedef struct _T_INIT_LOAD_OD_REQ { typedef struct _T_INIT_LOAD_OD_REQ
{
USIGN32 vfd_number; USIGN32 vfd_number;
INT8 consequence; INT8 consequence;
USIGN8 dummy; USIGN8 dummy;
...@@ -1116,7 +1152,8 @@ typedef struct _T_INIT_LOAD_OD_REQ { ...@@ -1116,7 +1152,8 @@ typedef struct _T_INIT_LOAD_OD_REQ {
typedef T_INIT_LOAD_OD_REQ T_INIT_LOAD_OV_REQ; typedef T_INIT_LOAD_OD_REQ T_INIT_LOAD_OV_REQ;
#endif #endif
typedef struct _T_INIT_LOAD_OD_CNF { typedef struct _T_INIT_LOAD_OD_CNF
{
USIGN32 vfd_number; USIGN32 vfd_number;
} T_INIT_LOAD_OD_CNF; } T_INIT_LOAD_OD_CNF;
...@@ -1124,7 +1161,8 @@ typedef struct _T_INIT_LOAD_OD_CNF { ...@@ -1124,7 +1161,8 @@ typedef struct _T_INIT_LOAD_OD_CNF {
typedef T_INIT_LOAD_OD_CNF T_INIT_LOAD_OV_CNF; typedef T_INIT_LOAD_OD_CNF T_INIT_LOAD_OV_CNF;
#endif #endif
typedef struct _T_LOAD_OD_REQ { typedef struct _T_LOAD_OD_REQ
{
USIGN32 vfd_number; USIGN32 vfd_number;
T_OBJECT_DESCR obj_descr; T_OBJECT_DESCR obj_descr;
} T_LOAD_OD_REQ; } T_LOAD_OD_REQ;
...@@ -1133,7 +1171,8 @@ typedef struct _T_LOAD_OD_REQ { ...@@ -1133,7 +1171,8 @@ typedef struct _T_LOAD_OD_REQ {
typedef T_LOAD_OD_REQ T_LOAD_OV_REQ; typedef T_LOAD_OD_REQ T_LOAD_OV_REQ;
#endif #endif
typedef struct _T_LOAD_OD_CNF { typedef struct _T_LOAD_OD_CNF
{
USIGN32 vfd_number; USIGN32 vfd_number;
} T_LOAD_OD_CNF; } T_LOAD_OD_CNF;
...@@ -1141,7 +1180,8 @@ typedef struct _T_LOAD_OD_CNF { ...@@ -1141,7 +1180,8 @@ typedef struct _T_LOAD_OD_CNF {
typedef T_LOAD_OD_CNF T_LOAD_OV_CNF; typedef T_LOAD_OD_CNF T_LOAD_OV_CNF;
#endif #endif
typedef struct _T_TERM_LOAD_OD_REQ { typedef struct _T_TERM_LOAD_OD_REQ
{
USIGN32 vfd_number; USIGN32 vfd_number;
} T_TERM_LOAD_OD_REQ; } T_TERM_LOAD_OD_REQ;
...@@ -1149,7 +1189,8 @@ typedef struct _T_TERM_LOAD_OD_REQ { ...@@ -1149,7 +1189,8 @@ typedef struct _T_TERM_LOAD_OD_REQ {
typedef T_TERM_LOAD_OD_REQ T_TERM_LOAD_OV_REQ; typedef T_TERM_LOAD_OD_REQ T_TERM_LOAD_OV_REQ;
#endif #endif
typedef struct _T_TERM_LOAD_OD_CNF { typedef struct _T_TERM_LOAD_OD_CNF
{
USIGN32 vfd_number; USIGN32 vfd_number;
} T_TERM_LOAD_OD_CNF; } T_TERM_LOAD_OD_CNF;
...@@ -1158,7 +1199,8 @@ typedef T_TERM_LOAD_OD_CNF T_TERM_LOAD_OV_CNF; ...@@ -1158,7 +1199,8 @@ typedef T_TERM_LOAD_OD_CNF T_TERM_LOAD_OV_CNF;
#endif #endif
/*--- Read-OD-Local-Service -------------------------------------------------*/ /*--- Read-OD-Local-Service -------------------------------------------------*/
typedef struct _T_OD_READ_LOC_REQ { typedef struct _T_OD_READ_LOC_REQ
{
USIGN32 vfd_number; USIGN32 vfd_number;
USIGN8 obj_code; USIGN8 obj_code;
USIGN8 dummy; USIGN8 dummy;
...@@ -1169,7 +1211,8 @@ typedef struct _T_OD_READ_LOC_REQ { ...@@ -1169,7 +1211,8 @@ typedef struct _T_OD_READ_LOC_REQ {
typedef T_OD_READ_LOC_REQ T_OV_READ_LOC_REQ; typedef T_OD_READ_LOC_REQ T_OV_READ_LOC_REQ;
#endif #endif
typedef struct _T_OD_READ_LOC_CNF { typedef struct _T_OD_READ_LOC_CNF
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
T_OBJECT_DESCR obj_descr; /* object description */ T_OBJECT_DESCR obj_descr; /* object description */
} T_OD_READ_LOC_CNF; } T_OD_READ_LOC_CNF;
...@@ -1183,7 +1226,8 @@ typedef T_OD_READ_LOC_CNF T_OV_READ_LOC_CNF; ...@@ -1183,7 +1226,8 @@ typedef T_OD_READ_LOC_CNF T_OV_READ_LOC_CNF;
/*****************************************************************************/ /*****************************************************************************/
/*--- Create-VFD-Service ----------------------------------------------------*/ /*--- Create-VFD-Service ----------------------------------------------------*/
typedef struct _T_VFD_CREATE_REQ { typedef struct _T_VFD_CREATE_REQ
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
STRINGV vendor_name[MAX_VFD_STRING_LENGTH]; /* vendor name */ STRINGV vendor_name[MAX_VFD_STRING_LENGTH]; /* vendor name */
STRINGV model_name[MAX_VFD_STRING_LENGTH]; /* model-name */ STRINGV model_name[MAX_VFD_STRING_LENGTH]; /* model-name */
...@@ -1191,23 +1235,27 @@ typedef struct _T_VFD_CREATE_REQ { ...@@ -1191,23 +1235,27 @@ typedef struct _T_VFD_CREATE_REQ {
USIGN8 profile_number[2]; /* profile number */ USIGN8 profile_number[2]; /* profile number */
} T_VFD_CREATE_REQ; } T_VFD_CREATE_REQ;
typedef struct _T_VFD_CREATE_CNF { typedef struct _T_VFD_CREATE_CNF
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
} T_VFD_CREATE_CNF; } T_VFD_CREATE_CNF;
/*--- VFD-Set-Physical-Status -----------------------------------------------*/ /*--- VFD-Set-Physical-Status -----------------------------------------------*/
typedef struct _T_VFD_SET_PHYS_STATUS_REQ { typedef struct _T_VFD_SET_PHYS_STATUS_REQ
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
USIGN8 physical_status; /* physical status */ USIGN8 physical_status; /* physical status */
USIGN8 dummy; /* alignment byte */ USIGN8 dummy; /* alignment byte */
} T_VFD_SET_PHYS_STATUS_REQ; } T_VFD_SET_PHYS_STATUS_REQ;
typedef struct _T_VFD_SET_PHYS_STATUS_CNF { typedef struct _T_VFD_SET_PHYS_STATUS_CNF
{
USIGN32 vfd_number; /* vfd number */ USIGN32 vfd_number; /* vfd number */
} T_VFD_SET_PHYS_STATUS_CNF; } T_VFD_SET_PHYS_STATUS_CNF;
/*--- Status-Service --------------------------------------------------------*/ /*--- Status-Service --------------------------------------------------------*/
typedef struct _T_VFD_STATUS_CNF { typedef struct _T_VFD_STATUS_CNF
{
USIGN8 logical_status; /* logical status */ USIGN8 logical_status; /* logical status */
USIGN8 physical_status; /* physical status */ USIGN8 physical_status; /* physical status */
USIGN8 local_detail[3]; /* local detail */ USIGN8 local_detail[3]; /* local detail */
...@@ -1215,7 +1263,8 @@ typedef struct _T_VFD_STATUS_CNF { ...@@ -1215,7 +1263,8 @@ typedef struct _T_VFD_STATUS_CNF {
} T_VFD_STATUS_CNF; } T_VFD_STATUS_CNF;
/*--- Unsolicited-Status-Service --------------------------------------------*/ /*--- Unsolicited-Status-Service --------------------------------------------*/
typedef struct _T_VFD_UNSOL_STATUS_REQ { typedef struct _T_VFD_UNSOL_STATUS_REQ
{
USIGN8 priority; /* priority */ USIGN8 priority; /* priority */
USIGN8 logical_status; /* logical status */ USIGN8 logical_status; /* logical status */
USIGN8 physical_status; /* physical status */ USIGN8 physical_status; /* physical status */
...@@ -1225,7 +1274,8 @@ typedef struct _T_VFD_UNSOL_STATUS_REQ { ...@@ -1225,7 +1274,8 @@ typedef struct _T_VFD_UNSOL_STATUS_REQ {
} T_VFD_UNSOL_STATUS_REQ; } T_VFD_UNSOL_STATUS_REQ;
/*--- Identify-Service ------------------------------------------------------*/ /*--- Identify-Service ------------------------------------------------------*/
typedef struct _T_VFD_IDENTIFY_CNF { typedef struct _T_VFD_IDENTIFY_CNF
{
STRINGV vendor_name[MAX_VFD_STRING_LENGTH]; /* producer of the device */ STRINGV vendor_name[MAX_VFD_STRING_LENGTH]; /* producer of the device */
STRINGV model_name[MAX_VFD_STRING_LENGTH]; /* model-name of the device */ STRINGV model_name[MAX_VFD_STRING_LENGTH]; /* model-name of the device */
STRINGV revision[MAX_VFD_STRING_LENGTH]; /* revision of the device */ STRINGV revision[MAX_VFD_STRING_LENGTH]; /* revision of the device */
......
/*
* 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.
*/
/*
* ProviewR Open Source Process Control.
* Copyright (C) 2005-2011 SSAB Oxelosund AB.
*
* This file is part of Proview.
* Copyright (C) SOFTING GmbH 1995-1999.
* 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 the program, if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*****************************************************************************/
/* */
/* SOFTING GmbH */
/* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */
/* */
/* Copyright (C) SOFTING GmbH 1995-1999 */
/* */
/*****************************************************************************/
/*****************************************************************************/
/* PROFIBoard SPECIFIC DEFINES */
/* Filename : PB_HW.H */
/* Version : 5.22.0.00.release */
/* Date : 26-February-1999 */
/* Author : SOFTING-BG2 */
/* */
/* Description : This file contains the PROFIboard specific defines */
/* */
/* CHANGE_NOTES */
/* */
/* date name change */
/* ----------------------------------------------------------------------- */
/* 03.03.98 BOE new/modify #defines for DPRAM SIZES and IRQ-VAL */
/* offset in DPR */
/* */
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
#ifndef __PB_HW__
#define __PB_HW__
/* --- macros to access DPR ----------------------------------------------- */
#define _GET_DPR_BYTE(var) var
#define _SET_DPR_BYTE(out_var, in_var) out_var = in_var
#define _GET_DPR_WORD(var) var
#define _SET_DPR_WORD(out_var, in_var) out_var = in_var
#define _SET_CHIP_SELECT_ADDR(addr)
/* --- DPRAM SIZES / IRQ-VAL offset in DPR --------------------------------- */
#define DPRAM_SIZE_PROFIBOARD 0x4000 /* 16 KB DPRAM */
#define DPRAM_SIZE_PROFI_104 0x4000 /* 16 KB DPRAM */
#define DPRAM_H_TO_C_IRQ_OFFSET 0x2 /* IRQ memory cells at DPRAM end */
#define DPRAM_C_TO_H_IRQ_OFFSET 0x4
/* --- IRQ-VALUE ----------------------------------------------------------- */
#define RST_IRQ_VALUE 0xAA /* Reset */
#define REQ_IRQ_VALUE 0xF0 /* SND/RCV Request */
#define ACK_IRQ_VALUE 0x0F /* SND/RCV Acknowledge */
#define DP_SLAVE_IO_REQ_IRQ_VALUE 0xE0 /* DP-SLAVE-IO Request */
#define DP_SLAVE_IO_ACK_IRQ_VALUE 0x0E /* DP-SLAVE-IO Acknowldege */
#define DP_DATA_STOP_REQ_IRQ_VALUE 0xD0 /* data transfer stop Request */
#define DP_DATA_STOP_ACK_IRQ_VALUE 0x0D /* data transfer stop Acknowldege */
/* --- Read Registers in the I/O Area of the PC ---------------------------- */
#define IDENT_1 (IO_BASE_ADD + 0) /* Identification Byte 1 */
#define IDENT_2 (IO_BASE_ADD + 1) /* Identification Byte 2 */
#define IDENT_3 (IO_BASE_ADD + 2) /* Identification Byte 3 */
#define IDENT_4 (IO_BASE_ADD + 3) /* Identification Byte 4 */
/* --- Write Registers in the I/O Area of the PC --------------------------- */
#define BOARD_CTRL (IO_BASE_ADD + 0) /* Board Control Register */
#define BASE_ADD (IO_BASE_ADD + 1) /* DPRAM Base Address Register */
#define PAGE_SEL (IO_BASE_ADD + 2) /* Page Select Register */
#define CP_IRQ (IO_BASE_ADD + 3) /* Interrupt Register */
/* -- Pindefinition of the Board Control Register -------------------------- */
#define C165_RESET 0x01 /* Reset of the C165 (low active)*/
#define EN_DPRAM 0x02 /* Enable DPRAM for PC (high active)*/
#define SIZE_16_64 0x04 /* DPRAM size 1:16 kByte 0:64kByte*/
/* 64 kByte (low) */
#define BASE_A14 0x08 /* Address low within the 64 kByte */
#define BASE_A15 0x10 /* Address high within the 64 kByte */
#define DPR_WIDTH_8_16 0x20 /* DPRAM width 0:16Bit 1:8Bit */
#define MEMCS16_LA_SA 0x40 /* MEMCS16 generation 0:LA 1:SA */
/* --- Pindefinition of the DPRAM Base Adress Register --------------------- */
/* Bit 7: Base Address 23 (MSB) to */
/* Bit 0: Base Address 16 (LSB) */
/* --- Pindefinition of the Page Select Register --------------------------- */
#define PAGE_A0 0x01 /* Page Address low within the 64 kByte window */
#define PAGE_A1 0x02 /* Page Address high within the 64 kByte window */
#define PAGE_0 0x00 /* Page 0 0KB - 16KB */
#define PAGE_1 0x01 /* Page 1 16KB - 32KB */
#define PAGE_2 0x02 /* Page 2 32KB - 48KB */
#define PAGE_3 0x03 /* Page 3 48KB - 64KB */
/* --- Macros to Set or Clear Page ----------------------------------------- */
#define CLEAR_PAGE(reg) ((reg) & ~(PAGE_A0 | PAGE_A1))
#define SET_PAGE(reg, page) (CLEAR_PAGE(reg) | page)
/* --- Board I/O identifier ------------------------------------------------ */
#define HW_IO_ID_PROFIBOARD_0 0x96
#define HW_IO_ID_PROFIBOARD_1 0x26
#define HW_IO_ID_PROFIBOARD_2 0x6B
#define HW_IO_ID_PROFI104_0 0x2C
#define HW_IO_ID_PROFI104_1 0x12
#define HW_IO_ID_PROFI104_2 0x41
#endif
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -49,9 +14,9 @@ ...@@ -49,9 +14,9 @@
/* PROFIBUS APPLICATION PROGRAM INTERFACE */ /* PROFIBUS APPLICATION PROGRAM INTERFACE */
/* */ /* */
/* Filename : PB_IF.H */ /* Filename : PB_IF.H */
/* Version : 5.26.1.00.release */ /* Version : 5.46.0.00.release */
/* Date : 27-June-2003 */ /* Date : October-2011 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the extern function declarations, */ /* Description : This file contains the extern function declarations, */
/* defines and types of the PROFIBUS Communication Interface */ /* defines and types of the PROFIBUS Communication Interface */
...@@ -102,8 +67,7 @@ ...@@ -102,8 +67,7 @@
#define ACK_IRQ 0x0F /* acknowledge REQ/RES */ #define ACK_IRQ 0x0F /* acknowledge REQ/RES */
#define DP_SLAVE_IO_REQ_IRQ 0xE0 /* MASTER: DP-SLAVE-IO IND/REQ */ #define DP_SLAVE_IO_REQ_IRQ 0xE0 /* MASTER: DP-SLAVE-IO IND/REQ */
#define DP_SLAVE_IO_ACK_IRQ 0x0E /* MASTER: DP-SLAVE-IO acknowldege IND/REQ */ #define DP_SLAVE_IO_ACK_IRQ 0x0E /* MASTER: DP-SLAVE-IO acknowldege IND/REQ */
#define DP_DATA_STOP_REQ_IRQ \ #define DP_DATA_STOP_REQ_IRQ 0xD0 /* MASTER: data transfer stop REQ received \
0xD0 /* MASTER: data transfer stop REQ received \
*/ */
#define DP_DATA_STOP_ACK_IRQ 0x0D /* MASTER: data transfer stop Acknowldege */ #define DP_DATA_STOP_ACK_IRQ 0x0D /* MASTER: data transfer stop Acknowldege */
#define TRC_REQ_IRQ 0xC0 /* TRACE REQ is received */ #define TRC_REQ_IRQ 0xC0 /* TRACE REQ is received */
...@@ -187,15 +151,15 @@ ...@@ -187,15 +151,15 @@
* ---------------------------------------------------------------- */ * ---------------------------------------------------------------- */
#define ID_DP_SLAVE_IO_IMAGE 0x80 /* MASTER: image for slave io datas */ #define ID_DP_SLAVE_IO_IMAGE 0x80 /* MASTER: image for slave io datas */
#define ID_DP_STATUS_IMAGE 0x81 /* MASTER: image for status datas */ #define ID_DP_STATUS_IMAGE 0x81 /* MASTER: image for status datas */
#define ID_DP_SLAVE_IO_CONFIG_IMAGE \ #define ID_DP_SLAVE_IO_CONFIG_IMAGE 0x82 /* MASTER: DPRAM layout of slave io \
0x82 /* MASTER: DPRAM layout of slave io \
*/ */
/* --- DP-SLAVE /* --- DP-SLAVE
* ----------------------------------------------------------------- */ * ----------------------------------------------------------------- */
#define ID_DPS_SLAVE_INPUT_IMAGE 0x90 /* SLAVE: image for slave input datas */ #define ID_DPS_SLAVE_INPUT_IMAGE 0x90 /* SLAVE: image for slave input datas */
#define ID_DPS_SLAVE_OUTPUT_IMAGE \ #define ID_DPS_SLAVE_OUTPUT_IMAGE 0x91 /* SLAVE: image for slave output datas \
0x91 /* SLAVE: image for slave output datas \ */
/* --- 0x92 reserved for internal use
*/ */
/* --- 0xA0 - 0xEF reserved for future use --- (no identifiers defined) /* --- 0xA0 - 0xEF reserved for future use --- (no identifiers defined)
...@@ -216,20 +180,8 @@ ...@@ -216,20 +180,8 @@
/* PROFI SERVICE DESCRIPTION BLOCK */ /* PROFI SERVICE DESCRIPTION BLOCK */
/**********************************************************************************/ /**********************************************************************************/
typedef struct _T_PROFI_DEVICE_HANDLE { typedef struct _T_PROFI_SERVICE_DESCR
HANDLE hServiceReadDevice; // Handle for Service device {
HANDLE hServiceWriteDevice; // Handle for Service device
HANDLE hDpDataDevice; // Handle for DP-Data device
HANDLE hDpsInputDataDevice; // Handle for DP-Slave Input-Data device
HANDLE hDpsOutputDataDevice; // Handle for DP-Slave Output-Data device
USIGN8 CurrentBoardNumber;
} T_PROFI_DEVICE_HANDLE;
/**********************************************************************************/
/* PROFI SERVICE DESCRIPTION BLOCK */
/**********************************************************************************/
typedef struct _T_PROFI_SERVICE_DESCR {
USIGN16 comm_ref; /* communication reference */ USIGN16 comm_ref; /* communication reference */
USIGN8 layer; /* layer identifier */ USIGN8 layer; /* layer identifier */
USIGN8 service; /* service identifier */ USIGN8 service; /* service identifier */
...@@ -242,7 +194,8 @@ typedef struct _T_PROFI_SERVICE_DESCR { ...@@ -242,7 +194,8 @@ typedef struct _T_PROFI_SERVICE_DESCR {
/**********************************************************************************/ /**********************************************************************************/
/* PROFI INITIALIZATION DATA STRUCTURE */ /* PROFI INITIALIZATION DATA STRUCTURE */
/**********************************************************************************/ /**********************************************************************************/
typedef struct _T_PROFI_INIT { typedef struct _T_PROFI_INIT
{
USIGN32 dpr_address; /* DPR address */ USIGN32 dpr_address; /* DPR address */
INT16 io_port_address; /* IO port address */ INT16 io_port_address; /* IO port address */
PB_BOOL load_firmware; /* PB_TRUE for PROFI-IF PB_BOOL load_firmware; /* PB_TRUE for PROFI-IF
...@@ -287,9 +240,10 @@ extern "C" { ...@@ -287,9 +240,10 @@ extern "C" {
#endif #endif
#if defined(WIN32) || defined(_LINUX) #if defined(WIN32) || defined(_LINUX)
FUNCTION extern INT16 CALL_CONV profi_set_default( FUNCTION extern INT16 CALL_CONV profi_set_default(IN USIGN8 Board,
OUT T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 Board, IN USIGN8 Channel, IN USIGN8 Channel,
IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout) IN USIGN32 ReadTimeout,
IN USIGN32 WriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -316,8 +270,9 @@ FUNCTION extern INT16 CALL_CONV profi_set_default( ...@@ -316,8 +270,9 @@ FUNCTION extern INT16 CALL_CONV profi_set_default(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_init(OUT T_PROFI_DEVICE_HANDLE* hDevice, FUNCTION extern INT16 CALL_CONV profi_init(IN USIGN8 Board,
IN USIGN8 Board, IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout) IN USIGN32 ReadTimeout,
IN USIGN32 WriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -345,8 +300,9 @@ FUNCTION extern INT16 CALL_CONV profi_init(OUT T_PROFI_DEVICE_HANDLE* hDevice, ...@@ -345,8 +300,9 @@ FUNCTION extern INT16 CALL_CONV profi_init(OUT T_PROFI_DEVICE_HANDLE* hDevice,
; ;
#endif #endif
FUNCTION extern INT16 CALL_CONV init_profibus( FUNCTION extern INT16 CALL_CONV init_profibus(IN USIGN32 DprAdress,
IN USIGN32 DprAdress, IN USIGN16 IoPortAdress, IN PB_BOOL Dummy) IN USIGN16 IoPortAdress,
IN PB_BOOL Dummy)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -374,7 +330,7 @@ FUNCTION extern INT16 CALL_CONV init_profibus( ...@@ -374,7 +330,7 @@ FUNCTION extern INT16 CALL_CONV init_profibus(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_end(IN T_PROFI_DEVICE_HANDLE* hDevice) FUNCTION extern INT16 CALL_CONV profi_end(VOID)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -389,8 +345,7 @@ FUNCTION extern INT16 CALL_CONV profi_end(IN T_PROFI_DEVICE_HANDLE* hDevice) ...@@ -389,8 +345,7 @@ FUNCTION extern INT16 CALL_CONV profi_end(IN T_PROFI_DEVICE_HANDLE* hDevice)
; ;
FUNCTION extern INT16 CALL_CONV profi_snd_req_res( FUNCTION extern INT16 CALL_CONV profi_snd_req_res(
IN T_PROFI_DEVICE_HANDLE* hDevice, IN T_PROFI_SERVICE_DESCR* pSdb, IN T_PROFI_SERVICE_DESCR* pSdb, IN VOID* pData, IN PB_BOOL dummy)
IN VOID* pData, IN PB_BOOL dummy)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -426,9 +381,9 @@ FUNCTION extern INT16 CALL_CONV profi_snd_req_res( ...@@ -426,9 +381,9 @@ FUNCTION extern INT16 CALL_CONV profi_snd_req_res(
----------------------------------------------------------------------------*/ ----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_rcv_con_ind( FUNCTION extern INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT T_PROFI_SERVICE_DESCR* pSdb, profi_rcv_con_ind(OUT T_PROFI_SERVICE_DESCR* pSdb, OUT VOID* pData,
OUT VOID* pData, INOUT USIGN16* pDataLength) INOUT USIGN16* pDataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -455,9 +410,10 @@ FUNCTION extern INT16 CALL_CONV profi_rcv_con_ind( ...@@ -455,9 +410,10 @@ FUNCTION extern INT16 CALL_CONV profi_rcv_con_ind(
----------------------------------------------------------------------------*/ ----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_set_data( FUNCTION extern INT16 CALL_CONV profi_set_data(IN USIGN8 DataId,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 DataId, IN USIGN16 Offset, IN USIGN16 Offset,
IN USIGN16 DataLength, IN VOID* pData) IN USIGN16 DataLength,
IN VOID* pData)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -485,9 +441,10 @@ FUNCTION extern INT16 CALL_CONV profi_set_data( ...@@ -485,9 +441,10 @@ FUNCTION extern INT16 CALL_CONV profi_set_data(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_get_data( FUNCTION extern INT16 CALL_CONV profi_get_data(IN USIGN8 DataId,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8 DataId, IN USIGN16 Offset, IN USIGN16 Offset,
INOUT USIGN16* pDataLength, OUT VOID* pData) INOUT USIGN16* pDataLength,
OUT VOID* pData)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -515,8 +472,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_data( ...@@ -515,8 +472,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_data(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_set_dps_input_data( FUNCTION extern INT16 CALL_CONV profi_set_dps_input_data(IN USIGN8* pData,
IN T_PROFI_DEVICE_HANDLE* hDevice, IN USIGN8* pData, IN USIGN8 DataLength, IN USIGN8 DataLength,
OUT USIGN8* pState) OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
...@@ -540,8 +497,7 @@ FUNCTION extern INT16 CALL_CONV profi_set_dps_input_data( ...@@ -540,8 +497,7 @@ FUNCTION extern INT16 CALL_CONV profi_set_dps_input_data(
; ;
FUNCTION extern INT16 CALL_CONV profi_get_dps_input_data( FUNCTION extern INT16 CALL_CONV profi_get_dps_input_data(
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN8* pData, OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState)
INOUT USIGN8* pDataLength, OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -561,8 +517,7 @@ FUNCTION extern INT16 CALL_CONV profi_get_dps_input_data( ...@@ -561,8 +517,7 @@ FUNCTION extern INT16 CALL_CONV profi_get_dps_input_data(
; ;
FUNCTION extern INT16 CALL_CONV profi_get_dps_output_data( FUNCTION extern INT16 CALL_CONV profi_get_dps_output_data(
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN8* pData, OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState)
INOUT USIGN8* pDataLength, OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -583,9 +538,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_dps_output_data( ...@@ -583,9 +538,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_dps_output_data(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_get_versions( FUNCTION extern INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT CSTRING* pPapiVersion, profi_get_versions(OUT CSTRING* pPapiVersion, OUT CSTRING* pFirmwareVersion)
OUT CSTRING* pFirmwareVersion)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -604,8 +558,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_versions( ...@@ -604,8 +558,8 @@ FUNCTION extern INT16 CALL_CONV profi_get_versions(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_get_serial_device_number( FUNCTION extern INT16 CALL_CONV
IN T_PROFI_DEVICE_HANDLE* hDevice, OUT USIGN32* pSerialDeviceNumber) profi_get_serial_device_number(OUT USIGN32* pSerialDeviceNumber)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -686,7 +640,9 @@ FUNCTION extern HANDLE CALL_CONV profi_open_basic_management( ...@@ -686,7 +640,9 @@ FUNCTION extern HANDLE CALL_CONV profi_open_basic_management(
; ;
FUNCTION extern HANDLE CALL_CONV profi_open(IN HANDLE hBasicMgmtDevice, FUNCTION extern HANDLE CALL_CONV profi_open(IN HANDLE hBasicMgmtDevice,
IN INT32 DeviceType, IN USIGN32 Index, IN INT32 DesiredAccess) IN INT32 DeviceType,
IN USIGN32 Index,
IN INT32 DesiredAccess)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -737,9 +693,9 @@ FUNCTION extern BOOL CALL_CONV profi_close(IN HANDLE hDevice) ...@@ -737,9 +693,9 @@ FUNCTION extern BOOL CALL_CONV profi_close(IN HANDLE hDevice)
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_read_service(IN HANDLE hDevice, FUNCTION extern INT16 CALL_CONV
OUT T_PROFI_SERVICE_DESCR* pSdb, OUT VOID* pData, profi_read_service(IN HANDLE hDevice, OUT T_PROFI_SERVICE_DESCR* pSdb,
INOUT USIGN16* pDataLength) OUT VOID* pData, INOUT USIGN16* pDataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -840,8 +796,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_multi( ...@@ -840,8 +796,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_multi(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_read_data( FUNCTION extern INT16 CALL_CONV profi_read_data(IN HANDLE hDevice,
IN HANDLE hDevice, OUT VOID* pData, OUT USIGN16* pDataLength) OUT VOID* pData,
OUT USIGN16* pDataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -867,8 +824,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_data( ...@@ -867,8 +824,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_data(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern INT16 CALL_CONV profi_write_data( FUNCTION extern INT16 CALL_CONV profi_write_data(IN HANDLE hDevice,
IN HANDLE hDevice, IN VOID* pData, IN USIGN16 DataLength) IN VOID* pData,
IN USIGN16 DataLength)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -894,7 +852,9 @@ FUNCTION extern INT16 CALL_CONV profi_write_data( ...@@ -894,7 +852,9 @@ FUNCTION extern INT16 CALL_CONV profi_write_data(
; ;
FUNCTION extern INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice, FUNCTION extern INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice,
OUT USIGN8* pData, INOUT USIGN8* pDataLength, OUT USIGN8* pState) OUT USIGN8* pData,
INOUT USIGN8* pDataLength,
OUT USIGN8* pState)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -922,7 +882,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice, ...@@ -922,7 +882,9 @@ FUNCTION extern INT16 CALL_CONV profi_read_dps_data(IN HANDLE hDevice,
; ;
FUNCTION extern INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice, FUNCTION extern INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice,
IN USIGN8* pData, IN USIGN8 DataLength, OUT USIGN8* pState) IN USIGN8* pData,
IN USIGN8 DataLength,
OUT USIGN8* pState)
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -944,8 +906,9 @@ FUNCTION extern INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice, ...@@ -944,8 +906,9 @@ FUNCTION extern INT16 CALL_CONV profi_write_dps_data(IN HANDLE hDevice,
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern BOOL CALL_CONV profi_get_cntrl_info(IN USIGN8 Board, FUNCTION extern BOOL CALL_CONV
OUT char* pFirmwareVersion, OUT USIGN32* pSerialDeviceNumber) profi_get_cntrl_info(IN USIGN8 Board, OUT char* pFirmwareVersion,
OUT USIGN32* pSerialDeviceNumber)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -967,8 +930,9 @@ FUNCTION extern BOOL CALL_CONV profi_get_cntrl_info(IN USIGN8 Board, ...@@ -967,8 +930,9 @@ FUNCTION extern BOOL CALL_CONV profi_get_cntrl_info(IN USIGN8 Board,
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern BOOL CALL_CONV profi_set_timeout( FUNCTION extern BOOL CALL_CONV profi_set_timeout(IN HANDLE hBasicMgmtDevice,
IN HANDLE hBasicMgmtDevice, IN USIGN32 ReadTimeout, IN USIGN32 WriteTimeout) IN USIGN32 ReadTimeout,
IN USIGN32 WriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -990,7 +954,8 @@ FUNCTION extern BOOL CALL_CONV profi_set_timeout( ...@@ -990,7 +954,8 @@ FUNCTION extern BOOL CALL_CONV profi_set_timeout(
; ;
FUNCTION extern BOOL CALL_CONV profi_get_timeout(IN HANDLE hBasicMgmtDevice, FUNCTION extern BOOL CALL_CONV profi_get_timeout(IN HANDLE hBasicMgmtDevice,
OUT USIGN32* pReadTimeout, OUT USIGN32* pWriteTimeout) OUT USIGN32* pReadTimeout,
OUT USIGN32* pWriteTimeout)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1011,8 +976,8 @@ FUNCTION extern BOOL CALL_CONV profi_get_timeout(IN HANDLE hBasicMgmtDevice, ...@@ -1011,8 +976,8 @@ FUNCTION extern BOOL CALL_CONV profi_get_timeout(IN HANDLE hBasicMgmtDevice,
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern BOOL CALL_CONV profi_set_queue_size( FUNCTION extern BOOL CALL_CONV profi_set_queue_size(IN HANDLE hBasicMgmtDevice,
IN HANDLE hBasicMgmtDevice, IN USIGN32 QueueSize) IN USIGN32 QueueSize)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1029,8 +994,8 @@ FUNCTION extern BOOL CALL_CONV profi_set_queue_size( ...@@ -1029,8 +994,8 @@ FUNCTION extern BOOL CALL_CONV profi_set_queue_size(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern BOOL CALL_CONV profi_get_queue_size( FUNCTION extern BOOL CALL_CONV profi_get_queue_size(IN HANDLE hBasicMgmtDevice,
IN HANDLE hBasicMgmtDevice, OUT USIGN32* pQueueSize) OUT USIGN32* pQueueSize)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -1047,8 +1012,8 @@ FUNCTION extern BOOL CALL_CONV profi_get_queue_size( ...@@ -1047,8 +1012,8 @@ FUNCTION extern BOOL CALL_CONV profi_get_queue_size(
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
; ;
FUNCTION extern BOOL CALL_CONV profi_get_overrun_count( FUNCTION extern BOOL CALL_CONV
IN HANDLE hBasicMgmtDevice, OUT USIGN32* pOverrunCount) profi_get_overrun_count(IN HANDLE hBasicMgmtDevice, OUT USIGN32* pOverrunCount)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/* PROFIBUS WINDOWS NT DRIVERS */ /* PROFIBUS LINUX DRIVERS */
/* */ /* */
/* Filename : PB_IOCTL.H */ /* Filename : PB_IOCTL.H */
/* Version : 5.26.0.01.release */ /* Version : 5.45.0.00.release */
/* Date : 30-April-2003 */ /* Date : December-2009 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the global declarations */ /* Description : This file contains the global declarations */
/* to access the PROFIBUS Drivers for Linux */ /* to access the PROFIBUS Drivers for Linux */
...@@ -77,33 +42,43 @@ ...@@ -77,33 +42,43 @@
#define IOCTL_PROFI_SET_DEBUGLEVEL 0x6909 #define IOCTL_PROFI_SET_DEBUGLEVEL 0x6909
#ifdef __KERNEL__ #ifdef __KERNEL__
extern int pb_ioctl(struct inode* inode, struct file* file, unsigned int cmd, #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 32)
long pb_ioctl(struct file* file, unsigned int cmd, unsigned long arg);
#else
int pb_ioctl(struct inode* inode, struct file* file, unsigned int cmd,
unsigned long arg); unsigned long arg);
#endif #endif
#endif
/*****************************************************************************/ /*****************************************************************************/
/* Structure for data image description */ /* Structure for data image description */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _StatusAndData { // #pragma pack(push,1)
typedef struct _StatusAndData
{
void* StatusImage; void* StatusImage;
int StatusLength; __s32 StatusLength;
void* Data; void* Data;
int DataLength; __s32 DataLength;
} StatusAndData; } __attribute__((aligned(8))) StatusAndData;
typedef struct _NTIoctl { typedef struct _NTIoctl
{
void* InBuf; void* InBuf;
int InBufLength; __s32 InBufLength;
void* OutBuf; void* OutBuf;
int OutBufLength; __s32 OutBufLength;
} NTIoctl; } __attribute__((aligned(8))) NTIoctl;
typedef struct _DataImage { typedef struct _DataImage
int id; {
__s32 id;
void* Buf; void* Buf;
unsigned short Length; // sizeof( Buf ) __u16 Length; // sizeof( Buf )
} DataImage; } __attribute__((aligned(8))) DataImage;
// #pragma pack(pop)
/*****************************************************************************/ /*****************************************************************************/
/* Operation Mode as (FMS/DPV1-Master or DP-Slave) */ /* Operation Mode as (FMS/DPV1-Master or DP-Slave) */
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/* PROFIBUS WINDOWS NT DRIVERS */ /* PROFIBUS LINUX DRIVERS */
/* */ /* */
/* Filename : PB_NTDRV.H */ /* Filename : PB_NTDRV.H */
/* Version : 5.26.0.01.release */ /* Version : 5.45.0.00.release */
/* Date : 30-April-2003 */ /* Date : December-2009 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the global declarations */ /* Description : This file contains the global declarations */
/* to access the PROFIBUS Drivers for Windows NT */ /* to access the PROFIBUS Drivers for Linux */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -72,66 +37,66 @@ ...@@ -72,66 +37,66 @@
#define FILE_DEVICE_PROFIBOARD 0x8000 #define FILE_DEVICE_PROFIBOARD 0x8000
#define IOCTL_PROFI_CREATE_DP_MANAGEMENT \ #define IOCTL_PROFI_CREATE_DP_MANAGEMENT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x800, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_DP_SERVICE \ #define IOCTL_PROFI_CREATE_DP_SERVICE \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x801, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_DP_SLAVE_DATA \ #define IOCTL_PROFI_CREATE_DP_SLAVE_DATA \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x802, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_FDL_MANAGEMENT \ #define IOCTL_PROFI_CREATE_FDL_MANAGEMENT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x803, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_FDL_SAP \ #define IOCTL_PROFI_CREATE_FDL_SAP \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x804, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x804, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_FMS_MANAGEMENT \ #define IOCTL_PROFI_CREATE_FMS_MANAGEMENT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x805, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_FMS_CR \ #define IOCTL_PROFI_CREATE_FMS_CR \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x806, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x806, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_CREATE_DP_MSAC \ #define IOCTL_PROFI_CREATE_DP_MSAC \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80e, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80e, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_SET_TIMEOUT \ #define IOCTL_PROFI_SET_TIMEOUT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x808, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x808, METHOD_BUFFERED, FILE_READ_ACCESS) FILE_READ_ACCESS)
#define IOCTL_PROFI_GET_TIMEOUT \ #define IOCTL_PROFI_GET_TIMEOUT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x809, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x809, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_SET_QUEUE_SIZE \ #define IOCTL_PROFI_SET_QUEUE_SIZE \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80a, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80a, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_GET_QUEUE_SIZE \ #define IOCTL_PROFI_GET_QUEUE_SIZE \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80b, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80b, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_GET_OVERRUN_COUNT \ #define IOCTL_PROFI_GET_OVERRUN_COUNT \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80c, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80c, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_READ_MULTI \ #define IOCTL_PROFI_READ_MULTI \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80d, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80d, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_GET_DATA_IMAGE \ #define IOCTL_PROFI_GET_DATA_IMAGE \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x80f, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x80f, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_SET_DPS_DATA \ #define IOCTL_PROFI_SET_DPS_DATA \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x810, METHOD_IN_DIRECT, \
FILE_DEVICE_PROFIBOARD, 0x810, METHOD_IN_DIRECT, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
#define IOCTL_PROFI_SET_DP_BITS \ #define IOCTL_PROFI_SET_DP_BITS \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x811, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x811, METHOD_BUFFERED, FILE_WRITE_ACCESS) FILE_WRITE_ACCESS)
#define IOCTL_PROFI_CLEAR_DP_BITS \ #define IOCTL_PROFI_CLEAR_DP_BITS \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x812, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x812, METHOD_BUFFERED, FILE_WRITE_ACCESS) FILE_WRITE_ACCESS)
#define IOCTL_PROFI_CHECK_DEV_CONN \ #define IOCTL_PROFI_CHECK_DEV_CONN \
(ULONG) CTL_CODE( \ (ULONG) CTL_CODE(FILE_DEVICE_PROFIBOARD, 0x813, METHOD_BUFFERED, \
FILE_DEVICE_PROFIBOARD, 0x813, METHOD_BUFFERED, FILE_ANY_ACCESS) FILE_ANY_ACCESS)
/*****************************************************************************/ /*****************************************************************************/
/* Macros to access for PROFIBUS specific error codes */ /* Macros to access for PROFIBUS specific error codes */
...@@ -153,7 +118,8 @@ ...@@ -153,7 +118,8 @@
#define WAIT_FOREVER ((ULONG)-1) #define WAIT_FOREVER ((ULONG)-1)
typedef struct _PROFI_TIMEOUT { typedef struct _PROFI_TIMEOUT
{
ULONG TimeoutRead; ULONG TimeoutRead;
ULONG TimeoutWrite; ULONG TimeoutWrite;
} PROFI_TIMEOUT, T_PROFI_TIMEOUT; } PROFI_TIMEOUT, T_PROFI_TIMEOUT;
...@@ -162,7 +128,8 @@ typedef struct _PROFI_TIMEOUT { ...@@ -162,7 +128,8 @@ typedef struct _PROFI_TIMEOUT {
/* Structure for data image description */ /* Structure for data image description */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _PROFI_DATA_IMAGE_DESCR { typedef struct _PROFI_DATA_IMAGE_DESCR
{
UCHAR imageId; UCHAR imageId;
USHORT offset; USHORT offset;
UCHAR bus; UCHAR bus;
...@@ -172,7 +139,8 @@ typedef struct _PROFI_DATA_IMAGE_DESCR { ...@@ -172,7 +139,8 @@ typedef struct _PROFI_DATA_IMAGE_DESCR {
/* Structure for bit access in DP output data */ /* Structure for bit access in DP output data */
/*****************************************************************************/ /*****************************************************************************/
typedef struct _PROFI_DP_BIT_ACCESS { typedef struct _PROFI_DP_BIT_ACCESS
{
USHORT offset; USHORT offset;
UCHAR mask; UCHAR mask;
} PROFI_DP_BIT_ACCESS, T_PROFI_DP_BIT_ACCESS; } PROFI_DP_BIT_ACCESS, T_PROFI_DP_BIT_ACCESS;
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_TOOLS.H */ /* Filename : PB_TOOLS.H */
/* Version : 5.21.0.00.release */ /* Version : 5.21.0.00.release */
/* Date : 27-February-1998 */ /* Date : February-1998 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the global function declarations, */ /* Description : This file contains the global function declarations, */
/* defines and types of the PROFIBUS-TOOLS-Interface */ /* defines and types of the PROFIBUS-TOOLS-Interface */
...@@ -79,8 +44,8 @@ extern "C" { ...@@ -79,8 +44,8 @@ extern "C" {
/*----- function prototypes to get default busparameters -------------------*/ /*----- function prototypes to get default busparameters -------------------*/
#ifdef __PB_DP__ #ifdef __PB_DP__
FUNCTION extern PB_BOOL CALL_CONV pbt_get_dp_def_bus_param(IN USIGN8 BaudRate, FUNCTION extern PB_BOOL CALL_CONV pbt_get_dp_def_bus_param(
IN USIGN8 StationAddr, IN USIGN16 Mode, IN USIGN8 BaudRate, IN USIGN8 StationAddr, IN USIGN16 Mode,
OUT T_DP_BUS_PARA_SET FAR* pBusParameters) OUT T_DP_BUS_PARA_SET FAR* pBusParameters)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
...@@ -158,9 +123,9 @@ FUNCTION extern PB_BOOL CALL_CONV pbt_get_fdlif_def_bus_param( ...@@ -158,9 +123,9 @@ FUNCTION extern PB_BOOL CALL_CONV pbt_get_fdlif_def_bus_param(
#endif #endif
#ifdef __PB_FMB__ #ifdef __PB_FMB__
FUNCTION extern PB_BOOL CALL_CONV pbt_get_fmb_def_bus_param(IN USIGN8 BaudRate, FUNCTION extern PB_BOOL CALL_CONV pbt_get_fmb_def_bus_param(
IN USIGN8 StationAddr, IN PB_BOOL InRingDesired, IN USIGN16 Mode, IN USIGN8 BaudRate, IN USIGN8 StationAddr, IN PB_BOOL InRingDesired,
OUT T_FMB_SET_BUSPARAMETER_REQ FAR* pBusParameters) IN USIGN16 Mode, OUT T_FMB_SET_BUSPARAMETER_REQ FAR* pBusParameters)
/*---------------------------------------------------------------------------- /*----------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
...@@ -200,8 +165,9 @@ FUNCTION extern VOID CALL_CONV ccrl_resrces_init(IN T_CRL_HDR FAR* pCrlHdr) ...@@ -200,8 +165,9 @@ FUNCTION extern VOID CALL_CONV ccrl_resrces_init(IN T_CRL_HDR FAR* pCrlHdr)
----------------------------------------------------------------------------*/ ----------------------------------------------------------------------------*/
; ;
FUNCTION extern USIGN16 CALL_CONV ccrl_resrces_add_entry(IN USIGN16 Cr, FUNCTION extern USIGN16 CALL_CONV
IN T_CRL_STATIC FAR* pCrlStatic, OUT T_FMB_CONFIG_CRL FAR* pCrlConfig) ccrl_resrces_add_entry(IN USIGN16 Cr, IN T_CRL_STATIC FAR* pCrlStatic,
OUT T_FMB_CONFIG_CRL FAR* pCrlConfig)
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
FUNCTIONAL_DESCRIPTION FUNCTIONAL_DESCRIPTION
......
/*
* 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 Industrial Automation GmbH */
/* Richard-Reitzner-Allee 6 */ /* Richard-Reitzner-Allee 6 */
/* D-85540 Haar */ /* D-85540 Haar */
/* Phone: (++49)-(0)89-45656-0 */ /* Phone: (++49)-(0)89-45656-0 */
/* Fax: (++49)-(0)89-45656-399 */ /* Fax: (++49)-(0)89-45656-399 */
/* */ /* */
/* Copyright (C) SOFTING AG 1995-2003 */ /* Copyright (C) SOFTING Industrial Automation GmbH 1995-2012 */
/* All Rights Reserved */ /* All Rights Reserved */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
...@@ -50,8 +15,8 @@ ...@@ -50,8 +15,8 @@
/* */ /* */
/* Filename : PB_TYPE.H */ /* Filename : PB_TYPE.H */
/* Version : 5.22.0.00.release */ /* Version : 5.22.0.00.release */
/* Date : 26-February-1999 */ /* Date : February-1999 */
/* Author : SOFTING AG */ /* Author : SOFTING */
/* */ /* */
/* Description : This file contains the PROFIBUS basic types */ /* Description : This file contains the PROFIBUS basic types */
/* */ /* */
...@@ -60,6 +25,10 @@ ...@@ -60,6 +25,10 @@
#ifndef __PB_TYPE__ #ifndef __PB_TYPE__
#define __PB_TYPE__ #define __PB_TYPE__
#ifdef _LINUX
#include <linux/types.h>
#endif
#include "pb_conf.h" /* PAPI configuration parameters */ #include "pb_conf.h" /* PAPI configuration parameters */
#ifndef NULL #ifndef NULL
...@@ -84,7 +53,7 @@ typedef unsigned char PB_BOOL; ...@@ -84,7 +53,7 @@ typedef unsigned char PB_BOOL;
typedef unsigned char OCTET; typedef unsigned char OCTET;
typedef unsigned char USIGN8; typedef unsigned char USIGN8;
typedef unsigned short USIGN16; typedef unsigned short USIGN16;
typedef unsigned long USIGN32; typedef __u32 USIGN32;
typedef signed char INT8; typedef signed char INT8;
typedef signed short INT16; typedef signed short INT16;
...@@ -92,7 +61,7 @@ typedef signed short INT16; ...@@ -92,7 +61,7 @@ typedef signed short INT16;
#ifdef WIN32 #ifdef WIN32
typedef int INT32; typedef int INT32;
#else #else
typedef signed long INT32; typedef __s32 INT32;
#endif #endif
#ifdef _LINUX #ifdef _LINUX
......
...@@ -2150,13 +2150,15 @@ Volume Profibus $ClassVolume 0.0.250.7 ...@@ -2150,13 +2150,15 @@ Volume Profibus $ClassVolume 0.0.250.7
EndObject EndObject
EndObject EndObject
!/** !/**
! @Author Claes Jurstrand ! @Author Claes Jurstrand/Marcus Nordenberg
! @Version 1.0 ! @Version 1.1
! @Group Profibus ! @Group Profibus
! @Summary Configurates a Profibus PCI master card (Softing profiboard) ! @Summary Configurates a Profibus PCI master card (Softing profiboard)
! Configurates a Profibus PCI master card (Softing Profiboard). Available on LynxOS and Linux. ! Configurates a Profibus PCI master card (Softing Profiboard). Available on LynxOS and Linux.
! The object should be named Px, where x is the number of the device, eg P1. ! The object should be named Px, where x is the number of the device, eg P1.
! You can have maximum two buses (master cards) on each system. ! You can have maximum two buses (master cards) on each system. The latest API from Softing
! can only handle one board per process. So you have to make sure to select PlcThread
! objects from different PlcProcess objects.
!*/ !*/
Object Pb_Profiboard $ClassDef 13 16-JAN-2006 09:46:40.51 Object Pb_Profiboard $ClassDef 13 16-JAN-2006 09:46:40.51
Body SysBody 16-JAN-2006 09:46:40.51 Body SysBody 16-JAN-2006 09:46:40.51
......
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