Commit 03a8c1a9 authored by Claes pwr46/data0/x4-6-0's avatar Claes pwr46/data0/x4-6-0

Merge branch 'master' of pwrcvs:/data1/git/pwr

parents b8f4d63e 428c1cf5
......@@ -263,26 +263,28 @@ static pwr_tStatus nmpsappl_cell_init(
}
/**
*@brief Initierar spegling.
*@brief Initialize mirroring.
*
* Med nmpsappl_MirrorInit initierar man en spegling genom att ange de celler som ska speglas.
* Man fr till baka en context som anvnds fr att skilja olika speglingar t.
* Efter initieringen anropas nmpsappl_Mirror cykliskt fr att f information om cellinnehllet.
* nmpsappl_MirrorInit initiates a mirroring by specifying the cells that should
* be mirrored.
*
*
*@return pwr_tStatus
* Use nmpsappl_Mirror to fetch the mirrored data structure.
*
* The option argument is a bitmask where the bits specifies different functions
* in nmpsappl_mirror:
* - nmpsappl_mOption_Remove Dataobject that is removed since the last call of
* nmpsappl_Mirror is added to the dataobject list with the remove flags set.
* - nmpsappl_mOption_NamePath The name field for a dataobject in the datastructure
* returned by nmpsappl_Mirror contains the path.
*
* @see nmpsappl_Mirror
* @return pwr_tStatus
*/
pwr_tStatus
nmpsappl_MirrorInit(
pwr_tString80 *cell_array, /**< En vektor som innehller namnet p de celler som ska speglas.
De speglade dataobjekten ordnas i den ordning cellerna anges i vektorn.
En NULL-string markerar sista cellnamnet. */
unsigned long options, /**< Options r en bitmask. Bitarna anger olika funktioner fr nmpsappl_mirror:
nmpsappl_mOption_Remove - Dataobjekt som har frsvunnit frn de angivna cellerna sedan senaste
anropet lggs med i dataobjektlistan med remove-flaggan satt.
nmpsappl_mOption_NamePath - Namnfltet i den datastruktur som returneras fr ett dataobjekt
p dataobjektet innehller hierarkinamnet. */
nmpsappl_t_ctx *ctx /**< En kontext-pekare som skickas med till nmpsappl_mirror rutinen. */
pwr_tString80 *cell_array, /**< A string array with the names of the cells that should be mirrored. The element after the last cellname should be a NULL string. */
unsigned long options, /**< Bitmask specifying options for the mirroring.*/
nmpsappl_t_ctx *ctx /**< Context pointer. */
)
{
pwr_tString80 *cellname;
......@@ -422,64 +424,58 @@ nmpsappl_MirrorInit(
}
/**
*@brief Anropas cykliskt fr att uppdatera speglingen.
*@brief Update mirroring.
*
* Rutinen fyller i en lista p samtliga dataobjekt som finns i cellerna.
* Listan r av typen nmpsappl_t_datainfo. (lnk till structdef?)
* nmpsappl_Mirror mirrors the content of one or several cells into an application
* program.
*
* nmpsappl_mirror speglar innehllet i en eller flera celler till ett applikationsprogram.
* Funktionen hanterar direktlnkning av celler och dataobjekt och returnerar ej lista p dataobjekt till applikationen,
* tillsammans med information om bakkant, framkant, utval, vilka objekt som r nya eller har frsvunnit, vilken cell ett objekt tillhr.
* Applikationen frses ven med pekare till dataobjekten.
*
* Man initierar en spegling genom att anropar rutinen nmpsappl_MirrorInit.
* Som argument skickar man med en lista p de celler som ska speglas.
* Sedan anropas nmpsappl_Mirror cykliskt fr att f information om vilka dataobjekt som ligger i cellerna.
* Alla dataobjekt som finns i den angivna cellerna bakas ihop i en vektor,
* och ordningen bestmms av den ordning man angivit cellerna till nmpsappl_MirrorInit.
*
* Flera speglingar (max 32 st) kan hanteras i samma program, och varje spegling omfattar maximalt 32 celler.
* Samma cell kan tillhra flera speglingar.
* Man kan t ex spegla samtliga celler i systemet i en array, samtidigt som man speglar enstaka celler, eller urval av celler i andra arrayer.
*
*
* Exempel
* The function handles direct link of cells and dataobjects, and returns a list of
* data objects to the application together with information about front, back, select
* properties, and which data objects are new or has disappeard. The application also
* receives a pointer to each data object.
*
* The mirroring is initiated by calling nmpsappl_MirrorInit. The cells are
* mirrored are specified in this call. Then nmpsappl_Mirror is called cyclic
* to recieve the current content of the cells. All the dataobjects found in the
* cells are placed in an array, and the order the cells was specified in
* nmpsappl_MirrorInit determines the order in the dataobject array.
*
* Several mirroring can be handled in the same application (max 32), and each
* mirroring can handle maximum 32 cells.
*
* Exempel
* @code
* #include "pwr_inc:pwr.h"
* #include "ssab_inc:rs_nmps_appl.h"
* #include "pwrp_inc:pwr_cvolvkvendclasses.h"
*
* main()
* {
* nmpsappl_t_ctx ctx;
* int i;
* int plate_count;
* nmpsappl_t_datainfo *plate_info;
* pwr_tStatus sts;
* pwr_sClass_Plate *plate_ptr;
* pwr_tString80 cellnames[] = {
* "VKV-END-PF-Pltfljning-W-Svb15",
* "VKV-END-PF-Pltfljning-W-R30A",
* nmpsappl_t_ctx ctx;
* int i;
* int plate_count;
* nmpsappl_t_datainfo *plate_info;
* pwr_tStatus sts;
* pwr_sClass_Plate *plate_ptr;
* pwr_tString80 cellnames[] = {
* "VKV-END-PF-Plc-W-Svb15",
* "VKV-END-PF-Plc-W-R30A",
* ""};
*
* // Init pams and gdh
* sts = gdh_Init( 0, NULL);
* if (EVEN(sts)) LogAndExit( sts);
* // Init Proview runtime
* sts = gdh_Init( "rs_nmps);
* if (EVEN(sts)) LogAndExit( sts);
*
* // Init the mirroring
* sts = nmpsappl_MirrorInit( cellnames,
* nmpsappl_mOption_Remove, &ctx);
* if (EVEN(sts)) exit(sts);
* // Init the mirroring
* sts = nmpsappl_MirrorInit( cellnames, nmpsappl_mOption_Remove, &ctx);
* if (EVEN(sts)) exit(sts);
*
* for (;;)
* {
* sts = nmpsappl_Mirror( ctx, &plate_count,
* &plate_info);
* for (;;) {
* sts = nmpsappl_Mirror( ctx, &plate_count, &plate_info);
*
* for ( i = 0; i < plate_count; i++)
* {
* plate_ptr = plate_info[i].object_ptr;
* printf( "%20s %1d %1d %1d %1d %1d %4d %5.1f\n",
* for ( i = 0; i < plate_count; i++) {
* plate_ptr = plate_info[i].object_ptr;
* printf( "%20s %1d %1d %1d %1d %1d %4d %5.1f\n",
* plate_info[i].name,
* plate_info[i].front,
* plate_info[i].back,
......@@ -488,18 +484,18 @@ nmpsappl_MirrorInit(
* plate_info[i].removed,
* plate_info[i].cell_mask,
* plate_ptr->Tjocklek);
* }
* sleep( 1);
* }
* }
* sleep( 1);
* }
* }
*
*@endcode
*@return pwr_tStatus
*/
pwr_tStatus
nmpsappl_Mirror(
nmpsappl_t_ctx applctx, /**< En kontext-pekare som erhlls vid anrop till nmpsappl_mirror_init. */
int *data_count, /**< Antal dataobjekt i dataobjekts-listan. */
nmpsappl_t_datainfo **datainfo /**<Lista p dataobjekten i cellerna. */
nmpsappl_t_ctx applctx, /**< Context for nmpsappl mirror. */
int *data_count, /**< Number or data object in the array. */
nmpsappl_t_datainfo **datainfo /**< Data strucure with dataobjects found in the cells. */
)
{
int i, j, k;
......@@ -752,15 +748,15 @@ nmpsappl_Mirror(
}
/**
*@brief Tar bort ett dataobjekt ur de celler som speglas.
*
*@brief Removes a dataobject from one of the cells that are mirrored.
*
*@see nmpsappl_RemoveAndDeleteData
*@return pwr_tStatus
*/
pwr_tStatus
nmpsappl_RemoveData(
nmpsappl_t_ctx applctx, /**< Kontext-pekare som erhlls vid anrop till nmpsappl_mirror_init. */
pwr_tObjid objid /**< Objid fr dataobjekt som ska tas bort. */
nmpsappl_t_ctx applctx, /**< Context for nmpsappl mirror. */
pwr_tObjid objid /**< Objid for dataobject that is to be removed. */
)
{
int k;
......@@ -791,16 +787,15 @@ nmpsappl_RemoveData(
/**
*@brief Tar bort ett dataobjekt ur de celler som speglas.
*
* Tar bort ett dataobjekt ur de celler som speglas. Dessutom tas objektet bort ur databasen.
*@brief Removes and deletes a dataobject from one of the cells that are mirrored.
*
*@see nmpsappl_RemoveData
*@return pwr_tStatus
*/
pwr_tStatus
nmpsappl_RemoveAndDeleteData(
nmpsappl_t_ctx applctx, /**< Kontext-pekare som erhlls vid anrop till nmpsappl_mirror_init. */
pwr_tObjid objid /**< Objid fr dataobjekt som ska tas bort. */
nmpsappl_t_ctx applctx, /**< nmpsappl mirror context. */
pwr_tObjid objid /**< Objid for the data object that is to be removed. */
)
{
int sts, k;
......
......@@ -28,7 +28,7 @@
This include file contains the Proview NMps type definitions.
*/
/** @addtogroup NMps */
/** @addtogroup NMpsAppl */
/*@{*/
#if defined __cplusplus
......@@ -46,7 +46,7 @@ extern "C" {
#define nmpsappl_mOption_ReverseOrder (1 << 2)
/** @defgroup NMPS_DS Data Structures
/** @defgroup NMPS_DS NMpsAppl Data Structures
* @ingroup NMps
* @{
*/
......@@ -65,15 +65,31 @@ typedef struct nmpsappl_s_cellist {
} nmpsappl_t_cellist;
typedef struct {
pwr_tObjid objid; /**< Dataobjektets objid */
pwr_tString80 name; /**< Dataobjektet namn (sista namnledet) */
pwr_tAddress object_ptr; /**< Pekare till dataobjektet */
pwr_tBoolean select; /**< Select-attributet fr dataobjektet i cell-objektet. Om ett dataobjekt ligger i flera celler, stts select om objektet r utvalt i minst en av cellerna. */
pwr_tBoolean front; /**< Front-attributet fr dataobjektet i cell-objektet. Om ett dataobjekt ligger i flera celler, stts front om front-flaggen r satt i en av cellerna. */
pwr_tBoolean back; /**< Back-attributet fr dataobjektet i cell-objektet. Om ett dataobjekt ligger i flera celler, stts back om back-flaggen r satt i en av cellerna. */
pwr_tBoolean newdata; /**< Markerar att ett dataobjekt r nytt sedan senaste speglingen.*/
pwr_tBoolean removed; /**< Markerar att dataobjektet har frsvunnit sedan senaste speglingen. Krver att nmpsappl_mOption_Remove har angetts i options. */
unsigned long cell_mask; /**< Anger vilken eller vilka celler dataobjektet befinner sig i. cell_mask r en bitmask dr frsta biten anger frsta cellen (dvs den som angivits frst i listan till nmpsappl_mirror_init), osv. */
pwr_tObjid objid; /**< Dataobject objid */
pwr_tString80 name; /**< Dataobject name (last segment) */
pwr_tAddress object_ptr; /**< Pointer to data object */
pwr_tBoolean select; /**< The select attribute for the dataobject in the
cell object. If the dataobject is present in several
cells, select is set if the dataobject is selected
in at least one of the cells. */
pwr_tBoolean front; /**< The Front attribute for the dataobject in the cell
object. If the dataobject is present in several
cells, front is set if the Front flag is set in one
of the cells. */
pwr_tBoolean back; /**< The Back attribute for the dataobject in the cell
object. If the dataobject is present in several
cells, back is set if the Back flag is set in one
of the cells. */
pwr_tBoolean newdata; /**< Marks that a data object is new since the last
mirror. */
pwr_tBoolean removed; /**< Marks that the dataobject has disappeard since
the last mirror. Requires the the option
nmpsappl_mOption_Remove is selected. */
unsigned long cell_mask; /**< Mask that specifies in which cell or which
cells the dataobject resides. The first bit
corresponds to the first cell, i.e. the first
cell in cell list supplied to nmpsappl_MirrorInit,
etc. */
} nmpsappl_t_datainfo;
typedef struct nmpsappl_s_ctx {
......@@ -90,7 +106,7 @@ typedef struct nmpsappl_s_ctx {
/** @} */
/**
* @defgroup NMPS_FC Function Calls
* @defgroup NMPS_FC NMpsAppl Functions
* @ingroup NMps
* @{
*/
......
......@@ -4,7 +4,26 @@
/*! \defgroup PRM Programmer's Reference Manual
Programmer's Referens Manual.
The Programmer's Referens Manual describes the interface to Proview for applications programs written in c and c++.
The java interface is not yet included in this manual.
The intended audience is
- The application programmer who wants to write a program that attaches to the Proview realtime database or other Proview facilites.
- Any user who wants to deepen his understanding of the system.
- Proview developers who uses these API's to improve and extend the Proview functionallity.
Is is assumed that the reader has programming skills and some understanding of the c programming language.
This manual will give a description of the following API's
- Gdh The interface to the realtime database with objects, classes, subscriptions etc.
- Mh Sending alarms and messages from application programs.
- QCom Using the Proview communication protocol.
- Time Functions to convert and compare time values.
- Cdh Convert and compare object attributes.
- NMps Interface to NMps Cell objects.
- rt_appl A base class for applications i c++.
*/
////////////////////
......@@ -18,8 +37,259 @@
/*! \defgroup GDH Gdh Global Data Handler
\ingroup PRM
This module contains the access routines to the Global Data
Handler. Those routines are callable from application level.
The Global Data Handler API contains functions to get information about
the classes, volumes and objects in the realtime database. There are also
functions to create, delete and move object in the database.
<b>Includefiles</b><br>
The includefile for Gdh is
rt_gdh.h
The return status codes are defined in the files
rt_gdh_msg.h<br>
rt_hash_msg.h
<h2>Function overview</h2>
<h3>Attribute Functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetAttributeCharacteristics()</td>
<td>Get the characteristics of an attribute given its name and the class it belongs to.</td></tr>
<tr><td>gdh_NameToAttrref()</td>
<td>Convert from name string to attribute reference.</td></tr>
<tr><td>gdh_AttrrefToName()</td>
<td>Translate an attribute reference to name.</td></tr>
<tr><td>gdh_ClassAttrToAttrref()</td>
<td>Converts a class and attribute string to attrref format.</td></tr>
<tr><td>gdh_ClassAttrrefToAttr()</td>
<td>Get the attribute name from a class and attrref.</td></tr>
<tr><td>gdh_GetAttributeCharAttrref()</td>
<td>Get the characteristics of an attribute.</td></tr>
<tr><td>gdh_AttrArefToObjectAref()</td>
<td>Get the attriubte reference to an object or attribute object,
from the attribute reference to an attribute in the object.</td></tr>
<tr><td>gdh_ArefANameToAref()</td>
<td>Get the attribute reference for an attribute in an object
attribute reference, where the attribute is specified by a string.</td></tr>
<tr><td>gdh_AttrValueToString()</td>
<td>Convert attribute value to string.</td></tr>
<tr><td>gdh_AttrStringToValue()</td>
<td>Convert a string to attribute value.</td></tr>
<tr><td>gdh_ArefDisabled()</td>
<td>Check if an attribute is disabled.</td></tr>
</table>
<h3>Class and Type Functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetClassList()</td>
<td>Get the object identity for the first object in the list of
objects of a specified class.</td></tr>
<tr><td>gdh_GetNextObject()</td>
<td>Get the object identity of the next object in the list of
objects of a certain class.</td></tr>
<tr><td>gdh_GetPreviousObject()</td>
<td>Get the object identity of the previous obuect in the list
of objects of a certain class.</td></tr>
<tr><td>gdh_GetClassListAttrRef()</td>
<td>Get the attribute reference of the first object in the list
of objects of a certain class. The object can be a solitary
object or an attribute object.</td></tr>
<tr><td>gdh_GetNextAttrRef()</td>
<td>Get the attrref of the next object in the list of objects of
a certain class. The object can be a solitary object or an
attribute object.</td></tr>
<tr><td>gdh_GetObjectClassList()</td>
<td>Get the attribute reference of the first attribute object
of a specified class in a specified object.</td></tr>
<tr><td>gdh_GetNextObjectAttrRef()</td>
<td>Get the attrref of the next attribute object of a
specified class in a specified object.</td></tr>
<tr><td>gdh_ClassNameToId()</td>
<td>Get the class identity corresponding to a class specified
by name.</td></tr>
<tr><td>gdh_GetSuperClass()</td>
<td>Get the superclass for a class.</td></tr>
<tr><td>gdh_GetEnumValueDef()</td>
<td>Get definition information for an enumeration type.</td></tr>
<tr><td>gdh_GetMaskBitDef()</td>
<td>Get definition information for a mask type.</td></tr>
</table>
<h3>Direct link/Subscription Functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_DLRefObjectInfoAttrref()</td>
<td>Request a direct link to the data denoted by an attribute
reference.</td></tr>
<tr><td>gdh_DLUnrefObjectInfo()</td>
<td>Terminate direct linking of an object or an object attribute.</td></tr>
<tr><td>gdh_DLUnrefObjectInfoAll()</td>
<td>Removes all direct links set up by this process.</td></tr>
<tr><td>gdh_GetSubscriptionOldness()</td>
<td>Checks the oldness of a certain subscription.</td></tr>
<tr><td>gdh_RefObjectInfo()</td>
<td>The routine returns an address to the data denoted by name.
The name can be either an object or an object attribute.</td></tr>
<tr><td>gdh_UnrefObjectInfo()</td>
<td>Terminates the subscriptions defined by the subscription identity.</td></tr>
<tr><td>gdh_UnrefObjectInfoAll()</td>
<td>Terminates all subscriptions set up by this process.</td></tr>
<tr><td>gdh_RefObjectInfoList()</td>
<td>This routine returns addresses to teh information that is
denoted by"objref[].fullname".</td></tr>
<tr><td>gdh_SetSubscriptionDefaults()</td>
<td>Sets default subscription timers for future subscription
requests.</td></tr>
<tr><td>gdh_SubRefObjectInfoAttrref()</td>
<td>This routine returns a subid to the information that is
denoted by 'aref'. The name can be either an object or an object
attribute.</td></tr>
<tr><td>gdh_SubRefObjectInfoName()</td>
<td>Get the adress of the data that is denoted by 'name'.</td></tr>
<tr><td>gdh_SubUnrefObjectInfoList()</td>
<td>Terminates a list of subscriptions.</td></tr>
<tr><td>gdh_SubUnrefObjectInfo()</td>
<td>Terminates subscription of an object or attribute.</td></tr>
<tr><td>gdh_SubUnrefObjectInfoAll()</td>
<td>Terminates all subscriptions set up by this process.</td></tr>
<tr><td>gdh_SubData()</td>
<td>Fetch the data associated with a subscription.</td></tr>
<tr><td>gdh_SubSize()</td>
<td>Fetch the data size associated with a subscription.</td></tr>
<tr><td>gdh_SubAssociateBuffer()</td>
<td>Associate a buffer with the subscription.</td></tr>
<tr><td>gdh_SubRefObjectInfoList()</td>
<td>Sets up a list of subscriptions to an object/attribute.</td></tr>
</table>
<h3>File handling functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_FWriteObject()</td>
<td>Write the content of an object to textfile.</td></tr>
<tr><td>gdh_FReadObject()</td>
<td>Read a textfile into an object.</td></tr>
</table>
<h3>Initializing Gdh</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_Init()</td>
<td>Initialize the process to the Proview runtime environment.</td></tr>
</table>
<h3>Miscellaneous</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_NethandlerRunning()</td>
<td>Check if the Nethandler has started.</td></tr>
<tr><td>gdh_GetSecurityInfo()</td>
<td>Get security information.</td></tr>
</table>
<h3>Node information</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetObjectNodeIndex()</td>
<td>Get the node identity of the owner of an object.</td></tr>
<tr><td>gdh_GetNodeIndex()</td>
<td>Get the node identity of the local node.</td></tr>
<tr><td>gdh_GetNodeObject()</td>
<td>Return the objid of the node object for a node identifier
(of type pwr_tNodeId).</td></tr>
</table>
<h3>Object manipulation functions</h3><h4> </h4><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_CreateObject()</td>
<td>Create an object in a dynamic volume.</td></tr>
<tr><td>gdh_DeleteObject()</td>
<td>Remove a local object.</td></tr>
<tr><td>gdh_RenameObject()</td>
<td>Rename a local object.</td></tr>
<tr><td>gdh_MoveObject()</td>
<td>Move a local object.</td></tr>
</table>
<h3>Object tree functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetRootList()</td>
<td>Get the first root object in the object tree.</td></tr>
<tr><td>gdh_GetParent()</td>
<td>Get the object identity of the parent of an object.</td></tr>
<tr><td>gdh_GetLocalParent()</td>
<td>Get the object identity of the local parent of an object.</td></tr>
<tr><td>gdh_GetChild()</td>
<td>Get the object identity of the first child of an object.</td></tr>
<tr><td>gdh_GetNextSibling()</td>
<td>Get the object identity of the next sibling (i.e.
the next object with the same parent).</td></tr>
<tr><td>gdh_GetPreviousSibling()</td>
<td>Get the object identity of the previous sibling (i.e.
the previous object with the same parent).</td></tr>
</table>
<h3>Object properties</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetObjectSize()</td>
<td>Get the size of the body of an object.</td></tr>
<tr><td>gdh_GetDynamicAttrSize()</td>
<td>Get the size of a dynamic attribute.</td></tr>
<tr><td>gdh_GetObjectClass()</td>
<td>Get the class identifier of an object.</td></tr>
<tr><td>gdh_GetAttrRefTid()</td>
<td>Get the type or class identifier of an attribute reference.</td></tr>
<tr><td>gdh_GetObjectLocation()</td>
<td>Return the location of an object.</td></tr>
<tr><td>gdh_GetObjectDLCount()</td>
<td>Gets the direct link count of an object.</td></tr>
</table>
<h3>Object alarm status</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetAlarmInfo()</td>
<td>Get the alarm status for a certaion object.</td></tr>
<tr><td>gdh_SetAlarmLevel()</td>
<td>This routine sets the alarm level for a certain object.</td></tr>
<tr><td>gdh_SetAlarmBlockLevel()</td>
<td>Sets the alarm block level for a certain object.</td></tr>
</table>
<h3>Reading an writing object data</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetObjectInfo()</td>
<td>Fetch data from an object or an attribute.</td></tr>
<tr><td>gdh_GetObjectInfoAttrref()</td>
<td>Fech the data of an attribute or a whole object body.</td></tr>
<tr><td>gdh_SetObjectInfo()</td>
<td>Change the value of an attribute of the whole body of an object.</td></tr>
<tr><td>gdh_SetObjectInfoAttrref()</td>
<td>Change the data of an object or attribute.</td></tr>
</table>
<h3>Translating between different object representations</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_ObjidToName()</td>
<td>Get the name of an object by its object identity.</td></tr>
<tr><td>gdh_ObjidToPointer()</td>
<td>Gets the address of the data of an object, given its object identity.</td></tr>
<tr><td>gdh_MountObjidToPointer()</td>
<td>Get a pointer to a mount object.</td></tr>
<tr><td>gdh_AttrRefToPointer()</td>
<td>Get the address of the data of an attribute reference.</td></tr>
<tr><td>gdh_NameToObjid()</td>
<td>Get the object identity of an object specified by name.</td></tr>
<tr><td>gdh_NameToPointer()</td>
<td>Get the address of the data of an object, given its name.</td></tr>
</table>
<h3>Volume functions</h3><h4> </h4>
<table border="1" cellspacing="0">
<tr><td>gdh_GetVolumeList()</td>
<td>Get the first volume.</td></tr>
<tr><td>gdh_GetNextVolume()</td>
<td>Get the next volume in the volume list.</td></tr>
<tr><td>gdh_VolumeIdToName()</td>
<td>Get the name for a volume denoted by volume identity.</td></tr>
<tr><td>gdh_GetVolumeInfo()</td>
<td>Get info for a volume.</td></tr>
</table>
*/
/*! \defgroup MSGH MhAppl MessageHandler API
......@@ -32,7 +302,7 @@
This module contains routines for the Queue Communication.
*/
/*! \defgroup Time Time functions
/*! \defgroup Time Time management
\ingroup PRM
This module contains utilites for time management.
*/
......@@ -42,14 +312,35 @@
This module contains functions for class definitions.
*/
/*! \defgroup NMps NMps Material Planning System
/*! \defgroup NMpsAppl NMpsAppl NMps API
\ingroup PRM
This module contains interface functions for application access to an MPS.
This module contains interface functions for application access to NMps.
*/
/*! \defgroup rt rt_appl Base class for applications
\ingroup PRM
This module contains the base class for applications, and example subclasses.
rt_appl is a base class for c++ applications.
It contains initialization of gdh and qcom, and handles the restart and stop events
when the runtime environment is restarted or stopped.
A subclass should implement the virtual functions open(), close() and scan().
<h2>open()</h2>
open() is called after initialization, and may contain setup of direct links to
objects and attributes in the realtime database.
The open() function is also called after a soft restart.
@see rt_appl::open
<h2>scan()</h2>
The scan() function is called cyclic with the scantime specified in the constuctor.
@see rt_appl::scan
<h2>close()</h2>
The close() function is called when a restart or stop event is received. It should
unlink all direct links.
@see rt_appl::close
*/
......
# Doxyfile 1.3.4
# Doxyfile 1.5.6
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
......@@ -14,16 +14,24 @@
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# http://www.gnu.org/software/libiconv for the list of possible encodings.
DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = PwrAPI
PROJECT_NAME = "Proview Programmer's Reference Manual"
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = V4.1.0
PROJECT_NUMBER = V4.6.0
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
......@@ -32,27 +40,28 @@ PROJECT_NUMBER = V4.1.0
OUTPUT_DIRECTORY =
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
# 4096 sub-directories (in 2 levels) under the output directory of each output
# format and will distribute the generated files over these directories.
# Enabling this option can be useful when feeding doxygen a huge amount of
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
CREATE_SUBDIRS = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
# and Ukrainian.
OUTPUT_LANGUAGE = English
# This tag can be used to specify the encoding used in the generated output.
# The encoding is not always determined by the language that is chosen,
# but also whether or not the output is meant for Windows or non-Windows users.
# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
# forces the Windows encoding (this is the default for the Windows binary),
# whereas setting the tag to NO uses a Unix-style encoding (the default for
# all platforms other than Windows).
USE_WINDOWS_ENCODING = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
......@@ -67,16 +76,28 @@ BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator
# that is used to form the text in various listings. Each string
# in this list, if found as the leading text of the brief description, will be
# stripped from the text and the result after processing the whole list, is
# used as the annotated text. Otherwise, the brief description is used as-is.
# If left blank, the following values are used ("$name" is automatically
# replaced with the name of the entity): "The $name class" "The $name widget"
# "The $name file" "is" "provides" "specifies" "contains"
# "represents" "a" "an" "the"
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
# members of a class in the documentation of that class as if those members were
# ordinary class members. Constructors, destructors and assignment operators of
# the base classes will not be shown.
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
......@@ -89,10 +110,21 @@ FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
# the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the
# path to strip.
STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
# the reader which header file to include in order to use a class.
# If left blank only the name of the header file containing the class
# definition is used. Otherwise one should specify the include paths that
# are normally passed to the compiler using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
......@@ -102,11 +134,19 @@ SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explict @brief command for a brief description.
# comments will behave just like regular Qt-style comments
# (thus requiring an explicit @brief command for a brief description.)
JAVADOC_AUTOBRIEF = NO
# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
# interpret the first line (until the first dot) of a Qt-style
# comment as the brief description. If set to NO, the comments
# will behave just like regular Qt-style comments (thus requiring
# an explicit \brief command for a brief description.)
QT_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
......@@ -124,16 +164,15 @@ DETAILS_AT_TOP = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# reimplements.
# re-implements.
INHERIT_DOCS = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
# a new page for each member. If set to NO, the documentation of a member will
# be part of the file/class/namespace that contains it.
DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
......@@ -149,20 +188,68 @@ TAB_SIZE = 8
ALIASES =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C.
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
# sources only. Doxygen will then generate output that is more tailored for C.
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
# only. Doxygen will then generate output that is more tailored for Java.
# For instance, namespaces will be presented as packages, qualified scopes
# will look different, etc.
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
# sources only. Doxygen will then generate output that is more tailored for
# Java. For instance, namespaces will be presented as packages, qualified
# scopes will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources only. Doxygen will then generate output that is more tailored for
# Fortran.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for
# VHDL.
OPTIMIZE_OUTPUT_VHDL = NO
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should
# set this tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
# func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
# Doxygen will parse them like normal C++ but will assume all classes use public
# instead of private inheritance when no explicit protection keyword is present.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate getter
# and setter methods for a property. Setting this option to YES (the default)
# will make doxygen to replace the get and set methods by a property in the
# documentation. This will only work if the methods are indeed getting or
# setting a simple type. If this is not the case, or you want to show the
# methods anyway, you should set this option to NO.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
# the same type (for instance a group of public functions) to be put as a
# subgroup of that type (e.g. under the Public Functions section). Set it to
......@@ -171,6 +258,16 @@ OPTIMIZE_OUTPUT_JAVA = NO
SUBGROUPING = YES
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
# is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically
# be useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
TYPEDEF_HIDES_STRUCT = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
......@@ -198,6 +295,21 @@ EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
# anonymous namespace are hidden.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
......@@ -238,7 +350,7 @@ INTERNAL_DOCS = NO
# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# users are advised to set this option to NO.
# and Mac users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
......@@ -266,6 +378,29 @@ INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
# brief documentation of file, namespace and class members alphabetically
# by member name. If set to NO (the default) the members will appear in
# declaration order.
SORT_BRIEF_DOCS = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
# hierarchy of group names into alphabetical order. If set to NO (the default)
# the group names will appear in their defined order.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
# sorted by fully-qualified names, including namespaces. If set to
# NO (the default), the class list will be sorted only by class name,
# not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the
# alphabetical list.
SORT_BY_SCOPE_NAME = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
......@@ -311,6 +446,34 @@ MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
# If the sources in your project are distributed over multiple directories
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
# in the documentation. The default is NO.
SHOW_DIRECTORIES = NO
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
# Namespaces page. This will remove the Namespaces entry from the Quick Index
# and from the Folder Tree View (if specified). The default is YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command <command> <input-file>, where <command> is the value of
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
# provided by doxygen. Whatever the program writes to standard output
# is used as the file version. See the manual for examples.
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
......@@ -339,10 +502,20 @@ WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be abled to get warnings for
# functions that are documented, but have no documentation for their parameters
# or return value. If set to NO (the default) doxygen will only warn about
# wrong or incomplete parameter documentation, but not about the absence of
# documentation.
WARN_NO_PARAMDOC = NO
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# warning originated and the warning text.
# warning originated and the warning text. Optionally the format may contain
# $version, which will be replaced by the version of the file (if it could
# be obtained via FILE_VERSION_FILTER)
WARN_FORMAT = "$file:$line: $text"
......@@ -368,7 +541,7 @@ INPUT = $(pwre_sroot)/doc/prm/src/doxygen.dx \
$(pwre_sroot)/lib/rt/src/rt_gdh.h \
$(pwre_sroot)/lib/rt/src/rt_mh_appl.h \
$(pwre_sroot)/lib/rt/src/rt_qcom.h \
$(pwre_croot)/nmps/lib/nmps/src/nmps_appl.h \
$(pwre_croot)/nmps/lib/nmps/src/nmps_appl.h \
$(pwre_sroot)/lib/rt/src/rt_appl.h \
$(pwre_sroot)/lib/co/src/co_time.c \
$(pwre_sroot)/lib/co/src/co_cdh.c \
......@@ -376,16 +549,25 @@ INPUT = $(pwre_sroot)/doc/prm/src/doxygen.dx \
$(pwre_sroot)/lib/rt/src/rt_mh_appl.c \
$(pwre_sroot)/lib/rt/src/rt_qcom.c \
$(pwre_croot)/nmps/lib/nmps/src/nmps_appl.c \
$(pwre_sroot)/doc/prm/src/ra_appl.cpp
$(pwre_sroot)/doc/prm/src/ra_appl.cpp \
$(pwre_sroot)/doc/prm/src/ra_advappl.cpp \
$(pwr_inc)/rt_gdh_msg.h \
$(pwr_inc)/rt_hash_msg.h
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# also the default input encoding. Doxygen uses libiconv (or the iconv built
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
# the list of possible encodings.
INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
FILE_PATTERNS = *.cpp \
*.c \
......@@ -403,17 +585,28 @@ RECURSIVE = YES
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
# that are symbolic links (a Unix filesystem feature) are excluded from the input.
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix filesystem feature) are excluded
# from the input.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
# certain files from those directories. Note that the wildcards are matched
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*
EXCLUDE_PATTERNS = *_bitmap_*.h
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).
......@@ -445,10 +638,20 @@ IMAGE_PATH =
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
# to standard output.
# to standard output. If FILTER_PATTERNS is specified, this tag will be
# ignored.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
# is applied to all files.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
......@@ -460,7 +663,9 @@ FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources.
# be generated. Documented entities will be cross-referenced with these sources.
# Note: To get rid of all source code in the generated output, make sure also
# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = YES
......@@ -475,18 +680,33 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# If the REFERENCED_BY_RELATION tag is set to YES
# then for each documented function all documented
# functions referencing it will be listed.
REFERENCED_BY_RELATION = YES
# If the REFERENCES_RELATION tag is set to YES (the default)
# If the REFERENCES_RELATION tag is set to YES
# then for each documented function all documented entities
# called/used by that function will be listed.
REFERENCES_RELATION = YES
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
# link to the source code. Otherwise they will link to the documentstion.
REFERENCES_LINK_SOURCE = YES
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
# tagging system (see http://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
......@@ -552,7 +772,9 @@ HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet
# will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET =
......@@ -564,15 +786,48 @@ HTML_ALIGN_MEMBERS = YES
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
# of the generated HTML documentation.
GENERATE_HTMLHELP = NO
# If the GENERATE_DOCSET tag is set to YES, additional index files
# will be generated that can be used as input for Apple's Xcode 3
# integrated development environment, introduced with OSX 10.5 (Leopard).
# To create a documentation set, doxygen will generate a Makefile in the
# HTML output directory. Running make will produce the docset in that
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
GENERATE_DOCSET = NO
# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
# feed. A documentation feed provides an umbrella under which multiple
# documentation sets from a single provider (such as a company or product suite)
# can be grouped.
DOCSET_FEEDNAME = "Doxygen generated docs"
# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
# should uniquely identify the documentation set bundle. This should be a
# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
# will append .docset to the name.
DOCSET_BUNDLE_ID = org.doxygen.Project
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded. For this to work a browser that supports
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
HTML_DYNAMIC_SECTIONS = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output dir.
# written to the html output directory.
CHM_FILE =
......@@ -589,6 +844,12 @@ HHC_LOCATION =
GENERATE_CHI = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
# is used to encode HtmlHelp index (hhk), content (hhc) and project file
# content.
CHM_INDEX_ENCODING =
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
# controls whether a binary table of contents is generated (YES) or a
# normal table of contents (NO) in the .chm file.
......@@ -611,12 +872,20 @@ DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information.
# If the tag value is set to FRAME, a side panel will be generated
# containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
# probably better off using the HTML help feature.
# probably better off using the HTML help feature. Other possible values
# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
# and Class Hiererachy pages using a tree view instead of an ordered list;
# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
# disables this behavior completely. For backwards compatibility with previous
# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
# respectively.
GENERATE_TREEVIEW = NO
......@@ -626,6 +895,14 @@ GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
# when you change the font size after a successful doxygen run you need
# to manually remove any form_*.png images from the HTML output directory
# to force them to be regenerated.
FORMULA_FONTSIZE = 10
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
......@@ -633,7 +910,7 @@ TREEVIEW_WIDTH = 250
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
# generate Latex output.
GENERATE_LATEX = NO
GENERATE_LATEX = YES
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
......@@ -681,13 +958,13 @@ LATEX_HEADER =
# contain links (just like the HTML output) instead of page references
# This makes the output suitable for online browsing using a pdf viewer.
PDF_HYPERLINKS = NO
PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
# plain latex in the generated Makefile. Set this option to YES to get a
# higher quality PDF documentation.
USE_PDFLATEX = NO
USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
# command to the generated LaTeX files. This will instruct LaTeX to keep
......@@ -707,7 +984,7 @@ LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimised for Word 97 and may not look very pretty with
# The RTF output is optimized for Word 97 and may not look very pretty with
# other RTF readers or editors.
GENERATE_RTF = NO
......@@ -734,7 +1011,7 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assigments. You only have to provide
# config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE =
......@@ -778,9 +1055,7 @@ MAN_LINKS = NO
# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.
# the code including all documentation.
GENERATE_XML = NO
......@@ -802,6 +1077,13 @@ XML_SCHEMA =
XML_DTD =
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
# enabling this will significantly increase the size of the XML output.
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
......@@ -866,7 +1148,7 @@ MACRO_EXPANSION = YES
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# PREDEFINED and EXPAND_AS_PREDEFINED tags.
# PREDEFINED and EXPAND_AS_DEFINED tags.
EXPAND_ONLY_PREDEF = NO
......@@ -892,7 +1174,9 @@ INCLUDE_FILE_PATTERNS =
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed.
# omitted =1 is assumed. To prevent a macro definition from being
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
PREDEFINED = OS_LINUX=1 \
OS=LINUX \
......@@ -908,13 +1192,13 @@ EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone
# on a line, have an all uppercase name, and do not end with a semicolon. Such
# function macros are typically used for boiler-plate code, and will confuse the
# parser if not removed.
# function macros are typically used for boiler-plate code, and will confuse
# the parser if not removed.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
# Configuration::additions related to external references
#---------------------------------------------------------------------------
# The TAGFILES option can be used to specify one or more tagfiles.
......@@ -961,13 +1245,23 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
# super classes. Setting the tag to NO turns the diagrams off. Note that this
# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
# recommended to install and use dot, since it yields more powerful graphs.
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
# or super classes. Setting the tag to NO turns the diagrams off. Note that
# this option is superseded by the HAVE_DOT option below. This is only a
# fallback. It is recommended to install and use dot, since it yields more
# powerful graphs.
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see
# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# If set to YES, the inheritance and collaboration graphs will hide
# inheritance and usage relations if the target is undocumented
# or is not a class.
......@@ -981,6 +1275,24 @@ HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
# By default doxygen will write a font called FreeSans.ttf to the output
# directory and reference it in all dot files that doxygen generates. This
# font does not include all possible unicode characters however, so when you need
# these (or just want a differently looking font) you can specify the font name
# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
# which can be done by putting it in a standard location or by setting the
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
# containing the font.
DOT_FONTNAME = FreeSans
# By default doxygen will tell dot to use the output directory to look for the
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
# different font using DOT_FONTNAME you can set the path where dot
# can find it using this tag.
DOT_FONTPATH =
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
......@@ -995,8 +1307,13 @@ CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for groups, showing the direct groups dependencies
GROUP_GRAPHS = YES
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similiar to the OMG's Unified Modeling
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
UML_LOOK = NO
......@@ -1020,19 +1337,34 @@ INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
# generate a call dependency graph for every global function or class method.
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
# If the CALL_GRAPH and HAVE_DOT options are set to YES then
# doxygen will generate a call dependency graph for every global function
# or class method. Note that enabling this option will significantly increase
# the time of a run. So in most cases it will be better to enable call graphs
# for selected functions only using the \callgraph command.
CALL_GRAPH = NO
# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
# doxygen will generate a caller dependency graph for every global function
# or class method. Note that enabling this option will significantly increase
# the time of a run. So in most cases it will be better to enable caller
# graphs for selected functions only using the \callergraph command.
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
# then doxygen will show the dependencies a directory has on other directories
# in a graphical way. The dependency relations are determined by the #include
# relations between the files in the directories.
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
......@@ -1040,7 +1372,7 @@ GRAPHICAL_HIERARCHY = YES
DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found on the path.
# found. If left blank, it is assumed the dot tool can be found in the path.
DOT_PATH =
......@@ -1050,33 +1382,41 @@ DOT_PATH =
DOTFILE_DIRS =
# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
# nodes that will be shown in the graph. If the number of nodes in a graph
# becomes larger than this value, doxygen will truncate the graph, which is
# visualized by representing a node as a red box. Note that doxygen if the
# number of direct children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
MAX_DOT_GRAPH_WIDTH = 1024
# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
MAX_DOT_GRAPH_HEIGHT = 1024
DOT_GRAPH_MAX_NODES = 50
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
# graphs generated by dot. A depth value of 3 means that only nodes reachable
# from the root by following a path via at most 3 edges will be shown. Nodes that
# lay further from the root node will be omitted. Note that setting this option to
# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
# note that a graph may be further truncated if the graph's image dimensions are
# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
# If 0 is used for the depth value (the default), the graph is not depth-constrained.
# from the root by following a path via at most 3 edges will be shown. Nodes
# that lay further from the root node will be omitted. Note that setting this
# option to 1 or 2 may greatly reduce the computation time needed for large
# code bases. Also note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is enabled by default, which results in a transparent
# background. Warning: Depending on the platform used, enabling this option
# may lead to badly anti-aliased labels on the edges of a graph (i.e. they
# become hard to read).
DOT_TRANSPARENT = YES
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10)
# support this, this feature is disabled by default.
DOT_MULTI_TARGETS = NO
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
......@@ -1090,7 +1430,7 @@ GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to the search engine
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be
......
......@@ -41,7 +41,18 @@ $(clean_html) : clean_%.html : %.html
$(doc_dir)/prm/index.html : ../../doxygen.dx
@ echo "doxygen documentation $(source) $(target)"
@ doxygen
@ if [ -e latex ]; then \
./repl.sh latex/*.tex; \
cd latex; \
make pdf; \
cp refman.pdf $(pwr_doc)/en_us/man_prm.pdf; \
cp classra__appl.pdf $(pwr_doc)/en_us/; \
cp classrt__appl.pdf $(pwr_doc)/en_us/; \
cd ..; \
rm -r -f latex; \
rm -f repl.sed; \
rm -f repl.tmp; \
fi
......
# Replace all in Oxelsund
#set -o xtrace
files=$@
from=""
to="o"
for file in $files; do
cp $file $file.1
echo "s/$from/$to/" > repl.sed
sed -f repl.sed $file > repl.tmp
cp repl.tmp $file
done
/*! \file ra_appl.cpp
\brief Example application subclasses of rt_appl
This file is an example file, containing to example applications.
*/
/** @addtogroup rt */
/*@{*/
/** @defgroup rt_ex Application examples
* @ingroup applex
* @{
*/
#include "pwr.h"
//! Advanced c++ application example
/*! Example of a proview application program
This application does not subclass the rt_app class. It handles all
interaction to the Proview runtime environment on it's own.
@see ra_advappl.cpp
*/
#include "pwr.h"
#include "rt_gdh.h"
#include "rt_errh.h"
#include "rt_aproc.h"
#include "rt_pwr_msg.h"
#include "rt_qcom_msg.h"
#include "rt_ini_event.h"
#include "co_error.h"
class MyAppl {
public:
MyAppl() {}
void init( qcom_sQid *qid);
void open();
void close();
void scan();
float scantime() { return 1.0;}
};
void MyAppl::init( qcom_sQid *qid)
{
qcom_sQid qini;
qcom_sQattr qAttr;
pwr_tStatus sts;
// Init error and status logger with a unic application index per node.
errh_Init( "rs_appl", errh_eAnix_appl1);
errh_SetStatus( PWR__APPLSTARTUP);
// Init database
sts = gdh_Init("rs_appl");
if ( EVEN(sts)) {
errh_Fatal( "gdh_Init, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
// Create a queue to receive stop and restart events
if (!qcom_Init(&amp;sts, 0, "rs_appl")) {
errh_Fatal("qcom_Init, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
qAttr.type = qcom_eQtype_private;
qAttr.quota = 100;
if (!qcom_CreateQ(&amp;sts, qid, &amp;qAttr, "events")) {
errh_Fatal("qcom_CreateQ, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
qini = qcom_cQini;
if (!qcom_Bind(&amp;sts, qid, &amp;qini)) {
errh_Fatal("qcom_Bind(Qini), %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(-1);
}
}
void MyAppl::open()
{
pwr_tOid oid;
pwr_tStatus sts;
// Get configuration object
sts = gdh_NameToObjid( "Noder-Node-MyAppl", &amp;oid);
if ( EVEN(sts)) throw co_error(sts);
aproc_RegisterObject( oid);
// Link to database objects
}
void MyAppl::close()
{
// Unlink to database objects
}
void MyAppl::scan()
{
aproc_TimeStamp();
// Do something
}
int main()
{
pwr_tStatus sts;
MyAppl appl;
int tmo;
char mp[2000];
qcom_sQid qid = qcom_cNQid;
qcom_sGet get;
int swap = 0;
bool first_scan = true;
appl.init( &amp;qid);
try {
appl.open();
}
catch ( co_error&amp; e) {
errh_Error( (char *)e.what().c_str());
errh_Fatal( "rs_appl aborting");
errh_SetStatus( PWR__APPLTERM);
exit(0);
}
aproc_TimeStamp();
errh_SetStatus( PWR__ARUN);
first_scan = true;
for (;;) {
if ( first_scan) {
tmo = (int) (appl.scantime() * 1000 - 1);
}
get.maxSize = sizeof(mp);
get.data = mp;
qcom_Get( &amp;sts, &amp;qid, &amp;get, tmo);
if (sts == QCOM__TMO || sts == QCOM__QEMPTY) {
if ( !swap)
appl.scan();
}
else {
ini_mEvent new_event;
qcom_sEvent *ep = (qcom_sEvent*) get.data;
new_event.m = ep-&gt;mask;
if (new_event.b.oldPlcStop &amp;&amp; !swap) {
errh_SetStatus( PWR__APPLRESTART);
swap = 1;
appl.close();
} else if (new_event.b.swapDone &amp;&amp; swap) {
swap = 0;
appl.open();
errh_SetStatus( PWR__ARUN);
} else if (new_event.b.terminate) {
exit(0);
}
}
first_scan = false;
}
}
/** @} */
/** @} */
......@@ -7,8 +7,8 @@
/*@{*/
/** @defgroup rt_ex Example applications
* @ingroup NMps
/** @defgroup rt_ex Application examples
* @ingroup applex
* @{
*/
#include "pwr.h"
......@@ -18,6 +18,8 @@
//! A simple c++ application example
/*! ra_appl is a subclass to rt_appl and implements the virtual
* functions open(), close(), and scan().
*
* @see ra_appl.cpp
*/
class ra_appl : public rt_appl {
public:
......@@ -53,159 +55,6 @@ int main()
appl.mainloop();
}
#include "pwr.h"
#include "rt_gdh.h"
#include "rt_errh.h"
#include "rt_aproc.h"
#include "rt_pwr_msg.h"
#include "rt_qcom_msg.h"
#include "rt_ini_event.h"
#include "co_error.h"
//! Advanced c++ application example
/*! Example of a proview application program
*/
class MyAppl {
public:
MyAppl() {}
void init( qcom_sQid *qid);
void open();
void close();
void scan();
float scantime() { return 1.0;}
};
void MyAppl::init( qcom_sQid *qid)
{
qcom_sQid qini;
qcom_sQattr qAttr;
pwr_tStatus sts;
// Init error and status logger with a unic application index per node.
errh_Init( "rs_appl", errh_eAnix_appl1);
errh_SetStatus( PWR__APPLSTARTUP);
// Init database
sts = gdh_Init("rs_appl");
if ( EVEN(sts)) {
errh_Fatal( "gdh_Init, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
// Create a queue to receive stop and restart events
if (!qcom_Init(&amp;sts, 0, "rs_appl")) {
errh_Fatal("qcom_Init, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
qAttr.type = qcom_eQtype_private;
qAttr.quota = 100;
if (!qcom_CreateQ(&amp;sts, qid, &amp;qAttr, "events")) {
errh_Fatal("qcom_CreateQ, %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(sts);
}
qini = qcom_cQini;
if (!qcom_Bind(&amp;sts, qid, &amp;qini)) {
errh_Fatal("qcom_Bind(Qini), %m", sts);
errh_SetStatus( PWR__APPLTERM);
exit(-1);
}
}
void MyAppl::open()
{
pwr_tOid oid;
pwr_tStatus sts;
// Get configuration object
sts = gdh_NameToObjid( "Noder-Node-MyAppl", &amp;oid);
if ( EVEN(sts)) throw co_error(sts);
aproc_RegisterObject( oid);
// Link to database objects
}
void MyAppl::close()
{
// Unlink to database objects
}
void MyAppl::scan()
{
aproc_TimeStamp();
// Do something
}
int main()
{
pwr_tStatus sts;
MyAppl appl;
int tmo;
char mp[2000];
qcom_sQid qid = qcom_cNQid;
qcom_sGet get;
int swap = 0;
bool first_scan = true;
appl.init( &amp;qid);
try {
appl.open();
}
catch ( co_error&amp; e) {
errh_Error( (char *)e.what().c_str());
errh_Fatal( "rs_appl aborting");
errh_SetStatus( PWR__APPLTERM);
exit(0);
}
aproc_TimeStamp();
errh_SetStatus( PWR__ARUN);
first_scan = true;
for (;;) {
if ( first_scan) {
tmo = (int) (appl.scantime() * 1000 - 1);
}
get.maxSize = sizeof(mp);
get.data = mp;
qcom_Get( &amp;sts, &amp;qid, &amp;get, tmo);
if (sts == QCOM__TMO || sts == QCOM__QEMPTY) {
if ( !swap)
appl.scan();
}
else {
ini_mEvent new_event;
qcom_sEvent *ep = (qcom_sEvent*) get.data;
new_event.m = ep-&gt;mask;
if (new_event.b.oldPlcStop &amp;&amp; !swap) {
errh_SetStatus( PWR__APPLRESTART);
swap = 1;
appl.close();
} else if (new_event.b.swapDone &amp;&amp; swap) {
swap = 0;
appl.open();
errh_SetStatus( PWR__ARUN);
} else if (new_event.b.terminate) {
exit(0);
}
}
first_scan = false;
}
}
/** @} */
/** @} */
......@@ -24,7 +24,9 @@
<h2 id="mainmenu">Reference Manuals</h2>
<table id="mainmenu" border="1" cellspacing="0" width="100%">
<tr><td id="mainmenu"><a id="mainmenu" href="orm_f.html" target="_top">Object Reference Manual</a></td></tr>
<tr><td id="mainmenu"><a id="mainmenu" href="prm_f.html" target="_top">API Reference</a></td></tr>
<tr><td id="mainmenu"><a id="mainmenu" href="prm_f.html" target="_top">Programmer's Reference Manual</a>
<a id="mainmenulink" href="prm_f.html" target="top"><br>(html),</a>
<a id="mainmenulink" href="man_prm.pdf" target="right">(pdf)</a></td></tr>
</table>
<h2 id="mainmenu">Guides</h2>
<table id="mainmenu" border="1" cellspacing="0" width="100%">
......
......@@ -24,7 +24,9 @@
<h2 id="mainmenu">Referens</h2>
<table id="mainmenu" border="1" cellspacing="0" width="100%">
<tr><td id="mainmenu"><a id="mainmenu" href="orm_f.html" target="_top">Objekthandbok (ORM)</a></td></tr>
<tr><td id="mainmenu"><a id="mainmenu" href="../en_us/prm_f.html" target="_top">API-handbok (PRM)</a></td></tr>
<tr><td id="mainmenu"><a id="mainmenu" href="../en_us/prm_f.html" target="_top">API-handbok</a>
<a id="mainmenulink" href="../en_us/prm_f.html" target="top"><br>(html),</a>
<a id="mainmenulink" href="../en_us/man_prm.pdf" target="right">(pdf)</a></td></tr>
</table>
<h2 id="mainmenu">Guider</h2>
<table id="mainmenu" border="1" cellspacing="0" width="100%">
......
......@@ -45,7 +45,7 @@ extern "C" {
needed to use CDH.
*/
/*! \defgroup Cdh_DS Data Structures
/*! \defgroup Cdh_DS Cdh Data Structures
\ingroup Cdh
*/
......@@ -444,6 +444,15 @@ typedef union {
//! Name string format description.
/*!
Bitmask that denotes an object or attriubte name string, i.e. which components of the
name that is included in the string.<br>
Some common examples are
<b>cdh_mName_object</b> Object.<br>
<b>cdh_mName_object | cdh_mName_attribute</b> Object and attribute.<br>
<b>cdh_mName_pathStrict</b> Path, object and attribute<br>
<b>cdh_mName_volumeStrict</b> Volume, path, object and attribute.
Let us assume we have an object of class Ai.
The object has an attribute called FilterAttribute.
......@@ -663,7 +672,12 @@ typedef struct {
} cdh_sParseName;
/*@}*/
/*! \addtogroup Cdh */
/*! \defgroup Cdh_FC Cdh Functions
\ingroup Cdh
*/
/*! \addtogroup Cdh_FC */
/*@{*/
/* Function prototypes to exported functions. */
......
......@@ -56,9 +56,15 @@ typedef unsigned int time_tClock;
This include file contains definitions and function prototypes
needed to use time functions.
*/
/*! \addtogroup Time */
/*! \defgroup Time_DS Time Data Structures
\ingroup Time
*/
/*! \addtogroup Time_DS */
/*@{*/
//! Time string format
typedef enum {
time_eFormat_DateAndTime = 0, //!< Display date and time, 01-JAN-1970 01:00:00.00
......@@ -92,6 +98,15 @@ typedef enum {
);
#endif
/*@}*/
/*! \defgroup Time_FC Time Functions
\ingroup Time
*/
/*! \addtogroup Time_FC */
/*@{*/
int time_IsNull (pwr_tTime *t1);
pwr_tTime * time_Aabs (pwr_tTime*, pwr_tTime*);
pwr_tTime * time_Aadd (pwr_tTime*, pwr_tTime*, pwr_tDeltaTime*);
......
......@@ -36,20 +36,43 @@
*/
class rt_appl {
public:
rt_appl( char *name, errh_eAnix anix,
double scantime = 1.0, qcom_sQid qid = qcom_cNQid) :
m_anix(anix), m_scantime(scantime), m_qid(qid)
//! Constructor.
rt_appl(
char *name, //< Process name.
errh_eAnix anix, //< Application index.
double scantime = 1.0, //< Scantime for call of the scan() function.
qcom_sQid qid = qcom_cNQid //< Qcom queue identity.
) : m_anix(anix), m_scantime(scantime), m_qid(qid)
{ strcpy( m_name, name); }
void init();
virtual void open() {};
virtual void close() {};
virtual void scan() {};
void register_appl( char *name);
void mainloop();
double scantime() { return m_scantime;}
void set_scantime( double time) { m_scantime = time;}
pwr_tOid& apploid() { return m_apploid;}
//! Initialize the application.
/*! The open() function is called after initialization, and may contain setup of
direct links to objects and attributes in the realtime database.
The open() function is also called after a soft restart.
*/
virtual void open() {};
//! Closes the application.
/*! the close() is called when a restart or stop event is received. It should
unlink to all direct links.
*/
virtual void close() {};
//! Cyclic function.
/*! The scan() function is called cyclic with the scantime specified in the constructor.
In this function all the control and supervision work of the application is placed.
*/
virtual void scan() {};
virtual ~rt_appl() {}
private:
......
......@@ -99,9 +99,9 @@
*/
static void
getAlarmVisibility (
pwr_tStatus *status, /**< ZZZ */
gdb_sObject *op, /**< ZZZ */
pwr_tUInt32 *avis /**< ZZZ */
pwr_tStatus *status, /**< Status */
gdb_sObject *op, /**< Object */
pwr_tUInt32 *avis /**< The alarm block level */
)
{
gdb_sObject *pop;
......@@ -118,18 +118,15 @@ getAlarmVisibility (
}
}
/**
* @brief This routine translates an attribute reference structure
* into the name of the attribute that it denominates.
* @brief Translate an attribute referece to a name.
* @return pwr_tStatus
*/
pwr_tStatus
gdh_AttrrefToName (
pwr_sAttrRef *arp, /**< Supplies the attribute reference structure
that defines an attribute. */
char *name, /**< Receives the name of the form 'object name',
'attributename'. */
unsigned int size, /**< Supplies the maximun length of the buffer */
pwr_tBitMask nametype /**< ZZZ */
pwr_sAttrRef *arp, /**< Pointer to the attribute reference. */
char *name, /**< Name buffer supplied by the user, where name is written. */
unsigned int size, /**< Size of the name buffer */
pwr_tBitMask nametype /**< Mask of type cdh_mName. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -180,15 +177,16 @@ gdh_AttrrefToName (
/**
* @brief Get attrref of an attribute specified by name.
* @brief Get the attribute reference for an attribute in an object attribute
* reference, where the attribute is specified by an string.
*
* @return pwr_tStatus
*/
pwr_tStatus
gdh_ArefANameToAref (
pwr_sAttrRef *arp,
const char *aname,
pwr_sAttrRef *oarp
pwr_sAttrRef *arp, /**< Pointer to object attribute reference */
const char *aname, /**< Attribute name string */
pwr_sAttrRef *oarp /**< Receives the attribute reference. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -238,14 +236,17 @@ gdh_ArefANameToAref (
/**
* @brief Get the object attrref for an attribute attrref.
* @brief Get the attribute reference to an object or attribute object, from the
* attribute reference to an attribute in the object.
*
* This functions cuts the last attribute segment.
*
* @return pwr_tStatus
*/
pwr_tStatus
gdh_AttrArefToObjectAref (
pwr_sAttrRef *arp,
pwr_sAttrRef *oarp
pwr_sAttrRef *arp, /**< Attribute reference to the attribute. */
pwr_sAttrRef *oarp /**< Returned attribute reference to the object or attribute object.*/
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -293,10 +294,10 @@ gdh_AttrArefToObjectAref (
/**
* @brief Converts a class & attribute to attrref format.
* @brief Converts a class and attribute string to attrref format.
*
* The Objid of the attrref is left untouched.
* @return pwr_tStatus
* The Objid of the attrref is left untouched.
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -388,13 +389,13 @@ gdh_ClassAttrrefToAttr (
/**
* @brief Get the class identity corresponding to a class
* with name 'classname'.
* specified by name.
* @return pwr_tStatus
*/
pwr_tStatus
gdh_ClassNameToId (
const char *name, /**< ZZZ */
pwr_tClassId *cid /**< ZZZ */
const char *name, /**< Class name string. */
pwr_tClassId *cid /**< Returned class identity. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -414,12 +415,13 @@ gdh_ClassNameToId (
}
/**
* @brief Create and initialize a new local object.
* @brief Create an object in a dynamic volume.
*
* Objects can only be created in local dynamic volumes, or in the local
* system volume. <br>
* Space is allocated for the object which must not exist.
* This call is possible only if the object is created
* in a local volume, i.e a volume owned by the local node.
* The volume must furthermore be of class $DynamicVolume or $SystemVolume.
*
* All reachable nodes, who have mounted the volume in question,
* are notified about this new object.
......@@ -435,14 +437,15 @@ gdh_ClassNameToId (
pwr_tStatus
gdh_CreateObject (
char *name, /**< Null terminated object name string. */
pwr_tClassId cid, /**< What class should the object be of? */
unsigned int size, /**< Size of object body. */
pwr_tObjid *oid, /**< Address of a pwr_tObjid where
the object identity is to be stored. */
pwr_tObjid req_oid, /**< Requested objid, */
pwr_tBitMask flags, /**< Alias client or mount client? */
pwr_tObjid soid /**< Server objid. */
char *name, /**< Object name string. Last segment only.*/
pwr_tClassId cid, /**< Class id for object. */
unsigned int size, /**< Size of object body. Only needed for objects
with dynamic size, else 0. */
pwr_tObjid *oid, /**< Returned objid. */
pwr_tObjid req_oid, /**< Requested objid. Only if any special objid is
prefered, else pwr_cNOid. */
pwr_tBitMask flags, /**< Alias client or mount client. */
pwr_tObjid soid /**< Server objid. Used for ExternVolumes. Normally pwr_cNOid */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -480,6 +483,9 @@ gdh_CreateObject (
*
* All reachable nodes, who have mounted the volume in question,
* are notified about the removal of this object.
*
* The object is not completly removed until all directlink and
* subscriptions to the object are removed.
* @return pwr_tStatus
*/
......@@ -506,14 +512,18 @@ gdh_DeleteObject (
* @brief Request a direct link to the data denoted by an attribute reference.
*
* The object owning the data must be owned by the local node.
* The caller can change the data without restriction.
* The caller receives a pointer to data in the object body in the realtime database.
* The data can be changed by the user without restriction.
*
* The data should be unlinked with a gdh_DLUnrefObjectInfo() call.
*
* @return pwr_tStatus
*/
pwr_tStatus
gdh_DLRefObjectInfoAttrref (
pwr_sAttrRef *arp, /**< ZZZ */
void **infop, /**< ZZZ */
pwr_tDlid *dlid /**< ZZZ */
pwr_sAttrRef *arp, /**< Pointer to attribute reference for object or attribute to link to.*/
void **infop, /**< Returnd pointer to the data. */
pwr_tDlid *dlid /**< Id for the direct link. Used to unlink the data.*/
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -551,16 +561,19 @@ gdh_DLRefObjectInfoAttrref (
}
/**
* @brief Terminate direct linking of an object or an object parameter.
* @brief Terminate direct linking of an object or an object attribute.
*
* The pointer returned by DLRefObjectInfo can become invalid
* after this call.
*
* @see gdh_DLRefObjectInfo
* @see gdh_DLRefObjectInfoAttrref
* @return pwr_tStatus
*/
pwr_tStatus
gdh_DLUnrefObjectInfo (
pwr_tDlid dlid /** <The id of the direct link we want to break */
pwr_tDlid dlid /** <The id of the direct link we want to remove */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -576,7 +589,7 @@ gdh_DLUnrefObjectInfo (
}
/**
* @brief Terminates all direct links set up by this user (job/process).
* @brief Removes all direct links set up by this process.
*/
void
......@@ -603,7 +616,7 @@ gdh_GetAlarmInfo (
pwr_tUInt32 *maxa, /**< Receives the highest alarm level of the object. Can be NULL */
pwr_tUInt32 *b, /**< Receives the blocking level of the object. CAn be NULL */
pwr_tUInt32 *maxb, /**< Receives the highest existing blocking level of the object. Can be NULL */
pwr_tUInt32 *alarmvisibility /**< ZZZ */
pwr_tUInt32 *alarmvisibility /**< Receives the alarm block level. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -980,6 +993,12 @@ gdh_GetObjectSize (
return sts;
}
/**
* @brief Get the size of a dynamic attribute.
*
* @return pwr_tStatus
*/
pwr_tStatus
gdh_GetDynamicAttrSize(
pwr_tObjid oid, /**< The object identity. */
......@@ -1202,6 +1221,7 @@ gdh_GetObjectDLCount (
/**
* @brief Get the object identity of the parent of an object.
* @see gdh_GetLocalParent
* @return pwr_tStatus
*/
......@@ -1237,6 +1257,10 @@ gdh_GetParent (
/**
* @brief Get the object identity of the local parent of an object.
*
* If the parent is a MountObject, the objid for the MountObject will be returned,
* not the mounted object, as in gdh_GetParent:
* @see gdh_GetParent
* @return pwr_tStatus
*/
......@@ -1321,7 +1345,25 @@ gdh_GetSubscriptionOldness (
}
/**
* @brief Get the object identity of the first child of an object.
* @brief Get the object identity of the first child of an object.
*
* Other children are fetched with gdh_GetNextSibling.
* @see gdh_GetNextSibling
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOid coid;
* pwr_tOName name;
*
* // Get all children to oid
* for ( sts = gdh_GetChild( oid, &coid); ODD(sts); sts = gdh_GetNextSibling( coid, &coid)) {
* sts = gdh_ObjidToName( coid, name, sizeof(name), cdh_mName_volumeStrict);
* if ( EVEN(sts)) throw co_error(sts);
*
* cout << "Child: " << name << endl;
* }
* @endcode
* @return pwr_tStatus
*/
......@@ -1355,7 +1397,9 @@ gdh_GetChild (
/**
* @brief Get the object identity of the next sibling (i.e.
* the objects have the parent in common).
* the next object with the same parent).
* @see Example in gdh_GetChild
* @see gdh_GetPreviousSibling
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -1397,6 +1441,7 @@ gdh_GetNextSibling (
/**
* @brief Get the object identity of the previous sibling (i.e.
* the previous object with the same parent).
* @see gdh_GetNextSibling
* @return pwr_tStatus
*/
......@@ -1438,14 +1483,31 @@ gdh_GetPreviousSibling (
}
/**
* @brief Get the object identity for the first object not
* having a parent, i.e. the top level of the
* naming hierarchy.
* @brief Get the first root object in the object tree.
*
* Returns the object identity for the first root object.<br>
* Other root objects are fetched with gdh_GetNextSibling.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOName name;
* pwr_tOid oid;
*
* // Get all top objects on this node
* for ( sts = gdh_GetRootList( &oid); ODD(sts); sts = gdh_GetNextSibling( oid, &oid)) {
* sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_volumeStrict);
* if ( EVEN(sts)) throw co_error(sts);
*
* cout << "Top object: " << name << endl;
* }
* @endcode
* @see gdh_GetNextSibling
* @return pwr_tStatus
*/
pwr_tStatus
gdh_GetRootList (
pwr_tObjid *oid /**< Receives the object identity. */
pwr_tObjid *oid /**< Receives the object identity of the first root object. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -1480,6 +1542,21 @@ gdh_GetRootList (
* (of class $RootVolume, $SubVolume,
* $DynamicVolume, $ClassVolume and $SystemVolume),
* and shared volumes.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOName name;
* pwr_tOid oid;
*
* // Get all objects of class cid
* for ( sts = gdh_GetClassList( cid); ODD(sts); sts = gdh_GetNextObject( oid, &oid)) {
* sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_volumeStrict);
* if ( EVEN(sts)) throw co_error(sts);
*
* cout << "Object: " << name << endl;
* }
* @endcode
* @return pwr_tStatus
*/
......@@ -1513,6 +1590,7 @@ gdh_GetClassList (
* (of class $RootVolume, $SubVolume,
* $DynamicVolume, $ClassVolume and $SystemVolume),
* and in shared volumes.
* @see Example in gdh_GetClassList
* @return pwr_tStatus
*/
......@@ -1549,6 +1627,22 @@ gdh_GetNextObject (
* (of class $RootVolume, $SubVolume,
* $DynamicVolume, $ClassVolume and $SystemVolume),
* and shared volumes.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tAttrRef aref;
* pwr_tAName name;
*
* // Get all objects and attribute objects for class cid
* for ( sts = gdh_GetClassListAttrRef( cid, &aref); ODD(sts); sts = gdh_GetNextAttrRef( cid, &aref, &aref)) {
* sts = gdh_AttrrefToName( &aref, name, sizeof(name), cdh_mName_volumeStrict);
* if ( EVEN(sts)) throw co_error(sts);
*
* cout << "Object: " << name << endl;
* }
* @endcode
* @see gdh_GetNextAttrRef
* @return pwr_tStatus
*/
......@@ -1579,6 +1673,7 @@ gdh_GetClassListAttrRef (
* (of class $RootVolume, $SubVolume,
* $DynamicVolume, $ClassVolume and $SystemVolume),
* and in shared volumes.
* @see Example in gdh_GetClassListAttrRef
* @return pwr_tStatus
*/
......@@ -1822,18 +1917,20 @@ gdh_GetPreviousObject (
}
/**
* Map the object and node database and start communications.
*
* If the GDH user wants to make use of PAMS, then he should
* call PAMS_DCL_PROCESS before calling gdh_Init, and supply
* the actual PAMS process number as parameter to gdh_Init.
* If the user does NOT use PAMS, a zero process_num must be
* passed as argument.
* @brief Initialize the process to the Proview runtime environment.
*
* Example
* @code
* pwr_tStatus sts;
*
* sts = gdh_Init( "my_appl");
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
*/
pwr_tStatus
gdh_Init (
const char *name /**< ZZZ */
const char *name /**< Process name */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -1845,35 +1942,34 @@ gdh_Init (
return sts;
}
/**
* @brief Fetch the meta data of an attribute, given its attrref or its name.
/*
* Fetch the meta data of an attribute, given its attrref or its name.
*
* If meta data is wanted for a class use the class parameter.
* The output arguments can be NULL if they are not wanted.
* @return pwr_tStatus
*/
pwr_tStatus
gdh_MDAttribute (
pwr_tClassId cid, /**< Class. Use pwr_cNClassId if meta
pwr_tClassId cid, /* Class. Use pwr_cNClassId if meta
data for an object and not for
a class is wanted. */
pwr_sAttrRef *arp, /**< Use NULL if attrname should be used
pwr_sAttrRef *arp, /* Use NULL if attrname should be used
instead of the attribute reference. */
char *aname, /**< String containing
char *aname, /* String containing
object.attribute or
object.attribute[index]
If class data then name of attribute
must start with a dot. */
pwr_tTypeId *tid, /**< Address of an type id where the
pwr_tTypeId *tid, /* Address of an type id where the
attribute type will be stored
or NULL if not wanted */
unsigned int *size, /**< Address of an integer where the
unsigned int *size, /* Address of an integer where the
attribute size will be stored
or NULL if not wanted. */
unsigned int *offs, /**< Address of an integer where the
unsigned int *offs, /* Address of an integer where the
attribute offset will be stored
or NULL if not wanted. */
unsigned int *elem /**< Address of an integer where the
unsigned int *elem /* Address of an integer where the
number of elements will be stored
or NULL if not wanted. */
)
......@@ -1950,6 +2046,15 @@ gdh_MoveObject (
/**
* @brief Get the object identity of an object with name 'name'.
*
* Example
* @code
* pwr_tOid oid;
* pwr_tOName name = "H1-H2-Valve";
*
* sts = gdh_NameToObjid( name, &oid);
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -2019,6 +2124,16 @@ gdh_NameToPointer (
/**
*@brief Check if the Nethandler has started.
*
* Returns GDH__SUCCESS if the nethandler is running,
* else GDH__NONETHANDLER.
*
* Example
* @code
* // Wait for nethandler to start
* while ( EVEN( gdh_NethandlerRunning()))
* sleep(5);
* @endcode
*@return pwr_tStatus
*/
......@@ -2042,6 +2157,16 @@ gdh_NethandlerRunning (
/**
* @brief Converts from name string to attribute reference.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tAttrRef aref;
* pwr_tAName name = "H1-H2-Temperature.ActualValue";
*
* sts = gdh_NameToAttrref( pwr_cNOid, name, &aref);
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -2085,6 +2210,14 @@ gdh_NameToAttrref (
/**
* @brief Get the name of an object identified by its object identity.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOName name;
*
* sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_volumeStrict);
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
* The caller is responsible for supplying a sufficient buffer.
* @return pwr_tStatus
*/
......@@ -2093,7 +2226,7 @@ gdh_ObjidToName (
pwr_tObjid oid, /**< Object id of an object. */
char *namebuf, /**< A buffer where the name can be put. */
pwr_tUInt32 size, /**< Size of namebuf. */
pwr_tBitMask nametype /**< ZZZ */
pwr_tBitMask nametype /**< Mask of type cdh_mName. */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -2177,6 +2310,10 @@ gdh_ObjidToPointer (
return sts;
}
/**
* @brief Get a pointer to a mount object.
* @return pwr_tStatus
*/
pwr_tStatus
gdh_MountObjidToPointer (
pwr_tObjid oid, /**< The object identity. */
......@@ -2278,6 +2415,16 @@ gdh_RenameObject (
* The caller is responsible for the information in the buffer.
* If the buffer is shorter then what is required,
* then a partial update takes place.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOName name = "H1-H2-Temperature.ActualValue";
* pwr_tFloat32 value = 1.23;
*
* sts = gdh_SetObjectInfo( name, &value, sizeof(value));
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
* @return pwr_tStatus
*/
......@@ -2406,6 +2553,15 @@ gdh_SetObjectInfo (
* The routine stalls until the operation is performed. The caller
* is responsible for the information in the buffer. If the buffer
* is shorter then what is required, then a partial update takes place.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tFloat32 value = 1.23;
*
* sts = gdh_SetObjectInfoAttrref( &aref, &value, sizeof(value));
* if ( EVEN(sts)) throw co_error(sts);
* @endcode
* @return pwr_tStatus
*/
......@@ -2593,7 +2749,7 @@ gdh_SubRefObjectInfoList (
/**
* @brief This routine returns a subid to the information that is
* denoted by 'aref'. The name can be either an object or an
* object parameter.
* object attribute.
*
* Since this routine operates on a single data item, it is
* pretty slow. For faster setup of many subscriptions in one
......@@ -2645,8 +2801,9 @@ gdh_SubRefObjectInfoName (
}
/**
* @brief Terminates subscriptions. All invalid pwr_tSubids remain in the
* list. The valid pwr_tSubids are zeroed out!
* @brief Terminates a list of subscriptions.
*
* All invalid pwr_tSubids remain in the list. The valid pwr_tSubids are zeroed out!
*
* @return pwr_tStatus
*/
......@@ -2890,7 +3047,7 @@ gdh_SubAssociateBuffer (
cp->usersize = buffersize;
*buffer = pool_Address(NULL, gdbroot->rtdb, cp->userdata);
} else {
if (cp->usersize >= buffersize) { /** @todo !!! Try to understand this code!, LW?
if (cp->usersize >= buffersize) { /** todo !!! Try to understand this code!, LW?
I think it shall be usersize instead of userdata, ML.
Please verify.*/
*buffer = pool_Address(NULL, gdbroot->rtdb, cp->userdata);
......@@ -3053,7 +3210,21 @@ gdh_RefObjectInfoList (
* subscription update. If you need to write data on another node use gdh_SetObjectInfo.
* If you want to issue several requests at the same time use gdh_RefObjectInfoList,
* this is much more efficient than repeated calls to gdh_RefObjectInfo.
* @sa Examples
* @see gdh_UnrefObjectinfo
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tOName name = "H1-H2-Temperature.ActualValue";
* pwr_tSubid subid;
* pwr_tFloat32 *valuep;
*
* sts = RefObjectInfo( name, &valuep, &subid, sizeof(*valuep));
* if ( EVEN(sts)) throw co_error(sts);
* ...
* sts = gdh_UnrefObjectInfo( subid);
* @endcode
* @see gdh_UnrefObjectInfo();
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -3088,12 +3259,13 @@ gdh_RefObjectInfo (
* subscription identity.
*
* The pointer returned by for example gdh_RefObjectInfo
* is invalid after this call.
* is invalid after this call.
*
* N.B.! The user is responsible for removing all subscriptions
* before terminating a process, the system will not do it for you.
* This call will result in either a gdh_DLUnrefObjectInfo or a
* gdh_SubUnrefObjectInfo.
* @sa Examples
* @see gdh_RefObjectInfo, gdh_DLUnrefObjectInfo, gdh_SubUnrefObjectInfo
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -3118,10 +3290,11 @@ gdh_UnrefObjectInfo (
}
/**
*@brief Terminates all subscriptions set up by this user (job/process).
*@brief Terminates all subscriptions set up by this process.
*
* This call will result in either a gdh_DLUnrefObjectInfoAll or a
* gdh_SubUnrefObjectInfoAll.
* @see gdh_DLUnrefObjectInfoAll, gdhSubUnrefObjectInfoAll
* @return pwr_tStatus
*/
pwr_tStatus
......@@ -3144,8 +3317,8 @@ gdh_UnrefObjectInfoAll ()
pwr_tStatus
gdh_SetAlarmLevel (
pwr_tObjid oid, /**< ZZZ */
pwr_tUInt32 alarmlevel /**< ZZZ */
pwr_tObjid oid, /**< Object identity for the object */
pwr_tUInt32 alarmlevel /**< New alarm level */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -3174,8 +3347,8 @@ gdh_SetAlarmLevel (
*/
pwr_tStatus
gdh_SetAlarmBlockLevel (
pwr_tObjid oid, /**< ZZZ */
pwr_tUInt32 blocklevel /**< ZZZ */
pwr_tObjid oid, /**< Object identity for the object */
pwr_tUInt32 blocklevel /**< New block level */
)
{
pwr_tStatus sts = GDH__SUCCESS;
......@@ -3307,9 +3480,31 @@ gdh_SetCache (
}
/**
* @brief Get the first volume.
*
* Other volumes can be fetched with gdh_GetNextVolume.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tVid vid;
* pwr_tObjName vname;
*
* // Get all volumes
* for ( sts = gdh_GetVolumeList( &vid); ODD(sts); sts = gdh_GetNextVolume( vid, &vid)) {
* sts = gdh_VolumeIdToName( vid, vname, sizeof(vname));
* if (EVEN(sts)) throw co_error(sts);
*
* cout << "Volume: " << vname << endl;
* }
* @endcode
* @see gdh_GetNextVolume
* @return pwr_tStatus
*/
pwr_tStatus
gdh_GetVolumeList(
pwr_tVid *vid
pwr_tVid *vid /**< Recieves the volume identity for the first volume. */
)
{
pool_sQlink *vl;
......@@ -3327,6 +3522,13 @@ gdh_GetVolumeList(
return GDH__SUCCESS;
}
/**
* @brief Get the next volume in the volume list.
*
* The first volume can be fetched with gdh_GetVolumeList.
* @see Example in gdh_GetVolumeList
* @return pwr_tStatus
*/
pwr_tStatus
gdh_GetNextVolume(
pwr_tVid pvid,
......@@ -3364,11 +3566,16 @@ gdh_GetNextVolume(
return rsts;
}
/**
* @brief Get the name for a volume denoted by volume identity.
* @see Example in gdh_GetVolumeList
* @return pwr_tStatus
*/
pwr_tStatus
gdh_VolumeIdToName(
pwr_tVid vid,
char *name,
int size
pwr_tVid vid, /**< Volume identity */
char *name, /**< Name buffer, allocated by the user */
int size /**< Size of name buffer */
)
{
gdb_sVolume *vp;
......@@ -3389,10 +3596,13 @@ gdh_VolumeIdToName(
return rsts;
}
/**
* @brief Get info for a volume.
*/
pwr_tStatus
gdh_GetVolumeInfo(
pwr_tVid vid,
gdh_sVolumeInfo *info
pwr_tVid vid, /**< Volume identity */
gdh_sVolumeInfo *info /**< Pointer to info area, supplied by the user */
)
{
gdb_sVolume *vp;
......@@ -3624,11 +3834,27 @@ gdh_GetAttrRefAdef(
return rsts;
}
/**
* @brief Get the superclass for a class.
*
* If the class for a remote object is examined, the class might not be loded on the local,
* and in this case the object itself has to supplied in the oid argument. For local classes,
* this argument can be set to pwr_cNOid.
*
* Example
* @code
* pwr_tStatus sts;
* pwr_tCid supercid;
*
* sts = gdh_GetSuperClass( cid, &supercid, pwr_cNOid);
* @endcode
* @return pwr_tStatus
*/
pwr_tStatus
gdh_GetSuperClass(
pwr_tCid cid,
pwr_tCid *supercid,
pwr_tObjid oid
pwr_tCid cid, /**< Class identity. */
pwr_tCid *supercid, /**< Received class identity for the super class. */
pwr_tObjid oid /**< Object id for remote object, normally pwr_cNOid */
)
{
gdb_sClass *cp;
......@@ -3675,8 +3901,22 @@ gdh_GetSuperClass(
return sts;
}
/**
* @brief Get definition information for an enumeration type.
*
* Returns a data stucture with the defined enumeration values and
* corresponding texts for an enumeration type. The datastructure is
* of type gdh_sValueDef, with an array of pointers to the values
* definition objects of the enumeration values.
*
* The data structure should be freed with a free() call.
*/
pwr_tStatus
gdh_GetEnumValueDef( pwr_tTid tid, gdh_sValueDef **vd, int *rows)
gdh_GetEnumValueDef(
pwr_tTid tid, /**< Enumeration type id */
gdh_sValueDef **vd, /**< Recieves a pointer to the data structure. */
int *rows /**< Number defined enum values */
)
{
gdb_sObject *top;
gdb_sObject *vop;
......@@ -3743,8 +3983,22 @@ gdh_GetEnumValueDef( pwr_tTid tid, gdh_sValueDef **vd, int *rows)
return sts;
}
/**
* @brief Get definition information for a mask type.
*
* Returns a data stucture with the defined bit values and
* corresponding texts for a mask type. The datastructure is
* of type gdh_sBitDef, which contains an array with
* ponters to the but definition objects for the bits.
*
* The data structure should be freed with a free() call.
*/
pwr_tStatus
gdh_GetMaskBitDef( pwr_tTid tid, gdh_sBitDef **bd, int *rows)
gdh_GetMaskBitDef(
pwr_tTid tid, /**< Type identity for mask. */
gdh_sBitDef **bd, /**< Receives a pointer to the data structure. */
int *rows /**< Number of defined bit values. */
)
{
gdb_sObject *top;
gdb_sObject *bop;
......@@ -3810,8 +4064,14 @@ gdh_GetMaskBitDef( pwr_tTid tid, gdh_sBitDef **bd, int *rows)
return sts;
}
pwr_tStatus gdh_ArefDisabled( pwr_sAttrRef *arp,
pwr_tDisableAttr *disabled)
/**
* @brief Check if an attribute is disabled.
* @return pwr_tStatus
*/
pwr_tStatus gdh_ArefDisabled(
pwr_sAttrRef *arp, /**< Attribute reference */
pwr_tDisableAttr *disabled /**< Recives 1 if disabled else 0 */
)
{
pwr_tStatus sts;
pwr_sAttrRef daref;
......@@ -3920,7 +4180,19 @@ static pwr_tStatus gdh_FWriteObjectR( FILE *fp, char *ap, char *aname, pwr_tAttr
return GDH__SUCCESS;
}
pwr_tStatus gdh_FWriteObject( char *filename, pwr_tAttrRef *arp)
/**
* @brief Write the content of an object to textfile.
*
* The file can later be read and the attribute values inserted in the
* object or in another object of the same class with the function
* gdh_FReadObject.
* @see gdh_FReadObject
* @return pwr_tStatus
*/
pwr_tStatus gdh_FWriteObject(
char *filename, /**< File specification */
pwr_tAttrRef *arp /**< Attribute reference to object */
)
{
pwr_tFileName fname;
FILE *fp;
......@@ -3959,7 +4231,21 @@ pwr_tStatus gdh_FWriteObject( char *filename, pwr_tAttrRef *arp)
return sts;
}
pwr_tStatus gdh_FReadObject( char *filename, pwr_tAttrRef *arp)
/**
* @brief Read a textfile into an object.
*
* Reads a textfile, created by gdh_FWriteObject, and inserts the values
* into the specified object.
*
* The file has to be generated from the same object or from an object of the
* same class.
* @see gdh_FWriteObject
* @return pwr_tStatus
*/
pwr_tStatus gdh_FReadObject(
char *filename, /**< File specification */
pwr_tAttrRef *arp /**< Attribute reference for object */
)
{
pwr_tFileName fname;
FILE *fp;
......@@ -4040,11 +4326,18 @@ pwr_tStatus gdh_FReadObject( char *filename, pwr_tAttrRef *arp)
return sts;
}
//
// Convert attribute value to string
//
pwr_tStatus gdh_AttrValueToString( pwr_eType type_id, pwr_tTid tid, void *value_ptr,
char *str, int size, int *len, char *format)
/**
* @brief Convert a string to attribute value.
*/
pwr_tStatus gdh_AttrValueToString(
pwr_eType type_id, /**< Attribute type */
pwr_tTid tid, /**< Attribute type identity */
void *value_ptr, /**< Pointer to attribute value */
char *str, /**< String buffer */
int size, /**< Size of string buffer */
int *len, /**< Receives the string length */
char *format /**< Format for conversion in printf syntax */
)
{
int sts;
......@@ -4334,11 +4627,16 @@ pwr_tStatus gdh_AttrValueToString( pwr_eType type_id, pwr_tTid tid, void *value_
return GDH__SUCCESS;
}
//
// Convert attribute string to value
//
pwr_tStatus gdh_AttrStringToValue( int type_id, char *value_str,
void *buffer_ptr, int buff_size, int attr_size)
/**
* @brief Convert an attribute string to value
*/
pwr_tStatus gdh_AttrStringToValue(
int type_id, /**< Attribute type */
char *value_str, /**< String value */
void *buffer_ptr, /**< Value buffer */
int buff_size, /**< Size of value buffer */
int attr_size /**< Attribute size, used for String and Text attributes */
)
{
int sts;
......@@ -4583,7 +4881,15 @@ pwr_tStatus gdh_SetObjectReadOnly( pwr_tOid oid)
return sts;
}
pwr_tStatus gdh_GetSecurityInfo( pwr_sSecurity *security)
/**
* @brief Get security information
*
* Returns the content of the $Securiy object of the current node.
* @return pwr_tStatus
*/
pwr_tStatus gdh_GetSecurityInfo(
pwr_sSecurity *security /**< Pointer to buffer supplied by the user */
)
{
pwr_tStatus sts;
pwr_tAttrRef aref;
......
......@@ -53,7 +53,7 @@ typedef pwr_tSubid SUBID;
typedef pwr_tDlid gdh_tDlid;
typedef pwr_tDlid DLID;
/** @defgroup DS Data Structures
/** @defgroup DS Gdh Data Structures
* @ingroup GDH
* @{
*/
......@@ -158,84 +158,102 @@ typedef struct {
/** @} */
/**
* @defgroup FC Function Calls
* @defgroup GDHFC Gdh Functions
* @ingroup GDH
* @{
*/
/**
* @defgroup OMR Object manupilation routines
* @ingroup FC
* @{
*/
#define gdh_ClassNameToNumber gdh_ClassNameToId
pwr_tStatus
gdh_CreateObject (
char *objectName,
pwr_tClassId classid,
unsigned int sizeOfObjectData,
pwr_tObjid *objectId,
pwr_tObjid internal1,
pwr_tBitMask internal2,
pwr_tObjid internal3
gdh_ArefANameToAref (
pwr_sAttrRef *arp,
const char *aname,
pwr_sAttrRef *oarp
);
pwr_tStatus
gdh_ArefDisabled(
pwr_sAttrRef *arp,
pwr_tDisableAttr *disabled
);
pwr_tStatus
gdh_DeleteObject (
pwr_tObjid objectId
gdh_AttrArefToObjectAref (
pwr_sAttrRef *arp,
pwr_sAttrRef *oarp
);
pwr_tStatus
gdh_RenameObject (
pwr_tObjid objectId,
char *newObjectName
gdh_AttrrefToName (
pwr_sAttrRef *attributeReference,
char *nameBuffer,
unsigned int sizeOfNameBuffer,
pwr_tBitMask nameType
);
pwr_tStatus
gdh_MoveObject (
pwr_tObjid objectId,
pwr_tObjid newParentId
gdh_AttrRefToPointer (
pwr_sAttrRef *arp,
void **p
);
/** @} */
/**
* @defgroup RWO Reading and writing object data
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_AttrStringToValue (
int type_id,
char *value_str,
void *buffer_ptr,
int buff_size,
int attr_size
);
pwr_tStatus
gdh_GetObjectInfo (
const char *name,
pwr_tAddress bufp,
pwr_tUInt32 bufsize
pwr_tStatus
gdh_AttrValueToString (
pwr_eType type_id,
pwr_tTid tid,
void *value_ptr,
char *str,
int size,
int *len,
char *format
);
pwr_tStatus
gdh_GetObjectInfoAttrref (
gdh_ClassAttrrefToAttr (
pwr_tClassId classid,
pwr_sAttrRef *attributeReference,
void *buffer,
unsigned int sizeOfBuffer
char *nameBuffer,
int sizeOfNameBuffer
);
pwr_tStatus
gdh_SetObjectInfo (
char *attributeName,
void *buffer,
unsigned int sizeOfBuffer
gdh_ClassAttrToAttrref (
pwr_tClassId classid,
const char *attributeName,
pwr_sAttrRef *attributeReference
);
pwr_tStatus
gdh_SetObjectInfoAttrref (
pwr_sAttrRef *attributeReference,
void *buffer,
unsigned int sizeOfBuffer
gdh_ClassNameToId (
const char *className,
pwr_tClassId *classid
);
pwr_tStatus
gdh_CreateObject (
char *objectName,
pwr_tClassId classid,
unsigned int sizeOfObjectData,
pwr_tObjid *objectId,
pwr_tObjid internal1,
pwr_tBitMask internal2,
pwr_tObjid internal3
);
pwr_tStatus
gdh_DeleteObject (
pwr_tObjid objectId
);
/** @} */
/**
* @defgroup DL Direct linking
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_DLRefObjectInfoAttrref (
......@@ -252,52 +270,50 @@ gdh_DLUnrefObjectInfo (
void
gdh_DLUnrefObjectInfoAll ();
/** @} */
/**
* @defgroup DLS Direct link/subscription
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_GetSubscriptionOldness (
pwr_tSubid subid,
pwr_tBoolean *isOld,
pwr_tTime *lastUpdate,
pwr_tStatus *lastStatus
pwr_tStatus
gdh_FReadObject (
char *filename,
pwr_tAttrRef *arp
);
pwr_tStatus
gdh_RefObjectInfo (
char *attributeName,
void **objectData,
pwr_tSubid *subid,
unsigned int sizeOfObjectData
pwr_tStatus
gdh_FWriteObject (
char *filename,
pwr_tAttrRef *arp
);
pwr_tStatus
gdh_UnrefObjectInfo (
pwr_tSubid subid
gdh_GetAlarmInfo (
pwr_tObjid object,
pwr_tUInt32 *alarmLevel,
pwr_tUInt32 *maxAlarmLevel,
pwr_tUInt32 *alarmBlockLevel,
pwr_tUInt32 *maxAlarmBlockLevel,
pwr_tUInt32 *alarmVisibility
);
pwr_tStatus
gdh_UnrefObjectInfoAll ();
pwr_tStatus
gdh_GetRootList (
pwr_tObjid *object
gdh_GetAttributeCharAttrref (
pwr_sAttrRef *attributeReference,
pwr_tTypeId *attributeType,
unsigned int *attributeSize,
unsigned int *attributeOffset,
unsigned int *attributeDimension
);
pwr_tStatus
gdh_GetParent (
pwr_tObjid object,
pwr_tObjid *parent
gdh_GetAttributeCharacteristics (
char *name,
pwr_tTypeId *tid,
pwr_tUInt32 *size,
pwr_tUInt32 *offs,
pwr_tUInt32 *elem
);
pwr_tStatus
gdh_GetLocalParent (
pwr_tObjid object,
pwr_tObjid *parent
gdh_GetAttrRefTid (
pwr_sAttrRef *arp,
pwr_tTid *tid
);
pwr_tStatus
......@@ -307,402 +323,382 @@ gdh_GetChild (
);
pwr_tStatus
gdh_GetNextSibling (
pwr_tObjid object,
pwr_tObjid *nextSibling
gdh_GetClassList (
pwr_tClassId classid,
pwr_tObjid *object
);
pwr_tStatus
gdh_GetPreviousSibling (
pwr_tObjid object,
pwr_tObjid *previousSibling
gdh_GetClassListAttrRef (
pwr_tClassId cid,
pwr_sAttrRef *arp
);
pwr_tStatus
gdh_RefObjectInfoList (
unsigned int nEntry,
gdh_sObjRef *objectReference,
pwr_tSubid *subid
gdh_GetDynamicAttrSize(
pwr_tObjid oid,
char *name,
pwr_tUInt32 *size
);
/** @} */
/**
* @defgroup SUB Subscription
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_SetSubscriptionDefaults (
pwr_tInt32 defaultUpdateTime,
pwr_tInt32 defaultTimeOut
gdh_GetEnumValueDef(
pwr_tTid tid,
gdh_sValueDef **vd,
int *rows
);
pwr_tStatus
gdh_SubRefObjectInfoAttrref (
pwr_sAttrRef *attributeReference,
pwr_tSubid *subid
gdh_GetLocalParent (
pwr_tObjid object,
pwr_tObjid *parent
);
pwr_tStatus
gdh_SubRefObjectInfoName (
char *attributeName,
pwr_tSubid *subid
gdh_GetMaskBitDef(
pwr_tTid tid,
gdh_sBitDef **bd,
int *rows
);
pwr_tStatus
gdh_SubUnrefObjectInfoList (
unsigned int nEntry,
pwr_tSubid *subid
gdh_GetNextAttrRef (
pwr_tClassId cid,
pwr_sAttrRef *arp,
pwr_sAttrRef *new_arp
);
pwr_tStatus
gdh_SubUnrefObjectInfo (
pwr_tSubid subid
gdh_GetNextObject (
pwr_tObjid object,
pwr_tObjid *nextObject
);
void
gdh_SubUnrefObjectInfoAll ();
pwr_tStatus
gdh_SubData (
pwr_tSubid subid,
void *buffer,
unsigned int sizeOfBuffer
gdh_GetNextObjectAttrRef (
pwr_tClassId cid, /**< The class identity. */
pwr_sAttrRef *arp, /**< The attribute reference. */
pwr_sAttrRef *new_arp /**< Receives the attribute reference */
);
pwr_tStatus
gdh_SubSize (
pwr_tSubid subid,
unsigned int *size
gdh_GetNextSibling (
pwr_tObjid object,
pwr_tObjid *nextSibling
);
pwr_tStatus
gdh_SubAssociateBuffer (
pwr_tSubid subid,
void **buffer,
unsigned int sizeOfBuffer
gdh_GetNextVolume(
pwr_tVid pvid,
pwr_tVid *vid
);
pwr_tStatus
gdh_SubRefObjectInfoList (
unsigned int entryCount,
void *object[],
pwr_tBoolean isAttrref[],
pwr_tSubid subid[]
gdh_GetNodeIndex (
pwr_tNodeId *nodeIndex
);
/** @} */
/**
* @defgroup CR Class routines
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_GetNodeInfo (
pwr_tNodeId nodidx,
gdh_sNodeInfo *ip
);
pwr_tStatus
gdh_GetClassList (
pwr_tClassId classid,
gdh_GetNodeObject (
pwr_tNodeId nodeIndex,
pwr_tObjid *object
);
pwr_tStatus
gdh_GetNextObject (
gdh_GetObjectClass (
pwr_tObjid object,
pwr_tObjid *nextObject
pwr_tClassId *classid
);
pwr_tStatus
gdh_GetPreviousObject (
pwr_tObjid object,
pwr_tObjid *previousObject
gdh_GetObjectClassList (
pwr_tCid cid, /**< The class identity. */
pwr_tOid oid, /**< Host object. */
pwr_sAttrRef *arp /**< Receives the attribute reference. */
);
pwr_tStatus
gdh_GetClassListAttrRef (
pwr_tClassId cid,
pwr_sAttrRef *arp
gdh_GetObjectDLCount (
pwr_tObjid object,
pwr_tUInt32 *count
);
pwr_tStatus
gdh_GetNextAttrRef (
pwr_tClassId cid,
pwr_sAttrRef *arp,
pwr_sAttrRef *new_arp
gdh_GetObjectInfo (
const char *name,
pwr_tAddress bufp,
pwr_tUInt32 bufsize
);
pwr_tStatus
gdh_GetObjectClassList (
pwr_tCid cid, /**< The class identity. */
pwr_tOid oid, /**< Host object. */
pwr_sAttrRef *arp /**< Receives the attribute reference. */
gdh_GetObjectInfoAttrref (
pwr_sAttrRef *attributeReference,
void *buffer,
unsigned int sizeOfBuffer
);
pwr_tStatus
gdh_GetNextObjectAttrRef (
pwr_tClassId cid, /**< The class identity. */
pwr_sAttrRef *arp, /**< The attribute reference. */
pwr_sAttrRef *new_arp /**< Receives the attribute reference */
gdh_GetObjectLocation (
pwr_tObjid object,
pwr_tBoolean *isLocal
);
#define gdh_ClassNameToNumber gdh_ClassNameToId
pwr_tStatus
gdh_ClassNameToId (
const char *className,
pwr_tClassId *classid
gdh_GetObjectNodeIndex (
pwr_tObjid object,
pwr_tNodeId *nodeIndex
);
/** @} */
/**
* @defgroup TBDOR Translating between different object representation
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_GetObjectSize (
pwr_tObjid oid,
pwr_tUInt32 *size
);
pwr_tStatus
gdh_ObjidToName (
pwr_tObjid oid,
char *namebuf,
pwr_tUInt32 size,
pwr_tBitMask nametype
gdh_GetParent (
pwr_tObjid object,
pwr_tObjid *parent
);
pwr_tStatus
gdh_ObjidToPointer (
gdh_GetPreviousObject (
pwr_tObjid object,
void **objectData
pwr_tObjid *previousObject
);
pwr_tStatus
gdh_MountObjidToPointer (
gdh_GetPreviousSibling (
pwr_tObjid object,
void **objectData
pwr_tObjid *previousSibling
);
pwr_tStatus
gdh_AttrRefToPointer (
pwr_sAttrRef *arp,
void **p
gdh_GetRootList (
pwr_tObjid *object
);
pwr_tStatus
gdh_GetSecurityInfo(
pwr_sSecurity *security
);
pwr_tStatus
gdh_NameToObjid (
const char *objectName,
pwr_tObjid *objid
gdh_GetVolumeInfo(
pwr_tVid vid,
gdh_sVolumeInfo *info
);
pwr_tStatus
gdh_NameToPointer (
const char *objectName,
void **objectData
gdh_GetVolumeList(
pwr_tVid *vid
);
/** @} */
/**
* @defgroup OP Object properties
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_SearchFile (
pwr_tOid oid,
char *dir,
char *pattern,
pwr_tString40 *filelist[],
int *filecnt
);
pwr_tStatus
gdh_GetObjectSize (
pwr_tObjid oid,
pwr_tUInt32 *size
gdh_GetSubscriptionOldness (
pwr_tSubid subid,
pwr_tBoolean *isOld,
pwr_tTime *lastUpdate,
pwr_tStatus *lastStatus
);
pwr_tStatus
gdh_GetDynamicAttrSize(
pwr_tObjid oid,
char *name,
pwr_tUInt32 *size
pwr_tStatus
gdh_GetSuperClass(
pwr_tCid cid,
pwr_tCid *supercid,
pwr_tObjid oid
);
pwr_tStatus gdh_Init (
const char *name
);
pwr_tStatus
gdh_GetObjectClass (
gdh_MountObjidToPointer (
pwr_tObjid object,
pwr_tClassId *classid
void **objectData
);
pwr_tStatus
gdh_GetAttrRefTid (
pwr_sAttrRef *arp,
pwr_tTid *tid
gdh_MoveObject (
pwr_tObjid objectId,
pwr_tObjid newParentId
);
pwr_tStatus
gdh_GetObjectLocation (
pwr_tObjid object,
pwr_tBoolean *isLocal
gdh_NameToAttrref (
pwr_tObjid parent,
const char *attributeName,
pwr_sAttrRef *attributeReference
);
pwr_tStatus
gdh_GetObjectDLCount (
pwr_tObjid object,
pwr_tUInt32 *count
gdh_NameToObjid (
const char *objectName,
pwr_tObjid *objid
);
pwr_tStatus
gdh_SearchFile (
pwr_tOid oid,
char *dir,
char *pattern,
pwr_tString40 *filelist[],
int *filecnt
pwr_tStatus
gdh_NameToPointer (
const char *objectName,
void **objectData
);
/** @} */
pwr_tStatus
gdh_NethandlerRunning ();
/**
* @defgroup Node Node information
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_ObjidToName (
pwr_tObjid oid,
char *namebuf,
pwr_tUInt32 size,
pwr_tBitMask nametype
);
pwr_tStatus
gdh_GetObjectNodeIndex (
gdh_ObjidToPointer (
pwr_tObjid object,
pwr_tNodeId *nodeIndex
void **objectData
);
pwr_tStatus
gdh_GetNodeIndex (
pwr_tNodeId *nodeIndex
gdh_RefObjectInfo (
char *attributeName,
void **objectData,
pwr_tSubid *subid,
unsigned int sizeOfObjectData
);
pwr_tStatus
gdh_GetNodeObject (
pwr_tNodeId nodeIndex,
pwr_tObjid *object
gdh_RefObjectInfoList (
unsigned int nEntry,
gdh_sObjRef *objectReference,
pwr_tSubid *subid
);
pwr_tStatus
gdh_GetNodeInfo (
pwr_tNodeId nodidx,
gdh_sNodeInfo *ip
gdh_RenameObject (
pwr_tObjid objectId,
char *newObjectName
);
/** @} */
/**
* @defgroup AR Attribute routines
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_SetAlarmBlockLevel (
pwr_tObjid object,
pwr_tUInt32 alarmBlockLevel
);
pwr_tStatus
gdh_GetAttributeCharacteristics (
char *name,
pwr_tTypeId *tid,
pwr_tUInt32 *size,
pwr_tUInt32 *offs,
pwr_tUInt32 *elem
gdh_SetAlarmLevel (
pwr_tObjid object,
pwr_tUInt32 alarmLevel
);
pwr_tStatus
gdh_NameToAttrref (
pwr_tObjid parent,
const char *attributeName,
pwr_sAttrRef *attributeReference
gdh_SetObjectInfo (
char *attributeName,
void *buffer,
unsigned int sizeOfBuffer
);
pwr_tStatus
gdh_AttrrefToName (
gdh_SetObjectInfoAttrref (
pwr_sAttrRef *attributeReference,
char *nameBuffer,
unsigned int sizeOfNameBuffer,
pwr_tBitMask nameType
void *buffer,
unsigned int sizeOfBuffer
);
pwr_tStatus
gdh_ClassAttrToAttrref (
pwr_tClassId classid,
const char *attributeName,
pwr_sAttrRef *attributeReference
gdh_SubAssociateBuffer (
pwr_tSubid subid,
void **buffer,
unsigned int sizeOfBuffer
);
pwr_tStatus
gdh_ClassAttrrefToAttr (
pwr_tClassId classid,
pwr_sAttrRef *attributeReference,
char *nameBuffer,
int sizeOfNameBuffer
gdh_SubData (
pwr_tSubid subid,
void *buffer,
unsigned int sizeOfBuffer
);
pwr_tStatus
gdh_GetAttributeCharAttrref (
gdh_SubRefObjectInfoAttrref (
pwr_sAttrRef *attributeReference,
pwr_tTypeId *attributeType,
unsigned int *attributeSize,
unsigned int *attributeOffset,
unsigned int *attributeDimension
pwr_tSubid *subid
);
pwr_tStatus
gdh_AttrArefToObjectAref (
pwr_sAttrRef *arp,
pwr_sAttrRef *oarp
gdh_SubRefObjectInfoList (
unsigned int entryCount,
void *object[],
pwr_tBoolean isAttrref[],
pwr_tSubid subid[]
);
pwr_tStatus
gdh_ArefANameToAref (
pwr_sAttrRef *arp,
const char *aname,
pwr_sAttrRef *oarp
gdh_SubRefObjectInfoName (
char *attributeName,
pwr_tSubid *subid
);
/** @} */
/**
* @defgroup OAS Object alarm status
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_GetAlarmInfo (
pwr_tObjid object,
pwr_tUInt32 *alarmLevel,
pwr_tUInt32 *maxAlarmLevel,
pwr_tUInt32 *alarmBlockLevel,
pwr_tUInt32 *maxAlarmBlockLevel,
pwr_tUInt32 *alarmVisibility
gdh_SubSize (
pwr_tSubid subid,
unsigned int *size
);
pwr_tStatus
gdh_SetAlarmLevel (
pwr_tObjid object,
pwr_tUInt32 alarmLevel
gdh_SetSubscriptionDefaults (
pwr_tInt32 defaultUpdateTime,
pwr_tInt32 defaultTimeOut
);
pwr_tStatus
gdh_SetAlarmBlockLevel (
pwr_tObjid object,
pwr_tUInt32 alarmBlockLevel
gdh_SubUnrefObjectInfo (
pwr_tSubid subid
);
/** @} */
void
gdh_SubUnrefObjectInfoAll ();
/**
* @defgroup INIT Initializing GDH
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_SubUnrefObjectInfoList (
unsigned int nEntry,
pwr_tSubid *subid
);
pwr_tStatus gdh_Init (
const char *name
pwr_tStatus
gdh_UnrefObjectInfo (
pwr_tSubid subid
);
/** @} */
pwr_tStatus
gdh_UnrefObjectInfoAll ();
/**
* @defgroup MI Miscellaneous
* @ingroup FC
* @{
*/
pwr_tStatus
gdh_NethandlerRunning ();
gdh_VolumeIdToName(
pwr_tVid vid,
char *name,
int size
);
/** @} */
......@@ -751,31 +747,6 @@ gdh_TranslateRtdbPointer (
pwr_tUInt32 rtdbReference
);
pwr_tStatus
gdh_GetVolumeList(
pwr_tVid *vid
);
pwr_tStatus
gdh_GetNextVolume(
pwr_tVid pvid,
pwr_tVid *vid
);
pwr_tStatus
gdh_VolumeIdToName(
pwr_tVid vid,
char *name,
int size
);
pwr_tStatus
gdh_GetVolumeInfo(
pwr_tVid vid,
gdh_sVolumeInfo *info
);
pwr_tStatus
gdh_GetObjectBodyDef(
pwr_tCid cid,
......@@ -797,76 +768,12 @@ gdh_GetAttrRefAdef(
gdh_sAttrDef *attrdef
);
pwr_tStatus
gdh_GetSuperClass(
pwr_tCid cid,
pwr_tCid *supercid,
pwr_tObjid oid
);
pwr_tStatus
gdh_GetEnumValueDef(
pwr_tTid tid,
gdh_sValueDef **vd,
int *rows
);
pwr_tStatus
gdh_GetMaskBitDef(
pwr_tTid tid,
gdh_sBitDef **bd,
int *rows
);
pwr_tStatus
gdh_ArefDisabled(
pwr_sAttrRef *arp,
pwr_tDisableAttr *disabled
);
pwr_tStatus
gdh_FWriteObject (
char *filename,
pwr_tAttrRef *arp
);
pwr_tStatus
gdh_FReadObject (
char *filename,
pwr_tAttrRef *arp
);
pwr_tStatus
gdh_AttrValueToString (
pwr_eType type_id,
pwr_tTid tid,
void *value_ptr,
char *str,
int size,
int *len,
char *format
);
pwr_tStatus
gdh_AttrStringToValue (
int type_id,
char *value_str,
void *buffer_ptr,
int buff_size,
int attr_size
);
pwr_tStatus
gdh_SetObjectReadOnly(
pwr_tOid oid
);
pwr_tStatus
gdh_GetSecurityInfo(
pwr_sSecurity *security
);
/* Undocumented routines. For internal use only. */
/* Undocumented functions. For internal use only. */
pwr_tStatus
gdh_MDAttribute (
......@@ -885,7 +792,6 @@ gdh_SetCache (
pwr_tUInt32 trimmed_level
);
/** @} */
/** @} */
#if defined __cplusplus
......
......@@ -46,7 +46,7 @@ extern "C" {
#endif
/** @defgroup MSGH_DS Data Structures
/** @defgroup MSGH_DS MhAppl Data Structures
* @ingroup MSGH
* @{
*/
......@@ -117,14 +117,10 @@ struct mhs_ApplMessage {
/**@}*/
/** @defgroup MSGH_FC Function Calls
/** @defgroup MSGH_FC MhAppl Functions
* @ingroup MSGH
* @{
*/
/** @defgroup MSG_AR Application routines
* @ingroup MSGH_FC
* @{
*/
pwr_tStatus mh_ApplCancel (
pwr_tUInt32 id,
......@@ -175,7 +171,6 @@ pwr_tStatus mh_ApplGetMsgInfo (
mh_sApplMessage *Message
);
/**@}*/
/**@}*/
/**@}*/
......
......@@ -82,7 +82,7 @@ extern "C"
#define qcom_cInacp (1<<31 | 106)
#define qcom_cIini (1<<31 | 107)
/** @defgroup QCOM_DS Data Structures
/** @defgroup QCOM_DS Qcom Data Structures
* @ingroup QCOM
* @{
*/
......@@ -244,7 +244,7 @@ typedef struct {
/** @} */
/** @defgroup QCOM_FC Function Calls
/** @defgroup QCOM_FC Qcom Functions
* @ingroup QCOM
* @{
*/
......
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