📄 ipcapi.h
字号:
/*************************************************************************
* @doc
*
* @module ipcapi.h
* @project LTS (8201)
*-----------------------------------------------------------------------*
* @description API definition for IPC
*-----------------------------------------------------------------------*
* @copyright (C) 1998 Condat DV Beratung Organisation Software GmbH
* @author M.Kotowski / F.Reglin
*-----------------------------------------------------------------------*
* @history $Revision: 1.1.1.1 $
* Last Modification: $JustDate: 12.01.00 $
* $History: ipcapi.h $
*
* ***************** Special Version *****************
* User: RK Date: 20.01.03 Time: 14:11
* - this versio supports only two functions used by PCO:
* ipc_createMsg(), ipc_parseMsg()
*
* ***************** Version 11 *****************
* User: Fn Date: 12.01.00 Time: 9:38
* Updated in $/work/include
*
* ***************** Version 10 *****************
* User: Mk Date: 18.03.99 Time: 13:44
* Updated in $/work/include
* ipc_parseMsg arguments changed (one additional argument).
*
* ***************** Version 9 *****************
* User: Fr Date: 2.03.99 Time: 21:35
* Updated in $/work/include
* additional parameter to ipc_init() : queue size (0 for default)
*
* ***************** Version 8 *****************
* User: Fr Date: 2/20/99 Time: 7:20p
* Updated in $/work/include
* casting macro parameters
* ipc_setTime()
*
* ***************** Version 6 *****************
* User: Mk Date: 18.11.98 Time: 17:22
* Updated in $/work/include
* Remove DRV (define) - not used, but disturbing in drivers using IPC.
*
* ***************** Version 5 *****************
* User: Fr Date: 3.11.98 Time: 18:28
* Updated in $/work/include
* ipc_self(): new parameter verbose, which controls the u_puts()-messages
*
* ***************** Version 4 *****************
* User: Fr Date: 22.10.98 Time: 14:51
* Updated in $/work/include
* ipc_getHandle()
*
* ***************** Version 3 *****************
* User: Fr Date: 19.10.98 Time: 14:47
* Updated in $/work/include
* new function: ipc_isMyAddr
*
* ***************** Version 2 *****************
* User: Fr Date: 19.10.98 Time: 11:23
* Updated in $/work/include
* #ifdef cplusplus ...
*
* ***************** Version 1 *****************
* User: Fr Date: 16.10.98 Time: 17:53
* Created in $/work/include
* Inter Process Communication driver: API definition
****************************************************** $NoKeywordfs: $ */
#ifndef IPCAPI_H
#define IPCAPI_H
#include "cms.h"
#undef EXPORT
#include <typedefs.h>
/* define extra function codes for driver ipc */
#define IPC_SELF 10
#define IPC_INITCH 11
#define IPC_EXITCH 12
#define IPC_OPENCH 13
#define IPC_CLOSECH 14
#define IPC_READCH 15
#define IPC_WRITECH 16
#define IPC_CREATEMSG 17
#define IPC_PARSEMSG 18
#define IPC_ISMYADDR 19
#define IPC_GETHANDLE 20
#define IPC_SETTIME 21
/**********************************************************************
* macros
*********************************************************************/
#define MSG_ID( Group, Code ) (((Group) << 8) + ((Code) & 0xFF))
/**********************************************************************
* defines
*********************************************************************/
/* return codes */
#define IPC_OK CMS_OK
#define IPC_ERROR CMS_ERROR
#define IPC_EXIST CMS_EXIST
#define IPC_FULL CMS_FULL
#define IPC_BADHANDLE CMS_BADHANDLE
#define IPC_EMPTY CMS_EMPTY
#define IPC_SIZE CMS_SIZE
#define IPC_TIMEOUT CMS_TIMEOUT
#define IPC_NOMEM CMS_NOMEM
#define IPC_INVALID (-20)
#define IPC_MISALIGNED (-21)
#define IPC_MAX_PATH_SIZE 120
/* msg IDs: */
#define IPC_GENERATED MSG_ID(IPC,1)
#define ALIGNMENT 1
#define MSG_MAX_SIZE 512
/**********************************************************************
* types
*********************************************************************/
typedef int IPC_HANDLE;
typedef struct
{
char *pcSender;
char *pcReceiver;
void *pvBuffer;
U32 ulTime;
U16 uwTenthOfMS;
U16 uwSize;
U16 uwID;
} MSG_HEADER;
#if ALIGNMENT == 1
typedef U8 MSG_BUFFER [MSG_MAX_SIZE];
#elif ALIGNMENT == 2
typedef U16 MSG_BUFFER [(MSG_MAX_SIZE + 1) / 2];
#elif ALIGNMENT == 4
typedef U32 MSG_BUFFER [(MSG_MAX_SIZE + 3) / 4];
#else
#error "invalid alignment"
#endif
/* standard funtions: */
/*********************************************************************/
U16 ipc_createMsg ( /* @func Create a message. */
void *pvBuffer,/* @parm Buffer for the message to store. */
U16 uwSize, /* @parm Size of the buffer. */
MSG_HEADER Msg /* @parm Settings for the message to create. */
); /* @returnvalue One of the values below. */
/*---------------------------------------------------------------------
* @description The function creates a message out of the settings
* that are stored in the structure. The resulting
* message will be written to the buffer.
*
* Attention: The address of the buffer MUST be
* aligned (multiple of ALIGNMENT)
*
* Sender and Receiver will be inserted in normalized
* form (= absolute address) !
*
* @tablex Return values: |
* Value Description
* --------------------------------------------------
* > 0 Size of the message.
* = 0 Buffer too small, invalid settings.
*
* @tablex Content of pHdr: |
* Setting Description
* -------------- -----------------------------------
* pcSender NULL means that the calling process
* is the sender. Otherwise the string
* will be inserted into the message.
* pcReceiver Name of the receiver (string)
* or IPC_HANDLE of the receiver.
* pvBuffer Pointer to the data to append to
* the message.
* uwSize Size of the data to append to the
* message.
* uwID Message group and code. Use the
* macro MSG_ID(Group,Code) to set the
* value.
* ulTime Automatically set.
* uwTenthOfMS Automatically set.
*********************************************************************/
/*********************************************************************/
S16 ipc_parseMsg ( /* @func Parse a message. */
MSG_HEADER *pMsg, /* @parm Structure to store the settings. */
void *pvBuffer,/* @parm Buffer containing the message. */
U16 uwSize /* @parm Size of pvBuffer. */
); /* @returnvalue One of the values below. */
/*---------------------------------------------------------------------
* @description The function parses a buffer that contains a
* a message and writes all settings to the
* structure.
*
* Attention: The address of the buffer MUST be
* aligned (multiple of ALIGNMENT)
*
* @tablex Return values: |
* Value Description
* --------------------------------------------------
* IPC_INVALID Invalid arguments or message.
* IPC_OK Success.
*
* @tablex Content of pHdr: |
* Setting Description
* -------------- -----------------------------------
* pcSender Address of the sender.
* pcReceiver Address of the receiver (normally
* the process receiving the message).
* pvBuffer Pointer to the data of the message.
* uwSize Size of the data.
* uwID Message group and code. Use the
* macro MSG_ID(Group,Code) to compare
* the value with other IDs.
* ulTime Time [ms from 01.01.1970 GMT] of
* message's creation.
* uwTenthOfMS The tenth of [ms] of the message's
* creation.
*********************************************************************/
#endif /* IPCAPI_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -