static int trace_connect_bc( flow_tObject object, char *name, char *attr, flow_eTraceType type, void **p) { pwr_tAName attr_str; int size; vldh_t_node vnode; pwr_tSubid *subid_p, subid; int sts; printf( "Connecting %s.%s\n", name, attr); if ( strcmp( name, "") == 0 || strcmp( attr, "") == 0) return 1; switch( type) { case flow_eTraceType_Boolean: size = sizeof(pwr_tBoolean); break; case flow_eTraceType_Int32: size = sizeof(pwr_tInt32); break; case flow_eTraceType_Float32: size = sizeof(pwr_tFloat32); break; default: size = sizeof(pwr_tInt32); } strcpy( attr_str, name); strcat( attr_str, "."); strcat( attr_str, attr); if ( flow_GetObjectType( object) == flow_eObjectType_Node) { if ( flow_GetNodeGroup( object) == flow_eNodeGroup_Trace) { sts = gdh_RefObjectInfo( attr_str, p, &subid, size); if ( EVEN(sts)) return sts; subid_p = (pwr_tSubid *) calloc( 1, sizeof(pwr_tSubid)); *subid_p = subid; flow_SetUserData( object, (void *) subid_p); } else { flow_GetUserData( object, (void **) &vnode); sts = gdh_RefObjectInfo( attr_str, p, &vnode->hn.trace_subid, size); if ( EVEN(sts)) return sts; } } return 1; }
int XAttNav::trace_connect_bc( brow_tObject object, char *name, char *attr, flow_eTraceType type, void **p) { pwr_tAName attr_str; int sts; Item *base_item; /* printf( "Connecting %s.%s\n", name, attr); */ if ( strcmp(name,"") == 0) return 1; brow_GetUserData( object, (void **)&base_item); switch( base_item->type) { case xnav_eItemType_Attr: case xnav_eItemType_Enum: case xnav_eItemType_Mask: case xnav_eItemType_AttrArrayElem: case xnav_eItemType_Collect: { ItemAttr *item; item = (ItemAttr *) base_item; strcpy( attr_str, name); strcat( attr_str, "."); strcat( attr_str, attr); sts = gdh_RefObjectInfo( attr_str, p, &item->subid, item->size); if ( EVEN(sts)) return sts; break; } default: ; } return 1; }
static void dlink_area ( plc_sDlink *dp, char *name, int size ) { pwr_tStatus sts; if ((dp->size = size) == 0) return; /* We have no objects of this type. */ sts = gdh_RefObjectInfo(name, &dp->p, &dp->sid, dp->size); if (EVEN(sts)) { errh_Error("Direct link object %s, %m", name, sts); exit(sts); } }
static pwr_tStatus InitTrendList( trend_tCtx ctx) { pwr_tStatus sts; pwr_tUInt32 dummy; pwr_tTypeId type; int tix; pwr_tAttrRef aref; pwr_tAttrRef oaref; pwr_tAName name; pwr_tDisableAttr disabled; /* Init DsTrend objects */ /* Scan through typelist and insert valid objects in list and initiate */ /* the DsTrend objects. */ for ( sts = gdh_GetClassListAttrRef(pwr_cClass_DsTrend, &aref); ODD(sts); sts = gdh_GetNextAttrRef( pwr_cClass_DsTrend, &aref, &aref) ) { trend_sListEntry *ep; pwr_sClass_DsTrend *o; sts = gdh_AttrrefToName( &aref, name, sizeof(name), cdh_mNName); if (EVEN(sts)) continue; /* Check if parent object is disabled */ sts = gdh_AttrArefToObjectAref( &aref, &oaref); if ( ODD(sts)) { sts = gdh_ArefDisabled( &oaref, &disabled); if ( ODD(sts) && disabled) continue; } ep = calloc(1, sizeof(*ep)); if (ep == NULL) { errh_CErrLog(DS__ERRALLOC, NULL); errh_SetStatus( PWR__SRVTERM); exit(DS__ERRALLOC); } sts = gdh_RefObjectInfo(name, (pwr_tAddress *)&ep->o, &ep->o_subid, sizeof(*ep->o)); if (EVEN(sts)) { errh_Error("Couldn't get subscription for '%s'\n%m", name, sts); free(ep); continue; } o = ep->o; /* Set init values */ o->BufferStatus[0] = 1; o->BufferStatus[1] = 1; o->NoOfBuffers = 2; o->NoOfBufElement = 239; /* Initiate DsTrend object, sampled attribute must be on local node */ sts = gdh_DLRefObjectInfoAttrref((pwr_sAttrRef *)&o->DataName, (pwr_tAddress *)&o->DataPointer, &o->DataSubId); if (EVEN(sts)) { if ( sts == GDH__RTDBNULL && IsDisabled( &o->DataName)) continue; errh_Error("Couldn't get direct link to %s's attribute DataName\n%m", name, sts); gdh_UnrefObjectInfo(ep->o_subid); free(ep); continue; } sts = gdh_GetAttributeCharAttrref((pwr_sAttrRef *)&o->DataName, &type, &dummy, &dummy, &dummy); if (EVEN(sts)) { errh_Error("Couldn't get datatype for %s's attribute DataName\n%m", name, sts); gdh_UnrefObjectInfo(ep->o_subid); free(ep); continue; } tix = cdh_TypeIdToIndex(type); if (!IsValidType(tix)) { errh_Error("No valid datatype for %s's attribute DataName\n%m", name, DS__ERRTYPE); gdh_UnrefObjectInfo(ep->o_subid); free(ep); continue; } o->DataType = tix; if ( o->Multiple == 0) o->Multiple = 1; o->NoOfSample = (o->StorageTime * ctx->scantime) / o->Multiple; if(o->NoOfSample > o->NoOfBufElement) o->NoOfSample = o->NoOfBufElement; o->ScanTime = ctx->scantime; ep->next = ctx->o_list; ctx->o_list = ep; } /* Init DsTrendCurve objects */ /* Scan through typelist and insert valid objects in list and initiate the DsTrend objects. */ for (sts = gdh_GetClassListAttrRef(pwr_cClass_DsTrendCurve, &aref); ODD(sts); sts = gdh_GetNextAttrRef( pwr_cClass_DsTrendCurve, &aref, &aref) ) { trend_sListEntryTC *ep; pwr_sClass_DsTrendCurve *o; int i; int found; sts = gdh_AttrrefToName( &aref, name, sizeof(name), cdh_mNName); if (EVEN(sts)) continue; /* Check if parent object is disabled */ sts = gdh_AttrArefToObjectAref( &aref, &oaref); if ( ODD(sts)) { sts = gdh_ArefDisabled( &oaref, &disabled); if ( ODD(sts) && disabled) continue; } ep = calloc(1, sizeof(*ep)); if (ep == NULL) { errh_CErrLog(DS__ERRALLOC, NULL); errh_SetStatus( PWR__SRVTERM); exit(DS__ERRALLOC); } ep->first_scan = 1; sts = gdh_RefObjectInfo(name, (pwr_tAddress *)&ep->o, &ep->o_subid, sizeof(*ep->o)); if (EVEN(sts)) { errh_Error("Couldn't get subscription for '%s'\n%m", name, sts); free(ep); continue; } o = ep->o; if ( o->Function & 1) { /* Data stored by user */ gdh_UnrefObjectInfo(ep->o_subid); free(ep); continue; } ep->multiple = (int) (o->ScanTime / ctx->scantime_tc + 0.5); o->NoOfSample = (int) (o->StorageTime / ctx->scantime_tc * ep->multiple + 0.5); /* Initiate DsTrendCuve object, sampled attribute must be on local node */ found = 0; for ( i = 0; i < 10; i++) { if ( cdh_ObjidIsNull( o->Attribute[i].Objid)) continue; /* Link to attribute */ sts = gdh_DLRefObjectInfoAttrref((pwr_sAttrRef *)&o->Attribute[i], (pwr_tAddress *)&ep->datap[i], &ep->data_subid[i]); if (EVEN(sts)) { if ( sts == GDH__RTDBNULL && IsDisabled( &o->Attribute[i])) continue; errh_Error("Couldn't get direct link to %s's attribute %d, %m", name, i+1, sts); ep->datap[i] = 0; continue; } sts = gdh_GetAttributeCharAttrref((pwr_sAttrRef *)&o->Attribute[i], &type, &dummy, &dummy, &dummy); if (EVEN(sts)) { errh_Error("Couldn't get datatype for %s's attribute DataName\n%m", name, sts); gdh_UnrefObjectInfo(ep->data_subid[i]); ep->datap[i] = 0; continue; } tix = cdh_TypeIdToIndex(type); ep->data_size[i] = cdh_TypeToSize( type); if (!IsValidType(tix)) { errh_Error("No valid datatype for %s's attribute DataName\n%m", name, DS__ERRTYPE); gdh_UnrefObjectInfo(ep->data_subid[i]); ep->datap[i] = 0; continue; } o->AttributeType[i] = type; /* Link to buffer */ sts = gdh_DLRefObjectInfoAttrref((pwr_sAttrRef *)&o->Buffers[i], (pwr_tAddress *)&ep->buffheadp[i], &ep->buff_subid[i]); if (EVEN(sts)) { errh_Error("Couldn't get direct link to %s's buffer %d, %m", name, i+1, sts); gdh_UnrefObjectInfo(ep->data_subid[i]); ep->datap[i] = 0; continue; } ep->buffp[i] = (char *)ep->buffheadp[i] + pwr_AlignLW(sizeof(pwr_sClass_CircBuffHeader)); /* Get buffer size */ sts = gdh_GetAttributeCharAttrref( &o->Buffers[i], 0, &ep->buff_size[i], 0, 0); if ( EVEN(sts)) return sts; ep->buff_size[i] -= pwr_AlignLW(sizeof(pwr_sClass_CircBuffHeader)); found = 1; } if ( !found) { errh_Error("No valid attributes for %s", name); gdh_UnrefObjectInfo(ep->o_subid); free(ep); continue; } /* Link to time buffer */ if ( cdh_ObjidIsNotNull( o->TimeBuffer.Objid)) { sts = gdh_DLRefObjectInfoAttrref((pwr_sAttrRef *)&o->TimeBuffer, (pwr_tAddress *)&ep->timeheadp, &ep->timebuff_subid); if (EVEN(sts)) { errh_Error("Couldn't get direct link to %s's time buffer, %m", name, sts); ep->timeheadp = 0; ep->timebuffp = 0; } else ep->timebuffp = (char *)ep->timeheadp + pwr_AlignLW(sizeof(pwr_sClass_CircBuffHeader)); if ( o->TimeResolution == pwr_eTimeResolutionEnum_Nanosecond) ep->time_size = 8; else ep->time_size = 4; /* Get buffer size */ sts = gdh_GetAttributeCharAttrref( &o->TimeBuffer, 0, &ep->timebuff_size, 0, 0); if ( EVEN(sts)) return sts; ep->timebuff_size -= pwr_AlignLW(sizeof(pwr_sClass_CircBuffHeader)); } /* Calculate number of samples */ for ( i = 0; i < 10; i++) { if ( !ep->datap[i]) continue; if ( o->NoOfSample > ep->buff_size[i] / ep->data_size[i]) o->NoOfSample = ep->buff_size[i] / ep->data_size[i]; } if ( ep->timebuffp) { if ( o->NoOfSample > ep->timebuff_size / ep->time_size) o->NoOfSample = ep->timebuff_size / ep->time_size; } for ( i = 0; i < 10; i++) { if ( !ep->datap[i]) continue; ep->buffheadp[i]->Size = o->NoOfSample; ep->buffheadp[i]->ElementSize = ep->data_size[i]; } if ( ep->timebuffp) { ep->timeheadp->Size = o->NoOfSample; ep->timeheadp->ElementSize = ep->time_size; } ep->next = ctx->o_list_tc; ctx->o_list_tc = ep; } if ( ctx->o_list == NULL && ctx->o_list_tc == NULL) return DS__NOOBJECT; else return DS__SUCCESS; }
int Op::sup_init() { pwr_tOid node_oid; pwr_tOid sup_oid; pwr_tAName aname; pwr_tStatus sts; // Index 0 is current node sts = gdh_GetNodeObject( 0, &node_oid); if ( EVEN(sts)) return sts; OpSup sup; sup.node_oid = node_oid; sts = gdh_ObjidToName( node_oid, sup.object_name, sizeof(sup.object_name), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; strcpy( aname, sup.object_name); strcat( aname, ".SystemStatus"); sts = gdh_RefObjectInfo( aname, (void **)&sup.p, &sup.refid, sizeof(pwr_tStatus)); if ( EVEN(sts)) return sts; syi_NodeName( &sts, sup.node_name, sizeof(sup.node_name)); sup_vect.push_back(sup); // Add nodes in NodeLinkSup objects for ( sts = gdh_GetClassList( pwr_cClass_NodeLinkSup, &sup_oid); ODD(sts); sts = gdh_GetNextObject( sup_oid, &sup_oid)) { pwr_sClass_NodeLinkSup *sup_p; qcom_sNode qnode; pwr_tNid nid; sts = gdh_ObjidToPointer( sup_oid, (void **)&sup_p); OpSup nsup; nsup.node_oid = sup_p->Node; sts = gdh_ObjidToName( nsup.node_oid, nsup.object_name, sizeof(nsup.object_name), cdh_mName_volumeStrict); if ( EVEN(sts)) strcpy( nsup.object_name, ""); sts = gdh_ObjidToName( sup_oid, aname, sizeof(aname), cdh_mName_volumeStrict); if ( EVEN(sts)) return sts; strcat( aname, ".SystemStatus"); sts = gdh_RefObjectInfo( aname, (void **)&nsup.p, &sup.refid, sizeof(pwr_tStatus)); if ( EVEN(sts)) return sts; int found = 0; for (nid = qcom_cNNid; qcom_NextNode(&sts, &qnode, nid); nid = qnode.nid) { if ( qnode.nid == nsup.node_oid.vid) { strcpy( nsup.node_name, qnode.name); found = 1; break; } } if ( !found) strcpy( nsup.node_name, "Unknown"); sup_vect.push_back(nsup); } return 1; }
XttFast::XttFast( void *parent_ctx, char *name, pwr_sAttrRef *fast_arp, int *sts) : xnav(parent_ctx), fast_cnt(0), timerid(0), close_cb(0), help_cb(0), first_scan(1), axis_configured(false) { pwr_sAttrRef aref = pwr_cNAttrRef; pwr_tAName fast_name; pwr_tAName attr_name; pwr_sClass_DsFastCurve fp; int i, j; *sts = XNAV__SUCCESS; // Get current status of the fast objects i = 0; aref = *fast_arp; if ( cdh_ObjidIsNull( aref.Objid)) { *sts = XNAV__FASTCONFIG; return; } *sts = gdh_AttrrefToName( &aref, fast_name, sizeof(fast_name), cdh_mNName); if (EVEN(*sts)) return; *sts = gdh_GetObjectInfo( fast_name, &fp, sizeof(fp)); if ( EVEN(*sts)) return; max_points = fp.NoOfPoints; fast_function = fp.Function; strcpy( attr_name, fast_name); strcat( attr_name, ".TriggTime"); gdh_NameToAttrref( pwr_cNObjid, attr_name, &trigg_time_attr); if ( fast_function & fast_mFunction_BeforeTrigg) { strcpy( attr_name, fast_name); strcat( attr_name, ".TriggIndex"); gdh_NameToAttrref( pwr_cNObjid, attr_name, &trigg_index_attr); strcpy( attr_name, fast_name); strcat( attr_name, ".FirstIndex"); gdh_NameToAttrref( pwr_cNObjid, attr_name, &first_index_attr); strcpy( attr_name, fast_name); strcat( attr_name, ".LastIndex"); gdh_NameToAttrref( pwr_cNObjid, attr_name, &last_index_attr); } // Create data for time axis gcd = new GeCurveData( curve_eDataType_DsTrend); gcd->x_data[0] = (double *) malloc( 8 * max_points); strcpy( gcd->x_name, "Time"); gcd->x_axis_type[0] = curve_eAxis_x; memcpy( &time_buff, &fp.TimeBuffer, sizeof(time_buff)); fast_cnt = 0; for ( i = 0; i < FAST_CURVES; i++) { if ( fp.CurveValid[i]) { gcd->y_data[fast_cnt] = (double *) calloc( 1, 8 * max_points); gcd->y_axis_type[fast_cnt] = curve_eAxis_y; memcpy( &buff[fast_cnt], &fp.Buffers[i], sizeof(buff[0])); type[fast_cnt] = (pwr_eType) fp.AttributeType[i]; fast_idx[i] = fast_cnt; curve_idx[fast_cnt] = i; *sts = gdh_AttrrefToName( &fp.Attribute[i], attr_name, sizeof(attr_name), cdh_mNName); if (EVEN(*sts)) continue; strcpy( gcd->y_name[fast_cnt], attr_name); fast_cnt++; } } if ( !fast_cnt) { *sts = XNAV__NOVALIDCURVE; free(gcd); gcd = 0; return; } // Subscribe to object strcpy( attr_name, fast_name); strcat( attr_name, ".New"); *sts = gdh_RefObjectInfo( attr_name, (pwr_tAddress *)&new_p, &new_subid, sizeof(pwr_tBoolean)); if ( EVEN(*sts)) return; for ( i = 0; i < fast_cnt; i++) { switch( type[i]) { case pwr_eType_Float32: case pwr_eType_Int32: case pwr_eType_UInt32: element_size[i] = 4; break; case pwr_eType_Float64: case pwr_eType_Int64: case pwr_eType_UInt64: element_size[i] = 8; break; case pwr_eType_Int16: case pwr_eType_UInt16: element_size[i] = 2; break; case pwr_eType_Int8: case pwr_eType_UInt8: element_size[i] = 1; break; default: element_size[i] = 4; } gcd->rows[i] = max_points; } gcd->cols = fast_cnt; axis_configured = true; for ( i = 0; i < FAST_CURVES; i++) { if ( fp.CurveValid[i]) { j = fast_idx[i]; if ( fp.YMinValue[i] != fp.YMaxValue[i]) gcd->scale( gcd->y_axis_type[j], gcd->y_value_type[j], fp.YMinValue[i], fp.YMaxValue[i], &gcd->y_min_value_axis[j], &gcd->y_max_value_axis[j], &gcd->y_trend_lines[j], &gcd->y_axis_lines[j], &gcd->y_axis_linelongq[j], &gcd->y_axis_valueq[j], gcd->y_format[j], &gcd->y_axis_width[j], 1, 1); else axis_configured = false; } } if ( fp.Active) first_scan = 0; fast_scan( this); gcd->select_color( 0); if ( strcmp( fp.Title, "") != 0) strcpy( title, fp.Title); else cdh_StrncpyCutOff( title, name, sizeof(title), 1); // timerid = XtAppAddTimeOut( // XtWidgetToApplicationContext(parent_widget), 1000, // (XtTimerCallbackProc)fast_scan, this); }
static void pwrsrv_SubAdd( rpvd_sMsgSubAdd *msg) { rpvd_sMsgAny rmsg; pwr_tAName name; pwr_tUInt32 asize, aoffs, aelem; pwr_tTypeId atid; pwr_tStatus sts; pwrsrv_sSubItem *si; void *p; pwr_tRefId dlid; rmsg.Type = rpvd_eMsg_Status; rmsg.Id = msg->Id; /* Check that this rix doesn't exist */ for ( si = pwrsrv_sublist; si; si = si->next) { if ( si->rix == msg->Rix) { return; } } sts = gdh_ObjidToName( msg->Oid, name, sizeof(name), cdh_mName_volumeStrict); if ( EVEN(sts)) { rmsg.Status = sts; udp_Send( (char *)&rmsg, sizeof(rmsg)); return; } if ( strcmp( msg->Attribute, "") != 0) { strcat( name, "."); strcat( name, msg->Attribute); sts = gdh_GetAttributeCharacteristics( name, &atid, &asize, &aoffs, &aelem); if ( EVEN(sts)) { rmsg.Status = sts; udp_Send( (char *)&rmsg, sizeof(rmsg)); return; } } else { sts = gdh_GetObjectSize( msg->Oid, &asize); if ( EVEN(sts)) { rmsg.Status = sts; udp_Send( (char *)&rmsg, sizeof(rmsg)); return; } } /* Direct link to atttribute */ sts = gdh_RefObjectInfo( name, &p, &dlid, asize); if ( EVEN(sts)) { rmsg.Status = sts; udp_Send( (char *)&rmsg, sizeof(rmsg)); return; } /* Insert first in sublist */ si = (pwrsrv_sSubItem *) calloc( 1, sizeof(pwrsrv_sSubItem)); si->oid = msg->Oid; strcpy( si->attribute, msg->Attribute); si->size = asize; si->rix = msg->Rix; si->p = p; si->dlid = dlid; si->next = pwrsrv_sublist; if ( si->next) si->next->prev = si; pwrsrv_sublist = si; printf( "SubAdd: %d %s\n", msg->Rix, name); rmsg.Status = GDH__SUCCESS; udp_Send( (char *)&rmsg, sizeof(rmsg)); }