Beispiel #1
0
pwr_tStatus EvEve::set_view(pwr_tOid view)
{
  pwr_tStatus sts;

  sts = ala->set_view( view);
  if ( ODD(sts)) {
    pwr_tString80 name;

    if ( cdh_ObjidIsNull( view)) {
      strcpy( name, "Event List");
    }
    else {
      pwr_tAttrRef name_ar, ar;

      ar = cdh_ObjidToAref( view);
      sts = gdh_ArefANameToAref( &ar, "Name", &name_ar);
      if (EVEN(sts)) return sts;

      sts = gdh_GetObjectInfoAttrref( &name_ar, name, sizeof(name));
      if (EVEN(sts)) return sts;
    }
    set_title_ala( name);
  }
  return sts;
}
Beispiel #2
0
int main (int argc, char **argv)
{
  pwr_tStatus sts;
  char *c;
  int cidopt = 0;
  pwr_tObjName cidstr;
  pwr_tAName astr;
  int i;

  if ( argc <= 1) {
    usage();
    exit(1);
  }

  sts = gdh_Init("rt_gdhget");
  if ( EVEN(sts)) {
    exit(sts);
  }

  for ( i = 1; i < argc; i++) {
    c = argv[i];
    if ( *c == '-') {
      c++;
      switch ( *c) {
      case 'h':
	usage();
	exit(0);
     
      case 'c':
	if ( argc <= i+1) {
	  usage();
	  exit(1);
	}
	strncpy( cidstr, argv[i+1], sizeof(cidstr));
	cidopt = 1;
	i++;
	break;
      }
    }
    else
      strcpy( astr, argv[i]);
  }
  
  if ( cidopt) {
    // Get the first object of class cidstr, and print the value of attribute 
    // astr in this object

    pwr_tCid cid;
    pwr_tOid oid;
    pwr_tAttrRef aref, aaref;
    pwr_tTid a_tid;
    unsigned int a_size, a_offs, a_dim;
    void *a_valp;
    char str[256];

    sts = gdh_ClassNameToId( cidstr, &cid);
    if ( EVEN(sts)) {
      exit(sts);
    }

    sts = gdh_GetClassList( cid, &oid);
    if ( EVEN(sts)) {
      exit(sts);
    }

    aref = cdh_ObjidToAref( oid);
    sts = gdh_ArefANameToAref( &aref, astr, &aaref);
    if ( EVEN(sts)) {
      exit(sts);
    }

    sts = gdh_GetAttributeCharAttrref( &aaref, &a_tid, &a_size, &a_offs, &a_dim);
    if ( EVEN(sts)) {
      exit(sts);
    }
    a_valp = calloc( 1, a_size);
    sts = gdh_GetObjectInfoAttrref( &aaref, a_valp, a_size);
    if ( EVEN(sts)) {
      free( a_valp);
      exit(sts);
    }
    
    sts = cdh_AttrValueToString( a_tid, a_valp, str, sizeof(str));
    if ( EVEN(sts)) {
      free( a_valp);
      exit(sts);
    }

    printf( "%s\n", str);
    free( a_valp);

    exit(0);

  }
  else {
    // Print the value of the attriute in astr

    pwr_tTypeId a_tid;
    pwr_tUInt32 a_size, a_offs, a_elem;
    void *a_valp;
    char str[256];
    
    sts = gdh_GetAttributeCharacteristics( astr,
					 &a_tid, &a_size, &a_offs, &a_elem);
    if ( EVEN(sts)) {
      exit(sts);
    }
    a_valp = calloc( 1, a_size);

    sts = gdh_GetObjectInfo( astr, a_valp, a_size);
    if ( EVEN(sts)) {
      free( a_valp);
      exit(sts);
    }
    
    sts = cdh_AttrValueToString( a_tid, a_valp, str, sizeof(str));
    if ( EVEN(sts)) {
      free( a_valp);
      exit(sts);
    }

    printf( "%s\n", str);
    free( a_valp);

    exit(0);
  }    
  exit(1);
}
static pwr_tStatus xtt_pb_dp_slave_load_modules( xtt_slave_sCtx *ctx)
{
  pwr_tOid oid;
  pwr_tCid cid;
  int found;
  pwr_tObjName name;
  pwr_tString40 module_name;
  int sts;
  pwr_tAttrRef maref, aaref;

  for ( sts = gdh_GetChild( ctx->aref.Objid, &oid);
	ODD(sts);
	sts = gdh_GetNextSibling( oid, &oid)) {

    // Check that this is a module
    sts = gdh_GetObjectClass( oid, &cid);
    if ( EVEN(sts)) return sts;

    found = 0;
    for ( int i = 0; ; i++) {
      if ( ctx->gsd->module_classlist[i].cid == 0)
	break;
      if ( ctx->gsd->module_classlist[i].cid == cid) {
	found = 1;
	break;
      }
    }
    if ( !found)
      // This is not a known module object
      continue;

    // Get name
    sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_object);
    if ( EVEN(sts)) return sts;

    maref = cdh_ObjidToAref( oid);

    // Get ModuleName attribute
    sts = gdh_ArefANameToAref( &maref, "ModuleName", &aaref);
    if ( EVEN(sts)) return sts;
      
    sts = gdh_GetObjectInfoAttrref( &aaref, module_name, sizeof(module_name));
    if ( EVEN(sts)) return sts;

    ctx->gsd->add_module_conf( cid, oid, name, module_name);
  }

  // Set address
  pwr_tUInt16 address;
  
  sts = gdh_ArefANameToAref( &ctx->aref, "SlaveAddress", &aaref);
  if ( EVEN(sts)) return sts;

  sts = gdh_GetObjectInfoAttrref( &aaref, &address, sizeof(address));
  if ( EVEN(sts)) return sts;

  ctx->gsd->address = address;

  // Set byte order
  pwr_tByteOrderingEnum byte_order;
  
  sts = gdh_ArefANameToAref( &ctx->aref, "ByteOrdering", &aaref);
  if ( EVEN(sts)) return sts;

  sts = gdh_GetObjectInfoAttrref( &aaref, &byte_order, sizeof(byte_order));
  if ( EVEN(sts)) return sts;

  ctx->gsd->byte_order = byte_order;

  // Set Ext_User_Prm_Data
  pwr_tUInt8 prm_user_data[256];
  pwr_tUInt16 prm_user_data_len;
  int len;
  
  sts = gdh_ArefANameToAref( &ctx->aref, "PrmUserData", &aaref);
  if ( EVEN(sts)) return sts;

  sts = gdh_GetObjectInfoAttrref( &aaref, prm_user_data, sizeof(prm_user_data));
  if ( EVEN(sts)) return sts;

  sts = gdh_ArefANameToAref( &ctx->aref, "PrmUserDataLen", &aaref);
  if ( EVEN(sts)) return sts;

  sts = gdh_GetObjectInfoAttrref( &aaref, &prm_user_data_len, sizeof(prm_user_data_len));
  if ( EVEN(sts)) return sts;

  len = prm_user_data_len;
  if ( len != 0) {
    sts = ctx->gsd->unpack_ext_user_prm_data( (char *)prm_user_data, len);
    if ( EVEN(sts)) return sts;
  }
  return 1;
}
pwr_tStatus xtt_pb_dp_slave_create_ctx( pwr_tAttrRef aref, void *editor_ctx, 
					xtt_slave_sCtx **ctxp)
{
  pwr_tAName name;
  pwr_tString80 gsdfile;
  int sts;
  pwr_tFileName fname;
  pwr_tCid cid;
  pwr_tOid oid;
  int found;
  int mc_cnt;
  int module_cnt;
  pwr_tAttrRef aaref;

  sts = gdh_ObjidToName( aref.Objid, 
			name, sizeof(name), cdh_mName_volumeStrict);
  if ( EVEN(sts)) return sts;

  sts = gdh_ArefANameToAref( &aref, "GSDFile", &aaref);
  if ( EVEN(sts)) return sts;

  sts = gdh_GetObjectInfoAttrref( &aaref, gsdfile, sizeof(gsdfile));
  if ( EVEN(sts)) return sts;
  if ( strcmp( gsdfile, "") == 0) {
    return PB__GSDATTR;
  }

  xtt_slave_sCtx *ctx = (xtt_slave_sCtx *) calloc( 1, sizeof(xtt_slave_sCtx));
  ctx->aref = aref;

  // Count modules
  module_cnt = 0;
  for ( sts = gdh_GetChild( aref.Objid, &oid);
	ODD(sts);
	sts = gdh_GetNextSibling( oid, &oid)) {
    module_cnt++;
  }

  ctx->mc = (gsd_sModuleClass *) calloc( module_cnt + 2, sizeof(gsd_sModuleClass));
  mc_cnt = 0;
  ctx->editor_ctx = editor_ctx;
  
  ctx->mc[0].cid = pwr_cClass_Pb_Module;
  sts = gdh_ObjidToName( cdh_ClassIdToObjid(ctx->mc[0].cid),  
			 ctx->mc[0].name, sizeof(ctx->mc[0].name), cdh_mName_object);
  if ( EVEN(sts)) return sts;
  mc_cnt++;

  for ( sts = gdh_GetChild( aref.Objid, &oid);
	ODD(sts);
	sts = gdh_GetNextSibling( oid, &oid)) {
    sts = gdh_GetObjectClass( oid, &cid);
    if ( EVEN(sts)) return sts;

    found = 0;
    for ( int i = 0; i < mc_cnt; i++) {
      if ( ctx->mc[i].cid == cid) {
	found = 1;
	break;
      }
    }
    if ( found)
      continue;

    ctx->mc[mc_cnt].cid = cid;
    sts = gdh_ObjidToName( cdh_ClassIdToObjid(cid),
			   ctx->mc[mc_cnt].name, sizeof(ctx->mc[0].name), cdh_mName_object);
    if ( EVEN(sts)) return sts;
    mc_cnt++;
  }

  if ( strchr( gsdfile, '/') == 0) {
    strcpy( fname, "$pwrp_exe/");
    strcat( fname, gsdfile);
  }
  else
    strcpy( fname, gsdfile);
    
  ctx->gsd = new pb_gsd();
  sts = ctx->gsd->read( fname);
  if ( EVEN(sts))
    return sts;
    
  ctx->gsd->set_classes( ctx->mc);

  sts = xtt_pb_dp_slave_load_modules( ctx);
  if ( EVEN(sts)) return sts;

  *ctxp = ctx;
  return 1;
}
Beispiel #5
0
int Graph::trend_init( graph_sObjectTrend *td, pwr_sAttrRef *arp)
{
    pwr_tClassId classid;
    pwr_tFloat32 max_limit = 100;
    pwr_tFloat32 min_limit = 0;
    int sts;
    pwr_sAttrRef attrref;
    grow_tObject object;
    int presminlimit_found = 0;
    int presmaxlimit_found = 0;
    double scan_time;

    if ( arp && cdh_ObjidIsNotNull( arp->Objid))
    {
        sts = gdh_GetAttrRefTid( arp, &classid);
        if ( EVEN(sts)) return sts;

        // Try to find attributes PresMaxLimit and PresMinLimit
        sts = gdh_ArefANameToAref( arp, "PresMaxLimit", &attrref);
        if ( ODD(sts))
        {
            sts = gdh_GetObjectInfoAttrref( &attrref, (void *)&max_limit, sizeof(max_limit));
            if ( EVEN(sts)) return sts;
            presmaxlimit_found = 1;
        }
        sts = gdh_ArefANameToAref( arp, "PresMinLimit", &attrref);
        if ( ODD(sts))
        {
            sts = gdh_GetObjectInfoAttrref( &attrref, (void *)&min_limit, sizeof(min_limit));
            if ( EVEN(sts)) return sts;
            presminlimit_found = 1;
        }
    }
    td->pres_max_limit_old = max_limit;
    td->pres_min_limit_old = min_limit;

    // Configure bar
    sts = grow_FindObjectByName( grow->ctx, "ActualValueBar",
                                 &td->bar_object);
    if ( ODD(sts))
    {
        if ( min_limit != max_limit)
            grow_SetBarRange( td->bar_object, double(min_limit), double(max_limit));
    }

    // Get pointers to max and min value
    sts = grow_FindObjectByName( grow->ctx, "PresMaxLimit", &object);
    if ( ODD(sts))
    {
        GeDyn *dyn;
        grow_GetUserData( object, (void **)&dyn);
        td->pres_max_limit_p = (pwr_tFloat32 *) dyn->get_p();
        if ( !presmaxlimit_found)
            // PresMaxLimit in local database, set value
            *td->pres_max_limit_p = max_limit;
    }

    sts = grow_FindObjectByName( grow->ctx, "PresMinLimit", &object);
    if ( ODD(sts))
    {
        GeDyn *dyn;
        grow_GetUserData( object, (void **)&dyn);
        td->pres_min_limit_p = (pwr_tFloat32 *) dyn->get_p();
        if ( !presminlimit_found)
            // PresMinLimit in local database, set value
            *td->pres_min_limit_p = min_limit;
    }

    // Configure trend
    sts = grow_FindObjectByName( grow->ctx, "ActualValueTrend",
                                 &td->trend_object);
    if ( EVEN(sts)) return sts;

    if ( td->pres_min_limit_p && td->pres_max_limit_p)
    {
        if ( min_limit != max_limit)
            grow_SetTrendRangeY( td->trend_object, 0, double(min_limit), double(max_limit));
    }

    // Configure slider
    sts = grow_FindObjectByName( grow->ctx, "ActualValueSlider",
                                 &td->slider_object);
    if ( ODD(sts))
    {
        if ( td->pres_min_limit_p && td->pres_max_limit_p)
        {
            if ( min_limit != max_limit)
                grow_SetSliderRange( td->slider_object, double(min_limit), double(max_limit));
        }
        GeDyn *dyn;
        grow_GetUserData( td->slider_object, (void **)&dyn);
        td->slider_disable_p = dyn->ref_slider_disabled();
        if ( td->slider_disable_p)
            *td->slider_disable_p = 1;
    }

    // Set scantime variable in local database
    grow_GetTrendScanTime( td->trend_object, &scan_time);
    td->scan_time_p = (float *) localdb_ref_or_create( "ScanTime",
                      pwr_eType_Float32);
    td->old_scan_time = float( scan_time*200);
    *td->scan_time_p = td->old_scan_time;

    // Get Hold button
    sts = grow_FindObjectByName( grow->ctx, "TrendHold",
                                 &td->hold_button_object);
    if ( ODD(sts))
        td->hold_button_p = (int *) localdb_ref_or_create( "TrendHold",
                            pwr_eType_Boolean);

    GeDyn *dyn;
    grow_GetUserData( td->trend_object, (void **)&dyn);
    td->data_scan_time_p = dyn->ref_trend_scantime();
    td->hold_p = dyn->ref_trend_hold();

    sts = grow_FindObjectByName( grow->ctx, "SliderDisable",
                                 &td->slider_button_object);
    if ( ODD(sts))
        td->slider_button_p = (int *) localdb_ref_or_create( "SliderDisable",
                              pwr_eType_Boolean);

    return 1;
}
Beispiel #6
0
static int graph_object_dx( Graph *graph, pwr_sAttrRef *arp)
{
    int sts;
    graph_sObjectDx *od;
    pwr_tAttrRef aref, chanaref;
    pwr_tAName aname;
    pwr_tCid card_cid;

    od = (graph_sObjectDx *) calloc( 1, sizeof(graph_sObjectDx));
    graph->graph_object_data = (void *) od;
    graph->graph_object_close = graph_object_dx_close;

    sts = gdh_GetAttrRefTid( arp, &od->cid);
    if ( EVEN(sts)) return sts;

    // Get channel object
    sts = gdh_ArefANameToAref( arp, "SigChanCon", &aref);
    if ( EVEN(sts)) {
        // Dv object, register scan function and return with success
        graph->graph_object_scan = graph_object_dx_scan;
        return 1;
    }

    sts = gdh_GetObjectInfoAttrref( &aref, &chanaref, sizeof(chanaref));
    if ( EVEN(sts)) return sts;

    od->local_conv_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "ConversionOn",
                       pwr_eType_Boolean);
    od->local_inv_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "InvertOn",
                      pwr_eType_Boolean);
    od->local_test_p = (pwr_tBoolean *) graph->localdb_ref_or_create( "TestOn",
                       pwr_eType_Boolean);

    // Get card object
    if ( chanaref.Flags.b.ObjectAttr) {
        sts = gdh_GetObjectClass( chanaref.Objid, &card_cid);
        if ( EVEN(sts)) return sts;
    }
    else
        card_cid = 0;

    switch ( card_cid) {
    case pwr_cClass_Ssab_DI32D: {
        pwr_tAName card_name;
        unsigned int chan_idx = (chanaref.Offset - pwr_AlignLW(sizeof(pwr_sClass_Ssab_BaseDiCard))) / pwr_AlignLW(sizeof(pwr_sClass_ChanDi));

        sts = gdh_ObjidToName( chanaref.Objid, card_name, sizeof(card_name), cdh_mNName);
        if ( EVEN(sts)) return sts;

        if ( chan_idx < 16) {
            strcpy( aname, card_name);
            strcat( aname, ".ConvMask1");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            strcpy( aname, card_name);
            strcat( aname, ".InvMask1");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            od->mask = 1 << chan_idx;
        }
        else if ( chan_idx < 32) {
            strcpy( aname, card_name);
            strcat( aname, ".ConvMask2");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            strcpy( aname, card_name);
            strcat( aname, ".InvMask2");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            od->mask = 1 << (chan_idx - 16);
        }
        else
            return 0;

        break;
    }
    case pwr_cClass_Ssab_DO32DKS:
    case pwr_cClass_Ssab_DO32DKS_Stall: {
        pwr_tAName card_name;
        unsigned int chan_idx = (chanaref.Offset - pwr_AlignLW(sizeof(pwr_sClass_Ssab_BaseDoCard))) / pwr_AlignLW(sizeof(pwr_sClass_ChanDo));

        sts = gdh_ObjidToName( chanaref.Objid, card_name, sizeof(card_name), cdh_mNName);
        if ( EVEN(sts)) return sts;

        if ( chan_idx < 16) {
            strcpy( aname, card_name);
            strcat( aname, ".TestMask1");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            strcpy( aname, card_name);
            strcat( aname, ".InvMask1");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            od->mask = 1 << chan_idx;
        }
        else if ( chan_idx < 32) {
            strcpy( aname, card_name);
            strcat( aname, ".TestMask2");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            strcpy( aname, card_name);
            strcat( aname, ".InvMask2");

            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid,
                                    sizeof(pwr_tBoolean), 0, true);

            od->mask = 1 << (chan_idx - 16);
        }
        else
            return 0;

        if ( od->local_conv_p)
            *od->local_conv_p = 1;

        break;
    }
    default: {
        pwr_tAName chan_name;

        sts = gdh_AttrrefToName( &chanaref, chan_name, sizeof(chan_name),
                                 cdh_mNName);
        if ( ODD(sts)) {
            if ( od->cid == pwr_cClass_Di) {
                strcpy( aname, chan_name);
                strcat( aname, ".ConversionOn");
                graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->conv_p, &od->conv_subid,
                                        sizeof(pwr_tBoolean), 0, true);
            }


            strcpy( aname, chan_name);
            strcat( aname, ".InvertOn");
            graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->inv_p, &od->inv_subid,
                                    sizeof(pwr_tBoolean), 0, true);


            if ( od->cid == pwr_cClass_Do) {
                strcpy( aname, chan_name);
                strcat( aname, ".TestOn");
                graph->ref_object_info( glow_eCycle_Slow, aname, (void **)&od->test_p, &od->test_subid,
                                        sizeof(pwr_tBoolean), 0, true);

                if ( od->local_conv_p)
                    *od->local_conv_p = 1;
            }
        }
    }
    }

    // Register scan function
    graph->graph_object_scan = graph_object_dx_scan;
    return 1;
}