Files
pcas/src/gdd/gddAppDefs.cc
Andrew Johnson fbda9f3280 RCS keyword updates for Bazaar
Replaced $Id$ and $Header$ keywords with $Revision-Id$
Deleted $Log$ keywords and any log messages
2010-10-05 14:27:37 -05:00

269 lines
12 KiB
C++

/*************************************************************************\
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
// Author: Jim Kowalkowski
// Date: 2/96
//
// $Revision-Id$
//
#define epicsExportSharedSymbols
#include "gddAppTable.h"
// useless utility function
gddApplicationTypeTable* gddGenerateApplicationTypeTable(long x/*=(1<<13)*/)
{
gddApplicationTypeTable* tt = new gddApplicationTypeTable((unsigned int)x);
return tt;
}
void gddApplicationTypeTable::GenerateTypes(void)
{
gddScalar* add_units = new gddScalar(0,aitEnumString);
// One attempt at building a menu using aitString, which is not so
// good.
// gddAtomic* add_enum = new gddAtomic(0,aitEnumString,1,16);
// aitString add_enum_buf[16];
// add_enum->putRef(add_enum_buf);
// Just describe the menu - allow the block of choiced to be
// referenced in.
// gddAtomic* add_enum = new gddAtomic(0,aitEnumFixedString,1,16);
// ----------------------------------------------------------------
// register simple types
// should I allow a dd retrieved through the tag table to be adjusted
// even though it is flattened? What if an array needs to change size
// or type in a flattened dd?
// value - filled by user no dd to register
// units - variable length of array of chars
// not really required attributes - they are contained in DDs
registerApplicationType(GDD_NAME_STATUS);
registerApplicationType(GDD_NAME_SEVERITY);
registerApplicationType(GDD_NAME_TIME_STAMP);
registerApplicationType(GDD_NAME_PV_NAME);
registerApplicationType(GDD_NAME_CLASS);
// required attributes
int type_prec=registerApplicationType(GDD_NAME_PRECISION);
int type_ghigh=registerApplicationType(GDD_NAME_GRAPH_HIGH);
int type_glow=registerApplicationType(GDD_NAME_GRAPH_LOW);
int type_chigh=registerApplicationType(GDD_NAME_CONTROL_HIGH);
int type_clow=registerApplicationType(GDD_NAME_CONTROL_LOW);
int type_ahigh=registerApplicationType(GDD_NAME_ALARM_HIGH);
int type_alow=registerApplicationType(GDD_NAME_ALARM_LOW);
int type_awhigh=registerApplicationType(GDD_NAME_ALARM_WARN_HIGH);
int type_awlow=registerApplicationType(GDD_NAME_ALARM_WARN_LOW);
int type_maxele=registerApplicationType(GDD_NAME_MAX_ELEMENTS);
int type_value=registerApplicationType(GDD_NAME_VALUE);
int type_menu=registerApplicationType(GDD_NAME_ENUM);
int type_units=registerApplicationTypeWithProto(GDD_NAME_UNITS,add_units);
int type_ackt=registerApplicationType(GDD_NAME_ACKT);
int type_acks=registerApplicationType(GDD_NAME_ACKS);
// old menu method
// int type_menu=registerApplicationType(GDD_NAME_ENUM);
// ----------------------------------------------------------------
// register container types - not as easy
// container of all PV attributes
gddContainer* cdd_attr=new gddContainer(1);
cdd_attr->insert(getDD(type_prec));
cdd_attr->insert(getDD(type_ghigh));
cdd_attr->insert(getDD(type_glow));
cdd_attr->insert(getDD(type_chigh));
cdd_attr->insert(getDD(type_clow));
cdd_attr->insert(getDD(type_ahigh));
cdd_attr->insert(getDD(type_alow));
cdd_attr->insert(getDD(type_awhigh));
cdd_attr->insert(getDD(type_awlow));
cdd_attr->insert(getDD(type_units));
cdd_attr->insert(getDD(type_maxele));
registerApplicationTypeWithProto(GDD_NAME_ATTRIBUTES,cdd_attr);
// container of everything about a PV
gddContainer* cdd_all=new gddContainer(1);
cdd_all->insert(getDD(type_prec));
cdd_all->insert(getDD(type_ghigh));
cdd_all->insert(getDD(type_glow));
cdd_all->insert(getDD(type_chigh));
cdd_all->insert(getDD(type_clow));
cdd_all->insert(getDD(type_ahigh));
cdd_all->insert(getDD(type_alow));
cdd_all->insert(getDD(type_awhigh));
cdd_all->insert(getDD(type_awlow));
cdd_all->insert(getDD(type_units));
cdd_all->insert(getDD(type_value));
registerApplicationTypeWithProto(GDD_NAME_ALL,cdd_all);
// ------------- generate required dbr containers -----------------
// DBR_GR_SHORT
gddContainer* cdd_gr_short=new gddContainer(0);
cdd_gr_short->insert(new gddScalar(type_value,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_ghigh,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_glow,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_ahigh,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_alow,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_awhigh,aitEnumInt16));
cdd_gr_short->insert(new gddScalar(type_awlow,aitEnumInt16));
cdd_gr_short->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_gr_short",cdd_gr_short);
// DBR_GR_FLOAT
gddContainer* cdd_gr_float=new gddContainer(0);
cdd_gr_float->insert(new gddScalar(type_value,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_prec,aitEnumInt16));
cdd_gr_float->insert(new gddScalar(type_ghigh,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_glow,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_ahigh,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_alow,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_awhigh,aitEnumFloat32));
cdd_gr_float->insert(new gddScalar(type_awlow,aitEnumFloat32));
cdd_gr_float->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_gr_float",cdd_gr_float);
// DBR_GR_ENUM
gddContainer* cdd_gr_enum=new gddContainer(0);
// old: cdd_gr_enum->insert(new gddAtomic(type_menu,aitEnumFixedString,1));
cdd_gr_enum->insert(getDD(type_menu));
cdd_gr_enum->insert(new gddScalar(type_value,aitEnumEnum16));
registerApplicationTypeWithProto("dbr_gr_enum",cdd_gr_enum);
// DBR_GR_CHAR
gddContainer* cdd_gr_char=new gddContainer(0);
cdd_gr_char->insert(new gddScalar(type_value,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_ghigh,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_glow,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_ahigh,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_alow,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_awhigh,aitEnumInt8));
cdd_gr_char->insert(new gddScalar(type_awlow,aitEnumInt8));
cdd_gr_char->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_gr_char",cdd_gr_char);
// DBR_GR_LONG
gddContainer* cdd_gr_long=new gddContainer(0);
cdd_gr_long->insert(new gddScalar(type_value,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_ghigh,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_glow,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_ahigh,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_alow,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_awhigh,aitEnumInt32));
cdd_gr_long->insert(new gddScalar(type_awlow,aitEnumInt32));
cdd_gr_long->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_gr_long",cdd_gr_long);
// DBR_GR_DOUBLE
gddContainer* cdd_gr_double=new gddContainer(0);
cdd_gr_double->insert(new gddScalar(type_value,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_prec,aitEnumInt16));
cdd_gr_double->insert(new gddScalar(type_ghigh,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_glow,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_ahigh,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_alow,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_awhigh,aitEnumFloat64));
cdd_gr_double->insert(new gddScalar(type_awlow,aitEnumFloat64));
cdd_gr_double->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_gr_double",cdd_gr_double);
// DBR_CTRL_SHORT
gddContainer* cdd_ctrl_short=new gddContainer(0);
cdd_ctrl_short->insert(new gddScalar(type_value,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_ghigh,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_glow,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_chigh,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_clow,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_ahigh,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_alow,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_awhigh,aitEnumInt16));
cdd_ctrl_short->insert(new gddScalar(type_awlow,aitEnumInt16));
cdd_ctrl_short->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_ctrl_short",cdd_ctrl_short);
// DBR_CTRL_FLOAT
gddContainer* cdd_ctrl_float=new gddContainer(0);
cdd_ctrl_float->insert(new gddScalar(type_value,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_prec,aitEnumInt16));
cdd_ctrl_float->insert(new gddScalar(type_ghigh,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_glow,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_chigh,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_clow,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_ahigh,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_alow,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_awhigh,aitEnumFloat32));
cdd_ctrl_float->insert(new gddScalar(type_awlow,aitEnumFloat32));
cdd_ctrl_float->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_ctrl_float",cdd_ctrl_float);
// DBR_CTRL_ENUM
gddContainer* cdd_ctrl_enum=new gddContainer(0);
//old:cdd_ctrl_enum->insert(new gddAtomic(type_menu,aitEnumFixedString,1));
cdd_ctrl_enum->insert(getDD(type_menu));
cdd_ctrl_enum->insert(new gddScalar(type_value,aitEnumEnum16));
registerApplicationTypeWithProto("dbr_ctrl_enum",cdd_ctrl_enum);
// DBR_CTRL_CHAR
gddContainer* cdd_ctrl_char=new gddContainer(0);
cdd_ctrl_char->insert(new gddScalar(type_value,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_ghigh,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_glow,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_chigh,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_clow,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_ahigh,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_alow,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_awhigh,aitEnumInt8));
cdd_ctrl_char->insert(new gddScalar(type_awlow,aitEnumInt8));
cdd_ctrl_char->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_ctrl_char",cdd_ctrl_char);
// DBR_CTRL_LONG
gddContainer* cdd_ctrl_long=new gddContainer(0);
cdd_ctrl_long->insert(new gddScalar(type_value,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_ghigh,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_glow,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_chigh,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_clow,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_ahigh,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_alow,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_awhigh,aitEnumInt32));
cdd_ctrl_long->insert(new gddScalar(type_awlow,aitEnumInt32));
cdd_ctrl_long->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_ctrl_long",cdd_ctrl_long);
// DBR_CTRL_DOUBLE
gddContainer* cdd_ctrl_double=new gddContainer(0);
cdd_ctrl_double->insert(new gddScalar(type_value,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_prec,aitEnumInt16));
cdd_ctrl_double->insert(new gddScalar(type_ghigh,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_glow,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_chigh,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_clow,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_ahigh,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_alow,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_awhigh,aitEnumFloat64));
cdd_ctrl_double->insert(new gddScalar(type_awlow,aitEnumFloat64));
cdd_ctrl_double->insert(getDD(type_units));
registerApplicationTypeWithProto("dbr_ctrl_double",cdd_ctrl_double);
// DBR_STSACK_STRING
gddContainer* cdd_stsack_string=new gddContainer(0);
cdd_stsack_string->insert(new gddScalar(type_value,aitEnumString));
cdd_stsack_string->insert(new gddScalar(type_acks,aitEnumUint16));
cdd_stsack_string->insert(new gddScalar(type_ackt,aitEnumUint16));
registerApplicationTypeWithProto("dbr_stsack_string",cdd_stsack_string);
}